Bonjour à tous,
je souhaite grâce à ajax exécuter une requête update sur ma bdd lors du clique sur un bouton.
J'envoi donc en post dans mon javascript les données du formulaire correspondant. Il y a environ 200 données (input) à envoyer.
Je souhaiterais savoir ce qu'il est conseillé de faire et pourquoi ? Serialize ou serializeArray ?
Ensuite, c'est le gros de ma question, comment je récupère ses fameuses données dans mon php ? Une boucle sur mon post ?
Voici le code :
js
$(document).ready(function(){
$('form.editCodes').submit(function(e){ //submitEdit est l id du input submit (le bouton) dans le fichier editcodes
// J'empêche le comportement par défaut du navigateur, c-à-d de soumettre le formulaire
e.preventDefault();
// On créer une variable contenant le formulaire sérialisé des éditions de libellés et de codes
var donnees = $(this).serialize();
var donneesArray = $(this).serializeArray();
var donneesjson = JSON.stringify(donneesArray);
//affichage des données du array du form dans la console du navigateur
console.log( donnees );
console.log( donneesArray );
console.log( donneesjson );
event.preventDefault();
// Envoi de la requête HTTP en mode asynchrone
$.post(
'modif.php', // Un script PHP que l'on va créer juste après
{data : donneesArray}, // Nous récupérons les valeurs de nos textarea que l'on fait passer à modif.php
function(data){ // Cette fonction retourne le message de connection ou erreur.
console.log( data );
event.preventDefault()
/*if(data == 0)
{
// Affichage d'un message suite retour requête modif.php
$("#resultatEdit").html("<p>Aucune modification.</p>");
}
else
{
// Affichage d'un message suite retour requête modif.php
$("#resultatEdit").html("<p>Modification(s) enregistrée(s).</p>");
}*/
},
'text' // Nous souhaitons recevoir "Success" ou "Failed", donc on indique text !
);
});
});
qui envoie les données dans modif.php
<?php
//requete modification de données pour les libellés et les codes.
//initialisation de la variable
$total_modifs = 0;
// On récupère tous les codes portes
$recup_code = $bdd->query('SELECT * FROM cp_codes');
//boucle récupération de l idcode et update des tables.
while ($recup_codesportes = $recup_code->fetch())
{
$recupidcodesportes = $recup_codesportes['cod_id'];
//contrôle que la donnée du array "donnees" du post_edit.js correspond au lib
$recuplibelleporte = $_POST['lib'.$recupidcodesportes.''];
$recuplibelleporte = addslashes($recuplibelleporte);
$recupcodesportes = $_POST['cod'.$recupidcodesportes.''];
$recupcodesportes = addslashes($recupcodesportes);
$bddmodifcodelib = 'UPDATE cp_codes SET cod_libelle = \''.$recuplibelleporte.'\', cod_codes = \''.$recupcodesportes.'\' WHERE cod_id= \''.$recupidcodesportes.'\'';
//$nb_modifs = $bdd->exec($bddmodifcodelib);
$total_modifs = $total_modifs + $nb_modifs;
}
foreach( $_POST['name'] as $datepicker ){
//récupérer et transformer la date version en bon format pour bdd
$bddmodifdate = 'UPDATE cp_date SET date_modification = STR_TO_DATE(\''.$datepicker.'\',\'%d/%m/%Y\')';
//$modifdateversion = $bdd->exec($bddmodifdate);
$total_modifs = $total_modifs + $modifdateversion;
//mysql_query("UPDATE transactions SET IDDepartamentDestinatie = '$v' WHERE id = '{$_POST['id'][$k]}'");
}
echo 'post :'.$datepicker;
echo ' / requetes bdd :'.$recuplibelleporte.' / '.$bddmodifdate.' / ' .$bddmodifcodelib;
//echo $_POST['datepicker'];
//echo $total_modifs;
?>
Mon formulaire initial :
<form class="editCodes">
<!-- date version des codes -->
<div id="modifdateversion">
<label for="datepicker" >Date de la version :</label>
<div id="modifdateversioninput">
<input type="text" maxlength="10" id="datepicker" name="datepicker" label="dateversion" placeholder="Modification de la date de version :" value="<?php echo $recupdate; ?>">
</div>
</div>
<!-- 40 caractères maximums par li, sinon passage à la ligne. -->
<div data-role="collapsibleset" data-filter="true" data-inset="true" id="collapsiblesetForFilterSet" data-input="#searchForCollapsibleSet">
<?php
//boucle affichage des résidences.
// On récupère toutes les résidences
$reponse_residence = $bdd->query('SELECT * FROM cp_residence');
// On affiche chaque residence entrée une à une
while ($donnees_residence = $reponse_residence->fetch())
{
$nomresidence = $donnees_residence['res_nom'];
$identifiantresidence = $donnees_residence['res_id'];
?>
<div data-role="collapsible" data-filtertext="<?php echo $nomresidence; ?>">
<h2><?php echo $nomresidence; ?></h2>
<ul data-role="listview" data-shadow="false" data-inset="true" data-corners="false" data-x-filter="false">
<?php
// On récupère tous les codes portes de la résidence affichée
$reponse_code = $bdd->query('SELECT * FROM cp_codes WHERE cod_residence='.$identifiantresidence.'');
//boucle affichage des libellés et codes portes.
while ($donnees_codesportes = $reponse_code->fetch())
{
$idcode = $donnees_codesportes['cod_id'];
$libelle = $donnees_codesportes['cod_libelle'];
$codes = $donnees_codesportes['cod_codes'];
?>
<li>
<input type="text" maxlength="60" name="lib<?php echo $idcode ?>" id="lib<?php echo $idcode ?>" placeholder="Libellé :" value="<?php echo $libelle; ?>">
<input type="text" maxlength="60" name="cod<?php echo $idcode ?>" id="cod<?php echo $idcode ?>" placeholder="Code :" value="<?php echo $codes; ?>">
</li>
<?php
}
?>
</ul>
</div>
<?php
}
$reponse_residence->closeCursor(); // Termine le traitement de la requête
$reponse_code->closeCursor(); // Termine le traitement de la requête
?>
</div>
</form>
`''