Bonsoir à tous,
débutant dans le monde d'Ajax,
je souhaiterai supprimer une série de mail dans une base de donnée dont on aurait chécké la checkbox au préalable.
Actuellement j'ai un une liste de mail qui sont affichés, grâce à une connexion à la base de donnée de mysql par Php.
Devant chaque mail, j'ai ajouté une checkbox afin de pouvoir supprimer une série de mail et pas un à la fois.
Voici le code php pour afficher la checkbox:
$row->mailing_id correspondant bien sûr à l'id de l'élément dans la base de donnée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // CHECKBOX echo "<td class=\"empty_td\"><input type=\"checkbox\" name=\"erase[ ]\" value=\"".$row->mailing_id."\"></td>";
Une fois les checkbox sélectionnée, je clique sur un bouton qui lance le script javascript (js_fct_confirm_checkbox_delete):
site_mailing -> table: nom de la table mysql
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <a href=\"javascript:js_fct_confirm_checkbox_delete('site_mailing', 'mailing_id','form_checkbox','erase','".$mailing_checkbox_confirm_delete."', 'viewmailing_3_3_0.html')\">";
mailing_id -> champ: champ de la table mysql
form_checkbox -> Nom du formulaire
erase -> nom du tableau contenant les id
mailing_checkbox_confirm_delete -> message: message à afficher pour confirmation de la suppression
viewmailing_3_3_0.html ->page: page à recharger ensuite
Jusque là tout fonctionne.
Une fois dans le fichier javascript, je fais ceci:
Et c'est logiquement ci-dessus que j'ai un problème, puisque, il arrive à me supprimer seulement le 1er checkbox sélectionné mais pas les suivants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 /* FUNCTION de chargement de XHR */ function getXhr() { var xhr = null; if(window.XMLHttpRequest) // Firefox et autres { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject){ // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } } else { // XMLHttpRequest non supporté par le navigateur alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; } return xhr; } // SUPPRIME une liste d'utilisateur en fonction du checkbox function js_fct_confirm_checkbox_delete(table, champ, form, name, message, page) { // VERIFIE si au moins un checkbox est TRUE // RECUPERATION des checkbox TRUE var NbrCheckbox = document.forms[form].elements.length; var CheckboxCheckedArray = new Array(); // Contient le numéro des checkboxs qui sont checkée parce que sinon on prend dans l'ordre d'affichage var SendAfter; for ( var i=0; i<NbrCheckbox; i++) // Boucle qui lit chaque checkbox de ma page { // CHEMIN pour atteindre les checkbox dans le formulaire 'form' comptant un nombre 'cpt' de checkbox element = document.forms[form].elements[i]; // CONDITION pour voir si checké ou pas if (element.checked == true) { // SI oui ajoute la valeur du checkbox au tableau CheckboxCheckedArray.push(i); // Ajoute la "coordonnée" de la Checkbox checkée } } // TEST si au moins une checkbox est cochée ET demande confirmation de la suppression if ( (CheckboxCheckedArray.length!=0) && (confirm(message)) ) { var data = null; var filename = "act/act_checkbox_delete.php"; // FICHIER CIBLE var xhr = getXhr(); // TEST for (j=0; j<CheckboxCheckedArray.length; j++) { // Ici on va voir comment faire du post xhr.open("POST",filename,true); // ne pas oublier ça pour le post xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); // CHEMIN pour atteindre les checkbox dans le formulaire 'form' comptant un nombre 'cpt' de checkbox element = document.forms[form].elements[CheckboxCheckedArray[j]]; // CONCATENATION des données dans la variable data data = "table="+table+"&champ="+champ+"&id="+element.value; // ENVOI xhr.send(data); } // RECharge la page location.replace(page); } }
C'est sans doute mon système de boucle qui n'est pas très au point...
Ou peut-être dans le code php mais il me semble qu'il est correcte...
Si quelqu'un pouvait me sortir de ce mauvais pas, cela me ferait très plaisir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // CONNEXION à la base de donnée $sql = "DELETE FROM ".utf8_decode($_POST['table'])." WHERE ".utf8_decode($_POST['champ'])." = '".utf8_decode($_POST['id'])."';"; $result = mysql_query($sql) or die("ERREUR: La requête n'est pas valide: ".mysql_error());
Merci beaucoup.
Partager