[php/mysql] Mise a jour d'une table

Résolu
Bonjour

voila j'ai une table Classe avec 3 champs Id, Nom, Nb

il y a 22 enregistrements

je dois pouvoir affiché sur la meme feuille les 22 enregistrements sous la forme Nom NB

avec le Nb qui s'affiche dans une zone de saisie

une fois les nouveaux nb saisie en cliquant sur un bouton je lance une feuille miseajour.php qui dois me mettre a jour la feuille complete c a dire qu'elle dois faire le tour des 22 valeurs affichés et mettre a jour la table

probleme j'arrive a afficher mes enregistrements mais je n'arrive pas a envoyer le tout vers la feuille miseajour pour effectué les mises a jour

17 réponses

  1. Contributeur
    alors voila le code de la page qui affiche les infos de la table

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" media="screen" href="style.css">
    <title>Document sans titre</title>
    </head>
    <body>
    <?php
    
    if(isset($_POST['fiche']))      $fiche=$_POST['fiche'];
    
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '');
    
    // on seléctionne la base
    mysql_select_db('lyceebai',$db);
    
    $rq="SELECT * FROM Classe";
    $res=mysql_query($rq)or die('Erreur SQL !<br>'.$rq.'<br>'.mysql_error());
    
    print '<form method="POST" action="miseajourbase.php">';
    
    while($row = mysql_fetch_array($res))
        {
    $Id=$row['Id'];
    $Lieu=$row['Nom'];
    $Nb=$row['Nb'];
    
    print"<label>$Lieu</label>";
    print "<input name='Identifiant' type='hidden' value=$Id>";
    print "<input type='text' name='nb' size='1' value='$Nb'></input>";
    echo "<br />";
     }
    echo "<br />";
    print '<div align="center"><INPUT TYPE="SUBMIT" NAME="envoie" VALUE="Confirmer la validation du traitement"></div>';
    print '</form>';
    
    mysql_close();
    ?>
    </body>
    </html>
    


    voici le code de la feuille de mise a jour

    <?php
    
    
    if(isset($_POST['nb']))      $Nb=$_POST['nb'];
    else      $Nb="";
    
    echo $fiche;
    echo $Nb;
    
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '');
    
    // on seléctionne la base
    mysql_select_db('lyceebai',$db);
    
    // on crée la requete SQL
    
    for($i=1; $i<22;$i++){
    $sql = "UPDATE Classe SET Nb = '$Nb' WHERE Id = '$i'";
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    }
    ?>
    
    


    on m'a dis que dans le passage de la feuille fiche vers la feuille mise a jour je n'avais que 1 seul Nb pris en compte mais je n'arrive pas a m'en sortir
    1. bonjour.s'il vous plait je veux un script php permettant d'afficher un enregistrement de la base puis le supprimer et un autre script en php permettant d'afficher un enregistrement puis le modifier.
      merci d'avance
      1. Contributeur
        génial merci wiwimagique et aussi un grand merci a Zep3k!GnO

        juste une derniere chose Zep3k!GnO tu aurais des sites qui expliquent justement ce genre de code soit pour le php ou MySQL
        1. $sql = "UPDATE Classe SET Nb = '".$_POST['nb'.$i]."' WHERE Id = '$i'";
          echo "<br/>".$sql;

          1. et mon
            $var='nb'.$i;
            $sql = "UPDATE Classe SET Nb = '".
            $_POST['$var']."' WHERE Id = '$i'";
            
            ??? c'est pas pareil ? ? ?
            Pourquoi ça marche avec le tien et non avec cette synthaxe ? ? ? c'est à cause des ' ? ? de mon '$var' ? j'aurais du mettre juste $var ? ?

            Bref tant mieux si ca fonctionne pour toi antic...
            Pour ce qui est des sites, non pas du tout, a part le site MySQL... :D
            Bonne fin de journée ;P
          2. @Zep3k!GnOIl aurait fallu faire
            if(isset($_POST['nb']))      $Nb=$_POST['nb'];
            else      $Nb="";

            pour chaque $nb.

            Le $$var est une très bonne astuce mais $nbX n'étaient pas initialisées :P
        2. Contributeur
          en affichant la requete j'obtient ca

          UPDATE Classe SET Nb = '' WHERE Id = '1'
          UPDATE Classe SET Nb = '' WHERE Id = '2'
          UPDATE Classe SET Nb = '' WHERE Id = '3'
          UPDATE Classe SET Nb = '' WHERE Id = '4'
          UPDATE Classe SET Nb = '' WHERE Id = '5'
          UPDATE Classe SET Nb = '' WHERE Id = '6'
          UPDATE Classe SET Nb = '' WHERE Id = '7'
          UPDATE Classe SET Nb = '' WHERE Id = '8'
          UPDATE Classe SET Nb = '' WHERE Id = '9'
          UPDATE Classe SET Nb = '' WHERE Id = '10'
          UPDATE Classe SET Nb = '' WHERE Id = '11'
          UPDATE Classe SET Nb = '' WHERE Id = '12'
          UPDATE Classe SET Nb = '' WHERE Id = '13'
          UPDATE Classe SET Nb = '' WHERE Id = '14'
          UPDATE Classe SET Nb = '' WHERE Id = '15'
          UPDATE Classe SET Nb = '' WHERE Id = '16'
          UPDATE Classe SET Nb = '' WHERE Id = '17'
          UPDATE Classe SET Nb = '' WHERE Id = '18'
          UPDATE Classe SET Nb = '' WHERE Id = '19'
          UPDATE Classe SET Nb = '' WHERE Id = '20'
          UPDATE Classe SET Nb = '' WHERE Id = '21'
          1. Normal, ici je pense que ca coince.... il faut mettre
            print "<input type='text' name='nb".$cpt."' size='1' value='$Nb'></input>";
            


            Sur ta page d'affichage, vérifie bien que la source, c'est
            <input type='text' name='nb1'  size='1' value='taValeur'></input>
            <input type='text' name='nb2'  size='1' value='taValeur'></input>
            ...
            <input type='text' name='nb22'  size='1' value='taValeur'></input>
            


            et puis dans ta page de mise à jour je te conseil d'afficher tes requetes histoire de pouvoir contrôler...
            ->
            $sql = "UPDATE Classe SET Nb = '".${$ZeVar}."' WHERE Id = '$i'";
            echo "<br/>".$sql;
            


            Et puis la ca devrait le faire...

            P.S: sinon pour bien comprendre ce que je t'ai fait faire avec les variables dynamiques, lit le lien que je t'ai mis plus haut et fait tourner le p'tit code que j'ai join...
            1. Contributeur
              le résultat est le meme

              je te renvoie le code des 2 pages on ne sait jamais quelque fois que je me dsoit tromper

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
              <html>
              <head>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
              <link rel="stylesheet" type="text/css" media="screen" href="style.css">
              <title>Document sans titre</title>
              </head>
              <body>
              <?php
              
              if(isset($_POST['fiche']))      $fiche=$_POST['fiche'];
              
              // on se connecte à MySQL
              $db = mysql_connect('localhost', 'root', '');
              
              // on seléctionne la base
              mysql_select_db('lyceebai',$db);
              
              $rq="SELECT * FROM Classe";
              $res=mysql_query($rq)or die('Erreur SQL !<br>'.$rq.'<br>'.mysql_error());
              
              print '<form method="POST" action="miseajourbase.php">';
              
              $cpt=0;
              while($row = mysql_fetch_array($res))
              {
              $cpt++;
              $Id=$row['Id'];
              $Lieu=$row['Nom'];
              $Nb=$row['Nb'];
              print"<label>$Lieu</label>";
              print "<input name='Identifiant' type='hidden' value=$Id>";
              print "<input type='text' name='nb'".$cpt." size='1' value='$Nb'></input>";
              
              echo "<br />";
               }
              echo "<br />";
              print '<div align="center"><INPUT TYPE="SUBMIT" NAME="envoie" VALUE="Confirmer la validation du traitement"></div>';
              print '</form>';
              
              mysql_close();
              ?>
              </body>
              </html>
              


              la page mise a jour

              <?php
              
              
              if(isset($_POST['nb']))      $Nb=$_POST['nb'];
              else      $Nb="";
              
              
              echo $Nb[15];
              
              // on se connecte à MySQL
              $db = mysql_connect('localhost', 'root', '');
              
              // on seléctionne la base
              mysql_select_db('lyceebai',$db);
              
              // on crée la requete SQL
              
              for($i=1; $i<22;$i++){
              
              
              $ZeVar='nb'.$i;
              $sql = "UPDATE Classe SET Nb = '".${$ZeVar}."' WHERE Id = '$i'";
              
              
              $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
              }
              ?>
              
              
              1. oki donc ca veut dire que mon truc ne fonctionne pas... :(
                Ca y j'ai retrouvé comment faire , faur utiliser des variables dynamiques...
                http://www.lephpfacile.com/cours/index.php?p=27
                $ZeVar='nb'.$i;
                $sql = "UPDATE Classe SET Nb = '".
                ${$ZeVar}."' WHERE Id = '$i'";
                

                Attention, il faut que le premier s'appelle nb0, puis ensuite nb1,nb2..nb22 bref tu vois le truc, lma c'est testé ca devrait etre OP.
                voici un pt'it exemple que j'ai fait pour que tu captes biens les variables dynamiques...

                
                <?php
                $b0=2;
                $b1=3;
                $b2=0;
                
                for($i=0;$i<3;$i++)
                {
                	$re='b'.$i;
                	echo"b:".${$re};
                }
                ?>
                


                Voilà :D
                1. Contributeur
                  désolé d'etre chiant mais cette fois ci, si je modifie les valeurs et que je met a jour quand je reviens sur la 1ere feuille toutes les valeurs sont a 0
                  1. okai je vois ou j'me suis pané :P
                    $var='nb'.$i;
                    $sql = "UPDATE Classe SET Nb = '".
                    $_POST['$var']."' WHERE Id = '$i'";
                    

                    Chui pa sur à 100 % mais j'pense que ca devrait passer...
                    1. Contributeur
                      le probleme est pas d'additionner mais de mettre a jour

                      sur la feuille si je prend le 1ere enregistrement ca valeur est de 10

                      je decide de changer la valeur est de mettre 20

                      dans ma table 10 doit etre remplacer par 20 lors de la mise a jour

                      ce qui implique que si après la mise a jour je recharge la 1ere page pour le 1ere enregistrement dois apparaitre la valeur 20

                      voila
                      1. en fait ce que je fais c'est que je concatène les 2 valeur -> donc 20 1 -> 201
                        si tu veux 21 au lei de faire $a$b (avec $a = 20 et $ b =1)
                        tu fais $a+$b et poOf...
                        Bref je te répond en speed car il faut que j'aille choper mon train ,revoit un peu ton truc et si ca ne marche toujours pas demain ,j'essaierai d'y jeter un cou d'oeil entre 2 trucs que je fais o taff....
                        bonne soirée. :P
                        1. Contributeur
                          ok merci c vrai j'ai un peu de mal quand il s'agit de melanger des choses j'ai pas trop l'habitude

                          par contre j'ai testé et ca ne marche tjs pas

                          dans ma table pour le champ nb je n'est mis que des 10

                          sur la page 1 j'obtient bien les noms avec la valeur 10

                          pour 2 enregistrements j'ai changer 10 par 20 et j'ai fais la mise a jour

                          si je recharge a nouveau la 1ere page j'obtient une modification de tout les champs sous la forme

                          201
                          202
                          203
                          204
                          205
                          206
                          207
                          208
                          .....

                          et ce jusqu'a

                          2021

                          merci encore a toi de me repondre
                          1. enfin, bon la dans l'esprit t'aurais pu la voir la faute de synthaxe dans la chaine :P
                            $sql = "UPDATE Classe SET Nb = '$nb".$i."' WHERE Id = '$i'";
                            

                            OU
                            $sql = "UPDATE Classe SET Nb = '$nb$i' WHERE Id = '$i'";
                            

                            C'est pareil, c'est comme tu le sens...
                            Voilà, c'est bon la ? !
                            1. Contributeur
                              re

                              alors lors de la mise a jour j'ai ce message d'erreur

                              Erreur SQL !
                              UPDATE Classe SET Nb = '0'1 WHERE Id = '1'
                              You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '1 WHERE Id = '1'' at line 1

                              voici le code de la page mise a jour

                              <?php
                              
                              if(isset($_POST['nb']))      $Nb=$_POST['nb'];
                              else      $Nb="";
                              
                              // on se connecte à MySQL
                              $db = mysql_connect('sql3', 'lyceebai', 'p8ybx63r');
                              
                              // on seléctionne la base
                              mysql_select_db('lyceebai',$db);
                              
                              // on crée la requete SQL
                              
                              for($i=1; $i<22;$i++){
                              $sql = "UPDATE Classe SET Nb = '$nb'".$i." WHERE Id = '$i'";
                              
                              $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
                              }
                              ?>
                              
                              1. on m'a dis que dans le passage de la feuille fiche vers la feuille mise a jour je n'avais que 1 seul Nb pris en compte mais je n'arrive pas a m'en sortir
                                Oui c'ets tout à fait ça ,tu n'as qu'un seul Nb, c'est normal, regarde ça dans ta boucle :
                                print "<input type='text' name='nb' size='1' value='$Nb'></input>";
                                

                                Si par exemple t'as la combionaison id - nb suivante
                                id : 1 nb : 3
                                id : 2 nb : 4
                                id : 3 nb : 0

                                et que tu boucles la dessus tu arau avec ce que t'a écris :
                                <input type='text' name='nb' size='1' value='3'></input>
                                <input type='text' name='nb' size='1' value='4'></input>
                                <input type='text' name='nb' size='1' value='0'></input>
                                


                                Et la tu vois bien que tes 3 input ont le même nom ! Donc :
                                pour l'affichage des infos de ta table :
                                
                                $cpt=0;
                                while($row = mysql_fetch_array($res)){
                                $cpt++;
                                ....
                                print "<input type='text' name='nb'".$cpt." size='1' value='$Nb'></input>";
                                


                                Affichera
                                <input type='text' name='nb1' size='1' value='3'></input>
                                <input type='text' name='nb2' size='1' value='4'></input>
                                <input type='text' name='nb3' size='1' value='0'></input>
                                


                                et
                                pour la mise à jour :
                                $sql = "UPDATE Classe SET Nb = '$nb'".$i." WHERE Id = '$i'";
                                

                                et la je pense que ça devrait être bon... tu vois le délire ?!

                                Ah et puis faits attention dans la mise à jour t'écrivais $Nb pour récupérer ton champs de texte alor que son nom est 'nb' et sa valeur est fixé via Nb dans l'autre page.... a ne pas confondre.
                                Voilà , Bonne journée :)