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 :

<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

  • Votes
  • Date
  • Date décroissante
  1. 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 :)
    1. 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']
      1. 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 :)
        1. Si tu as beaucoup de lignes, on peut améliorer le système pour éviter l'update si pas de modif dans la ligne ?
          1. Sa fonctionne !!!!
            Magnifique *-*

            Merci beaucoup c'est parfait !
            1. 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>'; 
                
              }
              1. 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>
                1. 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>';
                  	
                  }
                  
                  
                  
                  1. 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 !!! :/
                    1. effectivement y a un truc qui m'échappe.

                      Et si tu supprime les mysql_real_escape_string et laisse seulement $value['....']
                      1. 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/
                        1. fais un print_r du POST pour voir ce que tu reçoit:

                          echo '<pre>';
                          print_r($_POST['ligne']);
                          echo </pre>';
                          1. 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.
                            1. 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>';
                              	
                              }
                              1. 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...
                                1. 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