Traiter donnée d'un mysql_fetch_array
Résolu
Bonsoir.
J'ai placé un mysql_fetch_array qui me donne toute les lignes de ma table (JR_tutorials) comportant un ID précis (ID nommé 'ID_JB').
Bref sa sa fonctionne, et j'affiche tout ces résultats dans un tableau :
Donc une fois quelles sont affichés je peut les modifier et cliquer sur "submit" pour les envoyer vers la page de traitement (edit_tutorials.php)
Mais la ou je bloque c'est sur leur traitement parceque le nombre de lignes du tableau est variable, donc je vois vraiment pas comment identifier quel ligne de ma bdd je doit modifier en fonction des données que j'envoi dans ma page de traitement.
En vous remerciant par avance.
J'ai placé un mysql_fetch_array qui me donne toute les lignes de ma table (JR_tutorials) comportant un ID précis (ID nommé 'ID_JB').
Bref sa sa fonctionne, et j'affiche tout ces résultats dans un tableau :
<form>
<form name="edit_existing_tutorials" action="edit_tutorials.php" method="POST">
<table>
<?php
$req = mysql_query("SELECT * FROM JR_tutorials WHERE id_jb=$id ORDER BY id_tu DESC");
while ($data = mysql_fetch_array($req)) {
echo '<tr><td><input type="text" class="input_text_2" value="'.$data['DEVICES'].'"></td>';
echo '<td><input type="text" class="input_text_2" value="'.$data['NAME'].'"></td>';
echo '<td><input type="text" class="input_text_2" value="'.$data['LINK'].'"></td>';
echo '<td><input type="text" class="input_text_2" value="'.$data['LANG'].'"></td>';
echo '<td><input type="text" class="input_text_2" value="'.$data['RATE'].'"></td></tr>';
}
mysql_free_result ($req);
?>
</table>
<input type="submit" name="b1" id="input_btn" value="submit">
Donc une fois quelles sont affichés je peut les modifier et cliquer sur "submit" pour les envoyer vers la page de traitement (edit_tutorials.php)
Mais la ou je bloque c'est sur leur traitement parceque le nombre de lignes du tableau est variable, donc je vois vraiment pas comment identifier quel ligne de ma bdd je doit modifier en fonction des données que j'envoi dans ma page de traitement.
En vous remerciant par avance.
23 réponses
-
Alors Bonne année !
-
Oui pour rajouter des lignes sa j'ai réussi sans problème, et vu qu'on peu rajouter autant de ligne qu'on veut j'ai utilisé un foreach de la même manière que dans l'autre script.
Enfin bref ma page marche niquel ;)
Merci encore, j'aurais pas su l'utilisé si tu ne m'avais pas aider :) -
pour rajouter une ligne d'un tableau en javascript c'est possible
ensuite donnes un name différent à la nouvelle ligne crée genre
name="new_ligne[.....
comme cela tu n'aura pas à compter tu les auras directement dans $_POST['new_ligne'] -
Se serais pas mal du tout mais c'est pas indispensable, surtout je t'ai déjà assez embété avec ce script je veut pas te déranger plus longtemps ^^
La sur cette page il me reste la partis ou on l'utilisateur créera une ligne au lieu de la modifier, avec un bouton "insérer une ligne" qui ajoutera une ligne dans le tableau de création des tutoriels, ensuite le script détectera le nombre de ligne créé et réalisera une requête insert into un peu de la même manière que le script utilisé pour les editer, enfin je l'espère :) -
Si tu as beaucoup de lignes, on peut améliorer le système pour éviter l'update si pas de modif dans la ligne ?
-
on y est arrivé qd même !
-
Sa fonctionne !!!!
Magnifique *-*
Merci beaucoup c'est parfait ! -
Je test ton code je te tien au jus dans 10 min ;)
-
je viens de faire le test en réel avec une BDD, avec cette boucle while ça fonctionne:
while ($data = mysql_fetch_assoc($req)) { $id_tu=$data['id_tu']; echo '<tr><td><input type="text" name="ligne['.$id_tu.'][DEVICES]" class="input_text_2" value="'.$data['DEVICES'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][NAME]" class="input_text_2" value="'.$data['NAME'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][LINK]" class="input_text_2" value="'.$data['LINK'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][LANG]" class="input_text_2" value="'.$data['LANG'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][RATE]" class="input_text_2" value="'.$data['RATE'].'"></td></tr>'; } -
ha bon parce que chez moi ça marche, je n'ai pas de BDD mais je vois les valeurs dans la requette
j'ai testé avec ce code:
<html> <head> <title>Test update de mysql_fetch_array avec foreach</title> </head> <body> <?php if(isset($_POST['b1'])){ mysql_connect('localhost','root',''); mysql_select_db('test'); $lignes=array(); $lignes=$_POST['ligne']; /* echo '<pre>'; print_r($_POST['ligne']); echo '</pre>'; */ foreach($_POST['ligne'] as $key=>$value){ echo '<pre>'; print_r($value); echo '</pre>'; $sql="UPDATE JR_tutorials SET DEVICES='".mysql_real_escape_string($value['DEVICES'])."', NAME='".mysql_real_escape_string($value['NAME'])."', LINK='".mysql_real_escape_string($value['LINK'])."', LANG='".mysql_real_escape_string($value['LANG'])."', RATE='".mysql_real_escape_string($value['RATE'])."' WHERE id_tu='$key' "; //$req = mysql_query($sql, $cnx) or die( mysql_error()); echo '<br />Requette ligne '.$key.' : '.$sql; } } ?> <form name="edit_existing_tutorials" action="" method="POST"> <table> <tr> <td>2</td> <td><input type="text" name="ligne[2][DEVICES]" value=""></td> <td><input type="text" name="ligne[2][NAME]" value=""></td> <td><input type="text" name="ligne[2][LINK]" value=""></td> <td><input type="text" name="ligne[2][LANG]" value=""></td> <td><input type="text" name="ligne[2][RATE]" value=""></td> </tr> <tr> <td>1</td> <td><input type="text" name="ligne[1][DEVICES]" value=""></td> <td><input type="text" name="ligne[1][NAME]" value=""></td> <td><input type="text" name="ligne[1][LINK]" value=""></td> <td><input type="text" name="ligne[1][LANG]" value=""></td> <td><input type="text" name="ligne[1][RATE]" value=""></td> </tr> </table><input type="submit" name="b1"value="Save"> </form> <pre></pre> </body> </html> -
Aucuns changement :(
-
eureka !!!!!
j'ai trouvé, c'est tout con, il ne faut pas de guillements dans name de l'input pour le nom de définition de l'index
name="ligne['.$id_tu.'][DEVICES]"
while ($data = mysql_fetch_array($req)) { $id_tu=$data['id_tu']; echo '<tr><td><input type="text" name="ligne['.$id_tu.'][DEVICES]" class="input_text_2" value="'.$data['DEVICES'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][\'NAME\']" class="input_text_2" value="'.$data[NAME].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][LINK]" class="input_text_2" value="'.$data[LINK].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][LANG]" class="input_text_2" value="'.$data[LANG].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][RATE]" class="input_text_2" value="'.$data[RATE].'"></td></tr>'; } -
Aucun changement pour les mysql_real_escape_string.
C'est vraiment dommage qu'on ne puisse pas résoudre cette énigme, ce script est indispensable a mon interface admin et je n'ai pas vu d'autre alternative :(
Je pense que la méthode utilisée pour la récupération des donnée dans la requête update n'est pas la bonne, il faudrai récupérer les valeurs des array, et c'est possible vu qu'elle s'affiche après qu'on est cliqué sur submit !!! :/ -
effectivement y a un truc qui m'échappe.
Et si tu supprime les mysql_real_escape_string et laisse seulement $value['....'] -
Les données sont reçu, mais elle ne sont pas envoyée dans la BDD
Array
(
[2] => Array
(
['DEVICES'] => aa
['NAME'] => aaaaaaaaaaaaaaaa
['LINK'] => aaaaaaaaaa
['LANG'] => aaaaaaaaaa
['RATE'] => aaaaaaaaa
)
[1] => Array
(
['DEVICES'] => aaaaaaaaaa
['NAME'] => aaaaaaaaa
['LINK'] => aaaaaaaa
['LANG'] => aaaaaaaaa
['RATE'] => aaaaaaaa
)
)
Voyez par vous même : http://cluster1.easy-hebergement.net/ -
fais un print_r du POST pour voir ce que tu reçoit:
echo '<pre>';
print_r($_POST['ligne']);
echo </pre>'; -
Ah oui bien vu :p On y est presque, la les input ressemble a sa avec cette modification, par exemble pour le champ NAME de la l'ID 2
<input type="text" name="ligne['2']['NAME']" class="input_text_2" value="www.url_du_tuto.com">
Et la requete sql pour cette même ligne ressemble a sa : 'UPDATE JR_tutorials SET DEVICES='', NAME='', LINK='', LANG='', RATE='' WHERE id_tu=2 '
Donc du coup quand je clique sur submit, il m'exécute la requête en remplaçant toute les donnée par un vide (LINK='') puisqu'aucune valeur n'arrive a être placé dans la requête mise a part l'id. -
oups j'ai fait une grosse erreur!
mets comme ça:
while ($data = mysql_fetch_array($req)) { $id_tu=$data['id_tu']; echo '<tr><td><input type="text" name="ligne['.$id_tu.'][\'DEVICES\']" class="input_text_2" value="'.$data['DEVICES'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][\'NAME\']" class="input_text_2" value="'.$data['NAME'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][\'LINK\']" class="input_text_2" value="'.$data['LINK'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][\'LANG\']" class="input_text_2" value="'.$data['LANG'].'"></td>'; echo '<td><input type="text" name="ligne['.$id_tu.'][\'RATE\']" class="input_text_2" value="'.$data['RATE'].'"></td></tr>'; } -
Merci de votre aide a tout les deux ;D
J'ai parcouru vos idée et celle de Alain_42 me semble plus adaptée a mon faible niveau en php ^^
Bref, j'ai optimisé sa à ma table et sa me donne ceci :
<form name="edit_existing_tutorials" action="" method="POST"> <table><tr><td>> Edit Tutorials</td> <td><input type="submit" name="b1" class="input_btn_2" value="Save Existing Tutorials"></td> </tr></table> <div id="editable"> <table style="padding-left: 4px;padding-top:2px;"> <?php $req = mysql_query("SELECT * FROM JR_tutorials WHERE id_jb=$id ORDER BY id_tu DESC"); while ($data = mysql_fetch_array($req)) { echo '<tr><td><input type="text" name="ligne[\'id_tu\'][\'DEVICES\']" class="input_text_2" maxlength="11" style="color:#FF00FF;width: 50px;" value="'.$data['DEVICES'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'NAME\']" class="input_text_2" value="'.$data['NAME'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'LINK\']" class="input_text_2" style="width: 342px;" value="'.$data['LINK'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'LANG\']" class="input_text_2" style="width: 30px;" maxlength="2" value="'.$data['LANG'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'RATE\']" class="input_text_2" style="width: 30px;" maxlength="3" value="'.$data['RATE'].'"></td></tr>'; } mysql_free_result ($req); ?> </table> </div> </form> <?php if(isset($_POST['b1'])){ $lignes=$_POST['ligne']; foreach($lignes as $key=>$value){ $sql="UPDATE JR_tutorials SET DEVICES='".mysql_real_escape_string($value['DEVICES'])."', NAME='".mysql_real_escape_string($value['NAME'])."', LINK='".mysql_real_escape_string($value['LINK'])."', LANG='".mysql_real_escape_string($value['LANG'])."', RATE='".mysql_real_escape_string($value['RATE'])."' WHERE id_tu=$key"; $req = mysql_query($sql, $cnx) or die( mysql_error()); } if($req) {echo'requete executée';}else{echo'requete non executée';} } ?>
EDIT : Bon finalement la requete s'exécute mais pas correctement parceque quand je clique sur mon bouton, il m'affiche "requete exécutée" mais je n'observe aucune modifications sur mes lignes !
J'ai créer une erreur et j'ai vu que le php me lisais la requete sans remplacer "$value['DEVICES']", $value['NAME']... par leur vrai valeur.
En gros la requête s'exécute comme sa : 'UPDATE JR_tutorials SET DEVICES='', NAME='', LINK='', LANG='', '...ect
Cette erreur provient aussi des input, dont les name ne retourne aucune valeur particulière : <input type="text" name="ligne['ID_TU']['NAME']" class="input_text_2" value="www.url_du_tuto.com">
Dommage sa m'avais l'air d'être la bonne solution... -
une solution:
<!-- <form> pourquoi deux balise form ? --> <form name="edit_existing_tutorials" action="edit_tutorials.php" method="POST"> <table> <?php $req = mysql_query("SELECT * FROM JR_tutorials WHERE id_jb=$id ORDER BY id_tu DESC"); //il faut obligatoirement un name= aux input on va les mettre pour qu'ils renvoient un array a deux dimentions ligne[id_tu][type_data] while ($data = mysql_fetch_array($req)) { echo '<tr><td><input type="text" name="ligne[\'id_tu\'][\'DEVICES\']" class="input_text_2" value="'.$data['DEVICES'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'NAME\']" class="input_text_2" value="'.$data['NAME'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'LINK\']" class="input_text_2" value="'.$data['LINK'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'LANG\']" class="input_text_2" value="'.$data['LANG'].'"></td>'; echo '<td><input type="text" name="ligne[\'id_tu\'][\'RATE\']" class="input_text_2" value="'.$data['RATE'].'"></td></tr>'; } mysql_free_result ($req); ?> </table> <input type="submit" name="b1" id="input_btn" value="submit"> </form> <?php if(isset($_POST['b1'])){ //le bouton submit a été cliqué //recup de l'array contenant les valeurs des input $lignes=$_POST['ligne']; //tu fais ta connexion a la base ... puis //on le parcours fait les UPDATE foreach($lignes as $key=>$value){ $req="UPDATE ta_table SET(DEVICES='".mysql_real_escape_string($value['DEVICES']."',NAME='".mysql_real_escape_string($value['NAME'], etc... ) WHERE id_tu='".$key."' "; etc.... } } ?> si tu a vraiement beaucoup de lignes, on peut mémoriser , comparer et faire les UPDATE uniquement si différent
- 1
- 2
Suivant