Problème ajout en php

salut, je suis entrain de concevoir une application en php/mysql , mon prob c'est que quand je veux insérer un nouvel enregistrement dans la base, un message s'affiche comme quoi "L'insertion a ete correctement effectuée", quand je reviens à ma base de donnée, je trouve une nouvelle ligne insérée mais vide. voila mon script:

<?php
$con=mysql_connect("localhost","root","");
mysql_select_db("new_base",$con);

$ISBN=isset($_POST['IS']);
$CODEED=isset($_GET['CE']);
$NOMLIV=isset($_POST['NL']);
$AUTEUR=isset($_POST['AUT']);
$NUMSERIE=isset($_POST['NS']);
$NB_EXEMPLAIRE=isset($_POST['NE']);
$MOCLE=isset($_POST['motcle']);

$sql = "INSERT INTO livre VALUES ('$ISBN','$CODEED','$NOMLIV','$AUTEUR','$NUMSERIE','$NB_EXEMPLAIRE','$MOCLE')";
$requete = mysql_query($sql, $con) or die( mysql_error() ) ;
if($sql)
{
echo("L'insertion a ete correctement effectuee") ;
}
else
{
echo("L'insertion à echouee") ;
}

?>

25 réponses

Résumé de la discussion

Le fil expose un problème d'insertion en PHP/MySQL: après validation, un message indique l'insertion réussie alors qu'une ligne vide est ajoutée dans la table livre. Les causes évoquées incluent l'usage de isset pour récupérer les valeurs ($_POST et $_GET) qui renvoie des booléens, et non les valeurs elles-mêmes, ce qui conduit à des champs vides. Les solutions proposées portent sur: remplacer les assignations par $ISBN = $_POST['IS']; et aligner les noms des champs, éviter les isset superflus, et assurer une validation préalable des valeurs avant l'insertion. D'autres conseils soulignent que des colonnes en clé primaire ne doivent pas accepter les valeurs vides et qu'il faut vérifier les éventuels duplicatas et regrouper les formulaires pour éviter les incohérences.

Bobot (l’IA à votre service)
  1. Le problème viens de :
    $ISBN=isset($_POST['IS']); 
    à mon avis.
    issset revoie un booléen (0 ou 1, false ou true ) et pas un nombre la syntaxe correcte serait juste
    $ISBN=$_POST['IS'];

    Tu peux mettre une conditions avec
    if($ISBN=isset($_POST['IS']))
    si tu veux traiter le cas où
    $_POST['IS']
    n'est pas initialisé
    1
    1. effectivement c'est bizarre mais cela devrait se voir dans la base de donnée non ?
      0
    2. Non, pas vraiment ta base de données considère ça comme un 1, je suppose qu'il existe quelque chose avec un ISDN de 1, par exemple si ta variable $_POST['IS'] existe.
      0
  2. pour ce qui est de la requete SQL en elle meme, elle me parait correcte, par contre fait un peu de débogage :

    affiche le contenu de tes variables sur la page, pour etre sur qu'il y a bien des valeur dans ton Post.
    si les vairable sont vides, cela peut expliquer la ligne vide dans la base.

    ensuite je ne comprend pas le test :
    if($sql)

    $sql c'est ta chaine de caractere de la requete, donc if($sql) sera toujours vrai, tu ne voulais pas plutot mettre "if($requete) "
    0
    1. oé exact mais sa marche tjrs pas

      <?php
      $con=mysql_connect("localhost","root","");
      mysql_select_db("new_base",$con);

      $ISBN=isset($_POST['IS']);
      $CODEED=isset($_GET['CE']);
      $NOMLIV=isset($_POST['NL']);
      $AUTEUR=isset($_POST['AUT']);
      $NUMSERIE=isset($_POST['NS']);
      $NB_EXEMPLAIRE=isset($_POST['NE']);
      $MOCLE=isset($_POST['motcle']);

      $sql = "INSERT INTO livre VALUES ('$ISBN','$CODEED','$NOMLIV','$AUTEUR','$NUMSERIE','$NB_EXEMPLAIRE','$MOCLE')";
      $requete = mysql_query($sql, $con) or die( mysql_error() ) ;
      if($requete)
      {
      echo("L'insertion a ete correctement effectuee") ;
      }
      else
      {
      echo("L'insertion à echouee") ;
      }?>
      apres l'insertion de la ligne vide , qd je veux réinserer un autre enregistrement avec un autre identifiant un msg s'affiche comme koi Duplicata du champ '' pour la clef 'PRIMARY' or que moi je n'ai pas inserer 2 clé similaire
      0
      1. Essaye de faire des réponse, pas des commentaires à ta question, on va se perdre sinon... :)

        donne le schéma de ta table. tu as une colonne clé primaire, et tu essaye d'insérer une ligne avec la meme clé.
        0
        1. non c pas ça , qd j'insere un nouvel enregistrement , une ligne vide se rajoute ds ma base apres si j insere un autre enregistrment avec une nouvelle clé qui ne figue pas deja dans la base, un message s'affiche comme quoi la clé est dupliquée. donc j'ai un probleme qd j'isere ( sa me donne une ligne vide) et qd je réinsere (duplicata)
          0
          1. bon...
            ton duplicata vient du fait qu'une de tes valeur est vide, mais pas vraiment, c'est la valeur chaine vide : ''

            c'est une valeur valide pour le moteur de base de donnée, et donc a la 2eme insersion, tu as une erreur de duplicata car tu ne peux pas insérer 2 fois '' dans une colone en clé primaire.

            donc, voila mon deal... tu postes sur ce forum ce que je t'ai demandé dès le début :
            le contenu de tes variables POST, car clairement il y a un problème là. Et je continue à t'aider.

            Sinon, si tu veux continuer à discuter et tourner autour du pot, ce sera sans moi.
            0
        2. ben qd j'enleve le isset il affiche comme erreur "indeclared index" ds ttes les lignes où g declaré les variables sans mettre isset et qd je mets isset l'erreur ne s'affiche plus et une ligne vide s'insère, je sais que isset ne devrait pas etre utilisé comme je le fais moi mais c'est ma solution pour que le message d'erreur ne s'affiche pas!!
          0
          1. isset n'y est pour rien

            tes POST et Get ne récupère aucune valeur , isset te les transforme en booleen, donc 0 a priori et du coup ta requete marche, si tu les enleves, comme ton index ne vaut rien, ta requete plante, essayes deja de recuperer tes valeurs (tu test en faisant echo de tes POST
            0
          2. Si tu as des erreurs de type indeclared index c'est que certain des champs de ton formulaire n'ont pas été remplis ou que tu as confondu $_GET et $_POST (oui je l'ai déjà vu). Donc a regarder de ce coté. Si des champs PEUVENT être nuls tu peut faire un truc du genre :
            if(isset($_POST['XXXXX']))
            {
                 $XXXX=$_POST['XXXXX'];
            }
            else
            {
                $XXXX=""; // ou $XXXX=0; selon les cas
            }

            De plus ce n'est pas une solution ce que tu utilise vu que ce que entre dans ton formulaire n'ira JAMAIS dans ta base de données, les isset ne renvoyant que des booléen je l'ai déjà dit.

            Montre nous ce que contiens ta variable $_POST, avec un
            print_r($_POST);
            placé au début de ton code par exemple.
            0
        3. je fais comme ça echo "$ISB"; apres le post ?
          0
          1. poste ton formulaire , l'erreur est certainement dedans
            0
            1. <?php
              $con=mysql_connect("localhost","root","");
              mysql_select_db("new_base",$con);

              $ISB=isset($_POST['IS']);
              $CODEE=isset($_GET['CE']);
              $NOMLI=isset($_POST['NL']);
              $AUTEU=isset($_POST['AUT']);
              $NUMSERI=isset($_POST['NS']);
              $NB_EXEMPLAIR=isset($_POST['NE']);
              $MOCL=isset($_POST['motcle']);

              $sql = "INSERT INTO livre VALUES ('$ISB','$CODEE','$NOMLI','$AUTEU','$NUMSERI','$NB_EXEMPLAIR','$MOCL')";
              $requete = mysql_query($sql, $con) or die( mysql_error() ) ;
              if($requete)
              {
              echo("L'insertion a ete correctement effectuee") ;
              }
              else
              {
              echo("L'insertion à echouee") ;
              }
              include"disconnect.php";
              ?>
              0
              1. non, pas çà, le formulaire, tes $_POST viennent bien d'un formulaire ?
                0
                1. <p align="center" class="Style39">Ajout Livre </p>
                  <p> </p>
                  <p> </p>
                  <form>
                  <table width="209" height="468" border="0" align="center" cellspacing="20">
                  <tr>
                  <td width="49"><div align="center"><span class="Style45">ISBN</span> </div></td>
                  <td width="144"><label>
                  <input type="text" name="IS" />
                  </label></td>
                  </tr>
                  <tr>
                  <td><p align="center" class="Style45">Code Edition</p></td>
                  <td><label></label>
                  <select name="CODEED">

                  <option>SLECTIONNER LE CODE D EDITION</option>
                  <?php

                  include "connect.php";

                  $req_edit=mysql_query("SELECT DISTINCT CODEED FROM edition");

                  while ($data_edit=mysql_fetch_array($req_edit)){
                  $CODEED=$data_edit['CODEED'];

                  echo "<optgroup label=\"$CODEED\">";

                  echo "<option value=\"$CODEED\">$CODEED</option>";
                  echo "</optgroup>";
                  }
                  include "disconnect.php";
                  ?>
                  </select>
                  </td>
                  </tr>
                  <tr>
                  <td><div align="center"><span class="Style45">Nom </span></div></td>
                  <td><label>
                  <input type="text" name="NL" />
                  </label></td>
                  </tr>
                  <tr>
                  <td class="Style41"><div align="center" class="Style45">Auteur</div></td>
                  <td><label>
                  <input type="text" name="AUT" />
                  </label></td>
                  </tr>
                  <tr>
                  <td class="Style41"><div align="center" class="Style45">Numéro Série </div></td>
                  <td><div align="center">
                  <label>
                  <input type="text" name="NS" />
                  </label>
                  </div></td>
                  </tr>
                  <tr>
                  <td><div align="center"><span class="Style45">Nombre Exemplaire</span> </div></td>
                  <td><label>
                  <input type="text" name="NE" />
                  </label></td>
                  </tr>
                  <tr>
                  <td class="Style45"><div align="center">Mot Clé </div></td>
                  <td><input type="text" name="motcle" /></td>
                  </tr>
                  </table>
                  </form>
                  <p>  </p>
                  <p>
                  <label></label>
                  </p>
                  <p align="center" class="Style2"> </p>
                  <form method="post" action="LivreListe.php">
                  <input type="submit" name="Submit" value="Confirmer" class="Style28"/>
                  </form>
                  0
                  1. Ouais en effet, ça venait de là
                    Le formulaire que tu envoyais ne contenais rien.

                    Donc regroupe tes deux formulaire en un seul (code ci-dessous) ET VIRE CES ISSET ils ne servent A RIEN comme tu les utilise ^^

                    <p align="center" class="Style39">Ajout Livre </p>   
                    <p> </p>   
                    <p> </p>   
                    <form method="post" action="LivreListe.php">   
                    <table width="209" height="468" border="0" align="center" cellspacing="20">   
                    <tr>   
                    <td width="49"><div align="center"><span class="Style45">ISBN</span> </div></td>   
                    <td width="144"><label>   
                    <input type="text" name="IS" />   
                    </label></td>   
                    </tr>   
                    <tr>   
                    <td><p align="center" class="Style45">Code Edition</p></td>   
                    <td><label></label>   
                    <select name="CODEED">   
                    
                    <option>SELECTIONNEZ LE CODE D EDITION</option>   
                    <?php   
                    
                    include "connect.php";   
                    
                    $req_edit=mysql_query("SELECT DISTINCT CODEED FROM edition");   
                    
                    while ($data_edit=mysql_fetch_array($req_edit)){   
                    $CODEED=$data_edit['CODEED'];   
                    
                    echo "<optgroup label=\"$CODEED\">";   
                    
                    echo "<option value=\"$CODEED\">$CODEED</option>";   
                    echo "</optgroup>";   
                    }   
                    include "disconnect.php";   
                    ?>   
                    </select>   
                    </td>   
                    </tr>   
                    <tr>   
                    <td><div align="center"><span class="Style45">Nom </span></div></td>   
                    <td><label>   
                    <input type="text" name="NL" />   
                    </label></td>   
                    </tr>   
                    <tr>   
                    <td class="Style41"><div align="center" class="Style45">Auteur</div></td>   
                    <td><label>   
                    <input type="text" name="AUT" />   
                    </label></td>   
                    </tr>   
                    <tr>   
                    <td class="Style41"><div align="center" class="Style45">Numéro Série </div></td>   
                    <td><div align="center">   
                    <label>   
                    <input type="text" name="NS" />   
                    </label>   
                    </div></td>   
                    </tr>   
                    <tr>   
                    <td><div align="center"><span class="Style45">Nombre Exemplaire</span> </div></td>   
                    <td><label>   
                    <input type="text" name="NE" />   
                    </label></td>   
                    </tr>   
                    <tr>   
                    <td class="Style45"><div align="center">Mot Clé </div></td>   
                    <td><input type="text" name="motcle" /></td>   
                    </tr>   
                    </table>   
                    
                    <p>  </p>   
                    <p>   
                    <label></label>   
                    </p>   
                    <p align="center" class="Style2"> </p>   
                    
                    <input type="submit" name="Submit" value="Confirmer" class="Style28"/>   
                    </form>
                    0
                    1. mnt quand je click sur le boutton modifier rien ne se passe, la page livreliste ne s'affiche pas
                      0
                      1. Remet le code du formulaire modifié que je regardes ça.
                        0
                    2. boutton confirmer plutot :) :

                      <?php
                      $con=mysql_connect("localhost","root","");
                      mysql_select_db("new_base",$con);

                      $ISB=$_POST['IS'];
                      $CODEE=$_GET['CE'];
                      $NOMLI=$_POST['NL'];
                      $AUTEU=$_POST['AUT'];
                      $NUMSERI=$_POST['NS'];
                      $NB_EXEMPLAIR=$_POST['NE'];
                      $MOCL=isset($_POST['motcle']);

                      $sql = "INSERT INTO livre VALUES ('$ISB','$CODEE','$NOMLI','$AUTEU','$NUMSERI','$NB_EXEMPLAIR','$MOCL')";
                      $requete = mysql_query($sql, $con) or die( mysql_error() ) ;
                      if($requete)
                      {
                      echo("L'insertion a ete correctement effectuee") ;
                      }
                      else
                      {
                      echo("L'insertion à echouee") ;
                      }
                      include"disconnect.php";
                      ?>

                      j'a un formulaire ajout livre c'est ce que je viens de t'envoyer tte à l'heure et un autre liste livre où s'affiche une liste qui importe les données de la base avec un lieu dessus "ajouter livre" qd je Click dessus normalement sa doit ajouter le nouvel enregistrement que j'ai passé ds le formulaire " ajout livre "
                      0
                      1. renvoie le formulaire .... cette page là, çà fais 3 fois que tu la postes mais l'erreur, c'est sur l'autre page
                        0
                    3. voici le fomrulaire "ajouter livre"

                      <p align="center" class="Style39">Ajout Livre </p>
                      <p> </p>
                      <p> </p>
                      <form method="post" action="LivreListe.php">
                      <table width="209" height="468" border="0" align="center" cellspacing="20">
                      <tr>
                      <td width="49"><div align="center"><span class="Style45">ISBN</span> </div></td>
                      <td width="144"><label>
                      <input type="text" name="IS" />
                      </label></td>
                      </tr>
                      <tr>
                      <td><p align="center" class="Style45">Code Edition</p></td>
                      <td><label></label>
                      <select name="CODEED">

                      <option>SLECTIONNER LE CODE D EDITION</option>

                      <?php

                      include "connect.php";

                      $req_edit=mysql_query("SELECT DISTINCT CODEED FROM edition");

                      while ($data_edit=mysql_fetch_array($req_edit)){
                      $CODEED=$data_edit['CODEED'];

                      echo "<optgroup label=\"$CODEED\">";

                      echo "<option value=\"$CODEED\">$CODEED</option>";
                      echo "</optgroup>";
                      }
                      include "disconnect.php";
                      ?>
                      </select>
                      </td>
                      </tr>
                      <tr>
                      <td><div align="center"><span class="Style45">Nom </span></div></td>
                      <td><label>
                      <input type="text" name="NL" />
                      </label></td>
                      </tr>
                      <tr>
                      <td class="Style41"><div align="center" class="Style45">Auteur</div></td>
                      <td><label>
                      <input type="text" name="AUT" />
                      </label></td>
                      </tr>
                      <tr>
                      <td class="Style41"><div align="center" class="Style45">Numéro Série </div></td>
                      <td><div align="center">
                      <label>
                      <input type="text" name="NS" />
                      </label>
                      </div></td>
                      </tr>
                      <tr>
                      <td><div align="center"><span class="Style45">Nombre Exemplaire</span> </div></td>
                      <td><label>
                      <input type="text" name="NE" />
                      </label></td>
                      </tr>
                      <tr>
                      <td class="Style45"><div align="center">Mot Clé </div></td>
                      <td><input type="text" name="motcle" /></td>
                      </tr>
                      </table>
                      </form>
                      <p>  </p>
                      <p>
                      <label></label>
                      </p>
                      <p align="center" class="Style2"> </p>

                      <input type="submit" name="Submit" value="Confirmer" class="Style28"/>
                      </form>
                      <div align="center">

                      voici le formulaire liste livre
                      <?php
                      include "connect.php";

                      echo "<h3>Liste des Livres</h3>";
                      $sql = "SELECT * FROM Livre";
                      $resultat = mysql_query($sql);
                      echo "[<a href=livreAjoutExec.php>Ajouter un Livre</a>]";
                      echo "<table border=1 width=75%>";
                      echo "<tr><td bgcolor=11FF11>IS</td><td bgcolor=11FF11>CE</td><td bgcolor=11FF11>NL</td><td bgcolor=11FF11>AUT</td><td bgcolor=11FF11>NS</td><td bgcolor=11FF11>NE</td><td bgcolor=11FF11>motcle</td><td bgcolor=11FF11>Modification</td><td bgcolor=11FF11>Suppression</td></tr>";
                      while ($row = mysql_fetch_array($resultat)) {
                      echo "<tr>";
                      echo "<td>".$row[0]."</td><td>".$row[1]."</td><td>".$row[2]."</td><td>".$row[3]."</td<td>".$row[4]."</td><td>".$row[5]."</td><td>".$row[6]."</td>";

                      echo "<td><a href=livreModif.php?ref=$row[0] color=#000000> modifier</a></td><td><a href=livreSupp.php?ref=$row[0] color=#000000>supprimer</a></td>";
                      echo "</tr>";
                      }
                      echo "</table>";

                      include "disconnect.php";
                      ?>
                      0
                      1. Un </form> en trop, j'en était sur.
                        Vire le </form> que j'ai mis en gras.
                        <?php

                        include "connect.php";

                        $req_edit=mysql_query("SELECT DISTINCT CODEED FROM edition");

                        while ($data_edit=mysql_fetch_array($req_edit)){
                        $CODEED=$data_edit['CODEED'];

                        echo "<optgroup label=\"$CODEED\">";

                        echo "<option value=\"$CODEED\">$CODEED</option>";
                        echo "</optgroup>";
                        }
                        include "disconnect.php";
                        ?>
                        </select>
                        </td>
                        </tr>
                        <tr>
                        <td><div align="center"><span class="Style45">Nom </span></div></td>
                        <td><label>
                        <input type="text" name="NL" />
                        </label></td>
                        </tr>
                        <tr>
                        <td class="Style41"><div align="center" class="Style45">Auteur</div></td>
                        <td><label>
                        <input type="text" name="AUT" />
                        </label></td>
                        </tr>
                        <tr>
                        <td class="Style41"><div align="center" class="Style45">Numéro Série </div></td>
                        <td><div align="center">
                        <label>
                        <input type="text" name="NS" />
                        </label>
                        </div></td>
                        </tr>
                        <tr>
                        <td><div align="center"><span class="Style45">Nombre Exemplaire</span> </div></td>
                        <td><label>
                        <input type="text" name="NE" />
                        </label></td>
                        </tr>
                        <tr>
                        <td class="Style45"><div align="center">Mot Clé </div></td>
                        <td><input type="text" name="motcle" /></td>
                        </tr>
                        </table>
                        </form>
                        <p> </p>
                        <p>
                        <label></label>
                        </p>
                        <p align="center" class="Style2"> </p>

                        <input type="submit" name="Submit" value="Confirmer" class="Style28"/>
                        </form>
                        <div align="center">
                        0
                        1. c 'est quoi le probleme ? !
                          0
                          1. c'est que tu fermes ton formulaire avant le bouton confirmer, forcemment il ne peut pas marcher
                            0
                        2. TU AS RAISON, mnt qd je click sur confirmer le formulaire liste livre s'affiche et qd je clik sur le lien ajouter livre voila les message d'erreurs

                          Notice: Undefined index: IS in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 6

                          Notice: Undefined index: CE in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 7

                          Notice: Undefined index: NL in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 8

                          Notice: Undefined index: AUT in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 9

                          Notice: Undefined index: NS in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 10

                          Notice: Undefined index: NE in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 11

                          Notice: Undefined variable: sql in C:\Program Files\EasyPHP-5.3.2\www\livreAjoutExec.php on line 17
                          Query est vide

                          suite à ce script

                          <?php
                          $con=mysql_connect("localhost","root","");
                          mysql_select_db("new_base",$con);

                          $ISB=$_POST['IS'];
                          $CODEE=$_GET['CE'];
                          $NOMLI=$_POST['NL'];
                          $AUTEU=$_POST['AUT'];
                          $NUMSERI=$_POST['NS'];
                          $NB_EXEMPLAIR=$_POST['NE'];
                          $MOCL=isset($_POST['motcle']);

                          $sql = "INSERT INTO livre VALUES ('$ISB','$CODEE','$NOMLI','$AUTEU','$NUMSERI','$NB_EXEMPLAIR','$MOCL')";
                          $requete = mysql_query($sql, $con) or die( mysql_error() ) ;
                          if($requete)
                          {
                          echo("L'insertion a ete correctement effectuee") ;
                          }
                          else
                          {
                          echo("L'insertion à echouee") ;
                          }
                          include"disconnect.php";
                          ?>

                          et qd je mets $ISB=isset($_POST['IS']);
                          les message d'erreurs ne s'affcihent plus mais une ligne vide s'ajoute ds la base de donnée
                          0
                          1. encore une fois, ton isset ne sert a rien comme tu t'en sert, c'est lui qui provoque ta ligne vide ....
                            maintenant il peut te servir a faire des tests, pour chacune de tes valeurs, tu peux mettre

                            if(isset($_POST['champ'])){
                                 $champ = $_POST['champ']
                            }
                            0
                        3. Normal, les variables dans $_POST n'existe que sur la page LivreListe.php après elle sont perdues. Donc tu ne peut pas les récupérer sur livreAjoutExec.php.
                          0
                          • 1
                          • 2