[AJAX] Suppression données mysql avec checkbox et passant par ajax
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:
Code:
1 2 3
|
// CHECKBOX
echo "<td class=\"empty_td\"><input type=\"checkbox\" name=\"erase[ ]\" value=\"".$row->mailing_id."\"></td>"; |
$row->mailing_id correspondant bien sûr à l'id de l'élément dans la base de donnée.
Une fois les checkbox sélectionnée, je clique sur un bouton qui lance le script javascript (js_fct_confirm_checkbox_delete):
Code:
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')\">"; |
site_mailing -> table: nom de la table mysql
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:
Code:
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);
}
} |
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.
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...
Code:
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()); |
Si quelqu'un pouvait me sortir de ce mauvais pas, cela me ferait très plaisir.
Merci beaucoup.