OK , donc supposons ce qui suit (pardonnez-moi de re-clarifier la question):
Vous avez un certain nombre de lignes de quelque forme, avec des liens de suppression, et vous voulez confirmer que l'utilisateur veut réellement supprime-le?
Supposons que le code HTML suivant:
<tr>
<td>Some Item 1</td>
<td><a href="?mode=delete&id=1" class="delete-link">Delete</a></td>
</tr>
<tr>
<td>Some Item 2</td>
<td><a href="?mode=delete&id=2" class="delete-link">Delete</a></td>
</tr>
<tr>
<td>Some Item 3</td>
<td><a href="?mode=delete&id=3" class="delete-link">Delete</a></td>
</tr>
Je suppose donc que le même script PHP peut exécuter la suppression, la cueillette sur le paramètre de mode:
<?php
if($_GET['mode'] == 'delete') {
//Check if there is something in $_GET['id'].
if($_GET['id']) {
//Prevent SQL injection, just to be safe.
$query = "DELETE FROM sometable WHERE id='" . mysql_real_escape_string($_GET['id']) . "'";
mysql_query($query);
}
}
Je vais donnez deux solutions à cela sur le côté JavaScript - le premier avec une solution inline, légèrement laide, la seconde utilisant jQuery (http://jquery.com/), et JavaScript discret. Ok, donc pour le premier, je voudrais lier sur l'événement onclick de chaque lien.
<tr>
<td>Some Item 3</td>
<td><a href="?mode=delete&id=3" class="delete-link" onclick="checkDeleteItem();">Delete</a></td>
</tr>
Ensuite, créez une fonction JavaScript:
//This will get called when the link is clicked.
function checkDeleteItem() {
//show the confirmation box
return confirm('Are you sure you want to delete this?');
}
Comme je l'ai dit, je ne aime pas cette solution, car il est horriblement importune, et pas non plus particulièrement robuste.
Maintenant, la solution jQuery:
//Do all this when the DOM is loaded
$(function() {
//get all delete links (Note the class I gave them in the HTML)
$("a.delete-link").click(function() {
//Basically, if confirm is true (OK button is pressed), then
//the click event is permitted to continue, and the link will
//be followed - however, if the cancel is pressed, the click event will be stopped here.
return confirm("Are you sure you want to delete this?");
});
});
, je recommande vivement cette solution par rapport au précédent, car il est beaucoup plus élégant et agréable, et est généralement la meilleure pratique.
Oui, c'est la façon de le faire. –
* Veuillez * essayer d'éviter toute manipulation de données (en particulier la suppression) dans une requête GET. GET est censé être sûr et idempotent. – Rob
Vrai - remplacer les liens par des éléments d'entrée submit est peut-être un bon choix (sur un formulaire avec method = post). – Kazar