Modification dans formulaire avec condition

Par Jenjak, il y a 9 ans


Bonjour à tous !

Je me tourne à nouveau vers vous concernant un soucis que je n'arrive pas à résoudre. Le problème est simple:

Sur mon "appli" j'ai une multitude de lignes provenants d'une base de données, chaque ligne à une checkbox ($_POST['choix'])

Quand je coche une ou plusieurs checkbox et que je clique sur modifier cela me renvoi les lignes selectionnées dans des champs texte ($_POST['modifier'])

Je voudrais maintenant pouvoir modifier ces lignes, cliquer sur modifier une fois terminé et lancer une requête UPDATE, malheureusement je me suis un peu embrouillé avec mes conditions, j'ai un peu tout essayé mais je ne vois pas ou placer cette requête...

Voici le code:

$sep correspond à un GET pour le type de base

if (isset($sep) && !empty($_POST['choix']) && isset($_POST['modifier'])) { echo "ENTREE(S) A MODIFIER"; echo "<form action='' method='post' enctype='multipart/form-data'>"; foreach($_POST['choix'] as $val) { $req_select = $bdd->query("SELECT * FROM temp_$sep WHERE id = $val"); foreach($req_select as $req): @$EndtoEndId = $req[EndtoEndId]; @$InstdAmt = $req[InstdAmt]; @$Nm2 = $req[N2]; @$IBAN = $req[IB]; @$postInstAmt = addslashes($_POST['InstdAmt']); @$postNm2 = addslashes($_POST['N2']); @$postIBAN = addslashes($_POST['IB']); echo " <input type='text' name='InstdAmt' value='$req[InstdAmt]'/> <input type='text' name='N2' value='$req[N2]'/> <input type='text' name='IB' value='$req[IB]'/><br /> "; endforeach; } echo " <input type='submit' name='modification' value='VALIDER LA MODIFICATION'> </form> "; }

je voudrais placer:

if (isset($_POST['modification'])) { $req_modif = $bdd->query("UPDATE temp_$sep SET InstdAmt='$postInstAmt', Nm2='$postN2', IBAN='$postIB' WHERE id = $val"); }

Merci d'avance pour votre aide et vos conseils !

11 réponses

Carouge10, il y a 9 ans

Bonjour,
Pour rappel, le "name" de chaque input doit être unique sinon il y aura des doublons.
Ensuite, vous faites des tests avec un var-dump($_POST); pour voir ce qui vous est retouné en fonction de ce que vous cochés.

Jenjak, il y a 9 ans

Bonjour carouge10, merci pour ta réponse, effectivement je ne sais pas ce qui m'a pris de mettre un name différent pour chaque input...

Au niveau de la coche c'est OK, je récupère bien les lignes que j'ai séléctionné dans un input chacun, je peux faire les modifs dessus mais je ne vois pas comment placer ma requete qui dira "une fois appuyé sur POST modification alors je fais l'UPDATE"

Carouge10, il y a 9 ans

comment avez-vous coder vos checkbox ?

Jenjak, il y a 9 ans

Voici la partie des checkbox:

if (!isset($_POST['valider']) && !isset($_POST['supprimer']) && !isset($_POST['modifier']) && !isset($_POST['modification'])) { $req_temps->execute(); echo "<form method='POST' name='id' id='id' action=''>"; if (isset($sep)) { echo "<input type='checkbox' onclick='cocher(this.checked)' /> Tout cocher<br /><br />"; } foreach($req_temps as $temp): echo "<div class='ligne'>"; echo "<input type='checkbox' name='choix[]' value='$temp[id]'>"; echo "<div class='bloc1'>$temp[EndtoEndId]</div>"; echo "<div class='bloc2'>$temp[InstdAmt]</div>"; echo "<div class='bloc5'>$temp[BI]</div>"; echo "<div class='bloc6'>$temp[N2]</div>"; echo "<div class='bloc7'>$temp[IB]</div>"; echo "<div class='bloc8'>$temp[Ustrd]</div>"; echo "</div>"; endforeach; if (isset($sep)){ echo "<br /><br /><center><input type='submit' name='valider' value='VALIDER CES ENTREES'> <input type='submit' name='supprimer' value='SUPPRIMER CES ENTREES'><input type='submit' name='modifier' value='MODIFIER CES ENTREES'></center>"; } echo "</form>"; }
Carouge10, il y a 9 ans

d'accord, et que renvoi le var_dump($_POST); après avoir valider la modification des données ?

if (isset($_POST['modification'])) { var_dump($_POST); }
Jenjak, il y a 9 ans

Il me renvoi seulement le champ

<input type='text' name='modif' value='$req[IB]'/><br />

array(2) { ["modif"]=> string(27) "7845896AA" ["modification"]=> string(23) "VALIDER LA MODIFICATION" }

Jenjak, il y a 9 ans

En remettant un name différent pour chaque champ il me retourne bien les 3

array(4) { ["modif"]=> string(6) "470" ["modif2"]=> string(18) "M. C.J" ["modif3"]=> string(27) "dze85dpPP" ["modification"]=> string(23) "VALIDER LA MODIFICATION" }

Carouge10, il y a 9 ans

Comme je vous l'ai dit, il faut un nom unique pour chaque champ:

foreach($req_select as $req): @$EndtoEndId = $req[EndtoEndId]; @$InstdAmt = $req[InstdAmt]; @$Nm2 = $req[N2]; @$IBAN = $req[IB]; @$postInstAmt = addslashes($_POST['InstdAmt']); @$postNm2 = addslashes($_POST['N2']); @$postIBAN = addslashes($_POST['IB']); echo " <input type='text' name='InstdAmt-".$req['Id']'."' value='$req[InstdAmt]'/> <input type='text' name='N2-".$req['Id']."' value='$req[N2]'/> <input type='text' name='IB-".$req['Id']."' value='$req[IB]'/><br /> "; endforeach;

J'ai pris $req['Id'] comme Id unique pour la modification, à vous d'adapter en fonction de votre table

Jenjak, il y a 9 ans

Je crois que je viens de trouver carouge10, ne vous tracassez pas, je ne suis pas du tout dedans aujourd'hui, ça arrive... :)

Encore merci

Jenjak, il y a 9 ans

Ah oui, juste une chose, ça fonctionne parfaitement pour une ligne, par contre quand j'en selectionne plusieurs ça ne m'en modifie qu'une seule, j'en reviens encore à mon problème de boucle, je ne vois pas ou placer mon post modification pour que la requete se lance sur chaque lignes

if (isset($sep) && !empty($_POST['choix']) && isset($_POST['modifier'])) { echo "ENTREE(S) A MODIFIER"; echo "<form action='' method='post' enctype='multipart/form-data'>"; foreach($_POST['choix'] as $val) { $req_select = $bdd->query("SELECT * FROM temp_$sep WHERE id = $val"); foreach($req_select as $req): echo " <input type='text' name='modif' value='$val'/> <input type='text' name='modif1' value='$req[InstdAmt]'/> <input type='text' name='modif2' value='$req[N2]'/> <input type='text' name='modif3' value='$req[IB]'/><br /> "; endforeach; } echo " <input type='submit' name='modification' value='VALIDER LA MODIFICATION'> </form> "; } if (isset($_POST['modification'])) { $req_modif = $bdd->query("UPDATE temp_$sep SET InstdAmt='$_POST[modif1]', N2='$_POST[modif2]', IB='$_POST[modif3]' WHERE id = '$_POST[modif]'"); var_dump($req_modif); }
Pierrot01, il y a 9 ans

Salut,
c'est normal, dans ton foreach, seul la variable $var est parsée (interprêtée).
il faut mette tes variables obj ou tableau entre { } pour quelle soient parsées.

<input type='text' name='modif' value='$val'/> <input type='text' name='modif1' value='{$req[InstdAmt]}'/> <input type='text' name='modif2' value='{$req[N2]}'/> <input type='text' name='modif3' value='{$req[IB]}'/><br />

@plus

Pierre