Edition validée non valide

Résolu
Bonjour,

Voilà, j'ai ce bout de code qui me sert à récupérer les éléments d'une autre feuille et mettre à jour ma base de données.
Seulement voilà, il me renvois que l'édition a été exécutée mais n'édite pas :
<?php
if (isset($_POST["action"]) && $_POST["action"] == "send"){

mysql_query('SET NAMES UTF8');

$req = mysql_query("UPDATE tb_produits_fr SET Code='$Code', Designation='$Designation', Famille='$Famille', Marque='$Marque' WHERE NumId='$NumId';");
echo '<div class="Message">L\'enregistrement a été exécuté avec succès.</div><script type="text/javascript">window.setTimeout("location=(\'index.php\');",1000)</script>';
exit();}
?>

Et voici ma page editer.php
<form action="confirmation.php?NumId=<?php echo($NumId); ?>" method="post">
<input type="hidden" name="action" value="send" />...

15 réponses

  1. Merci à tous pour votre aide !
    J'ai compris et corrigé le problème.

    Dans mon select, il y a avait la dans la première
    <option selected="selected" disabled="disabled">

    Lorsque j'ai supprimé le
    disabled="disabled"
    tout a fonctionné a la perfection !

    Merci encore à tous !
    1
    1. slt et comment recupère tu ta variable $NumID ?
      0
      1. Voici mon code auparavant :
        <?php
        if (mysql_num_rows($r)==0) { header("location: index.php"); exit(); } $login = mysql_result($r,0,"Code");
        if (isset($_POST["action"]) && $_POST["action"] == "send"){

        if (empty($_GET["NumId"])) {header("location: index.php"); exit();}
        $idadmin = $_GET["NumId"];
        $r = mysql_query("SELECT * FROM tb_produits_fr WHERE NumId='$NumId';");

        $Code = $_POST["Code"];
        $Designation = $_POST["Designation"];
        $Famille = $_POST["Famille"];
        $Marque = $_POST["Marque"];

        $r = mysql_query("UPDATE tb_produits_fr SET
        Code='$Code',
        Designation='$Designation',
        Famille='$Famille',
        Marque='$Marque'
        WHERE NumId='$NumId';");
        echo '<div class="Message">L\'enregistrement a été exécuté avec succès.</div><script type="text/javascript">window.setTimeout("location=(\'index.php\');",1000)</script>';
        exit();}
        ?>

        Mais j'avais un problème sur
        if (empty($_GET["NumId"])) {header("location: index.php"); exit();}
        et même si je met une redirection en java, ca ne passe toujours pas.
        J'ai dû supprimer des lignes pour voir ce que cela donne et voilà :s
        0
        1. J'ai aussi essayé ceci mais ça ne passe toujours pas. Je ne comprends plus rien !
          <?php
          if(isset($_POST['Code'])) $Code = $_POST["Code"]; else $Code="";
          if(isset($_POST['Designation'])) $Designation = $_POST["Designation"]; else $Designation="";
          if(isset($_POST['Famille'])) $Famille = $_POST["Famille"]; else $Famille="";
          if(isset($_POST['Marque'])) $Marque = $_POST["Marque"]; else $Marque="";
          if(isset($_POST['Description'])) $Description = $_POST["Description"]; else $Description="";
          if(isset($_POST['ModeEmploi'])) $ModeEmploi = $_POST["ModeEmploi"]; else $ModeEmploi="";
          if(isset($_POST['Principe'])) $Principe = $_POST["Principe"]; else $Principe="";
          if(isset($_POST['Contenance'])) $Contenance = $_POST["Contenance"]; else $Contenance="";
          if(isset($_POST['Type'])) $Type = $_POST["Type"]; else $Type="";
          if(isset($_POST['TypeMode'])) $TypeMode = $_POST["TypeMode"]; else $TypeMode="";
          if(isset($_POST['Image'])) $Image = $_POST["Image"]; else $Image="";
          if(isset($_POST['Menu'])) $Menu = $_POST["Menu"]; else $Menu="";

          $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Erreur de connexion '.mysql_error());
          mysql_select_db(MYSQL_BASE,$db) or die('Erreur de selection '.mysql_error());

          mysql_query("SET NAMES 'utf8'");
          $sql = mysql_query("SELECT * FROM tb_produits_fr WHERE NumId='$NumId';");

          $sql = "UPDATE tb_produits_fr SET Code='$Code', Designation='$Designation', Famille='$Famille', Marque='$Marque', Description='$Description', Mode_Emploi='$ModeEmploi', Principe_actif='$Principe', Contenance='$Contenance', Type_Mode='$TypeMode', Image='$Image', Miniature='$Image.\"_mini\"', Menu='$Menu' WHERE NumId='$NumId'";

          mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

          echo "<div class='Message'>Enregistré !</div>";
          mysql_close(); ?>
          0
          1. Personne pour m'aider ?
            0
            1. Bonjour

              1 - ta ligne
              $sql = mysql_query("SELECT * FROM tb_produits_fr WHERE NumId='$NumId';");
              ne sert strictement à rien, tu ne tiens aucun compte du résultat.

              2 - As-tu essayé d'afficher ta requête avent de l'exécuter ? Il semble que ta variable $NimId ne soit pas initialisée comme te l'a fait remarquer cocksipus. Tu as écrit
              $idadmin = $_GET["NumId"];
              mais cela initialise $idadmin, pas $NumId
              0
              1. Merci le père. Je "pense" que c'est réglé...
                Mais je rencontre un problème :
                if(isset($_POST['Famille'])) $Famille = $_POST["Famille"]; else $Famille="";
                Est une liste déroulante.
                Il ne s'enregistre pas dans la table...
                0
                1. Quel est le code du formulaire, en ce qui concerne "Famille" (code du <SELECT><OPTION>) ? Ce n'est pas parce que c'est une liste déroulante que sa valeur ne doit pas d'enregistrer
                  0
                  1. Page editer.php
                    <?php $sqlFam = 'SELECT * FROM tb_produits_fr GROUP BY Famille'; $reqFam = mysql_query($sqlFam) or die('Erreur SQL !<br>'.$sqlFam.'<br>'.mysql_error()); ?>
                    <select name="Famille" id="Famille" style="width:100%">
                    <option selected="selected" disabled="disabled"><?php echo utf8_encode($datafr['Famille']); ?></option><option disabled="disabled">----------</option>
                    <?php while($dataFam = mysql_fetch_assoc($reqFam)){ echo "<option>".utf8_encode($dataFam['Famille'])."</option>"; } ?>
                    </select>

                    page confirmer.php
                    <?php
                    mysql_query("SET NAMES 'utf8'");
                    if(isset($_POST['Code'])) $Code = $_POST["Code"]; else $Code="";

                    if(isset($_POST['Famille'])) $Famille = $_POST["Famille"]; else $Famille="";

                    mysql_query("SET NAMES 'utf8'");
                    $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Erreur de connexion '.mysql_error());
                    mysql_select_db(MYSQL_BASE,$db) or die('Erreur de selection '.mysql_error());

                    $NumId = $_GET["NumId"];

                    mysql_query("SET NAMES 'utf8'");
                    $sql = 'UPDATE tb_produits_fr SET Code="$Code", Designation="$Designation", Famille="$Famille", Marque="$Marque", Description="$Description", Mode_Emploi="$ModeEmploi", Principe_Actif="$Principe", Contenance="$Contenance", Type_Mode="$TypeMode", Image="$Image", Miniature="$Image\"_mini\"", Menu="$Menu" WHERE NumId="$NumId"';

                    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

                    echo "<div class='Message'>Enregistré !</div><script type='text/javascript'>window.setTimeout('location=(\'index.php\');',100)</script>";
                    mysql_close(); ?>
                    0
                    1. Ton SELECT à l'air correct, mais on ne sait pas avec ce que tu montres s'il est bien à l'intérieur du Form
                      Pour être sûr, ajoute
                      print_r ($_POST);
                      au début de confirmer.php
                      0
                      1. il me renvois effectivement toutes les données.
                        Famille = A42 (par exemple)

                        Mais il n'enregistre pas dans ma base...
                        0
                        1. Avec cette requête là :
                          $sql = 'UPDATE tb_produits_fr SET Code="$Code", Designation="$Designation", Famille="$Famille", Marque="$Marque", Description="$Description", Mode_Emploi="$ModeEmploi", Principe_Actif="$Principe", Contenance="$Contenance", Type_Mode="$TypeMode", Image="$Image", Miniature="$Image\"_mini\"", Menu="$Menu" WHERE NumId="$NumId"';
                          Il ne doit rien t'enregistrer du tout, ni la famille ni le reste, tu as inversé les ' et les " (connais-tu leur différence en PHP ?)
                          Ta version du message #3 était meilleure.
                          0
                          1. Oula ! non sérieusement je n'arrives plus a comprendre ce qui se passe.
                            La
                            Marque
                            ,
                            Famille
                            ,
                            Type
                            ,
                            Type2
                            ,
                            TypeMode
                            ,
                            TypeMode2
                            et
                            Menu
                            sont des <select>

                            Avec ce code :
                            <?php
                            $NumId = $_GET["NumId"];
                            mysql_query("SET NAMES 'utf8'");

                            if(isset($_POST['Code'])) $Code = strtoupper($_POST["Code"]); else $Code="";
                            if(isset($_POST['Designation'])) $Designation = mysql_real_escape_string(htmlspecialchars($_POST["Designation"])); else $Designation="";
                            if(isset($_POST['Designation2'])) $Designation2 = mysql_real_escape_string(htmlspecialchars($_POST["Designation2"])); else $Designation2="";
                            if(isset($_POST['Famille'])) $Famille = $_POST["Famille"];else $Famille="";
                            if(isset($_POST['Marque'])) $Marque = $_POST["Marque"];else $Marque="";
                            if(isset($_POST['Description']))$Description = mysql_real_escape_string(htmlspecialchars($_POST["Description"])); else $Description="";
                            if(isset($_POST['Description2']))$Description2 = mysql_real_escape_string(htmlspecialchars($_POST["Description2"])); else $Description2="";
                            if(isset($_POST['ModeEmploi'])) $ModeEmploi = mysql_real_escape_string(htmlspecialchars($_POST["ModeEmploi"])); else $ModeEmploi="";
                            if(isset($_POST['ModeEmploi2'])) $ModeEmploi2 = mysql_real_escape_string(htmlspecialchars($_POST["ModeEmploi2"])); else $ModeEmploi2="";
                            if(isset($_POST['Principe'])) $Principe = mysql_real_escape_string(htmlspecialchars($_POST["Principe"])); else $Principe="";
                            if(isset($_POST['Principe2'])) $Principe2 = mysql_real_escape_string(htmlspecialchars($_POST["Principe2"])); else $Principe2="";
                            if(isset($_POST['Type'])) $Type = $_POST["Type"]; else $Type="";
                            if(isset($_POST['Type2'])) $Type2 = $_POST["Type2"]; else $Type2="";
                            if(isset($_POST['TypeMode'])) $TypeMode = htmlspecialchars($_POST["TypeMode"]);else $TypeMode="";
                            if(isset($_POST['TypeMode2'])) $TypeMode2 = htmlspecialchars($_POST["TypeMode2"]);else $TypeMode2="";
                            if(isset($_POST['Contenance'])) $Contenance = strtoupper(htmlspecialchars($_POST["Contenance"])); else $Contenance="";
                            if(isset($_POST['Image'])) $Image = strtoupper(htmlspecialchars($_POST["Image"])); else $Image="";
                            if(isset($_POST['Image'])) $Miniature = strtoupper(htmlspecialchars($_POST["Image"]))."_mini"; else $Miniature="";
                            if(isset($_POST['Menu'])) $Menu = $_POST["Menu"];else $Menu="";

                            mysql_query("SET NAMES 'utf8'");
                            $db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Erreur de connexion '.mysql_error());
                            mysql_select_db(MYSQL_BASE,$db) or die('Erreur de selection '.mysql_error());

                            mysql_query("SET NAMES 'utf8'");

                            $sql = "UPDATE tb_produits_fr SET Code='$Code', Designation='$Designation', Famille='$Famille', Marque='$Marque', Description='$Description', Mode_Emploi='$ModeEmploi', Principe_actif='$Principe', Contenance='$Contenance', Type_Mode='$TypeMode', Image='$Image', Miniature='$Miniature', Menu='$Menu' WHERE NumId='$NumId'";

                            $sql = "UPDATE tb_produits_en SET Code='$Code', Designation='$Designation2', Famille='$Famille', Marque='$Marque', Description='$Description2', Mode_Emploi='$ModeEmploi2', Principe_actif='$Principe2', Contenance='$Contenance', Type_Mode='$TypeMode2', Image='$Image', Miniature='$Miniature', Menu='$Menu' WHERE NumId='$NumId'";

                            mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());

                            echo "<div class='Message'>Enregistré !</div><script type='text/javascript'>window.setTimeout('location=(\'editer.php?NumId=1\');',1000)</script>";
                            mysql_close(); ?>
                            Je confirme l'envois de editer.php

                            Ce qui me paraît bizarre, c'est que les textbox s'enregistre, mais de tous les select, seul Menu s'enregistre... (donc le dernier de la liste)..
                            J'ai bien regardé les name="" et "normalement" tout est en ordre du côté de editer.php

                            Vous avez une idée ?
                            0
                            1. Ah ! j'ai compris d'où vient le problème...
                              Voici mon select :
                              <?php $sqlMen = 'SELECT * FROM tb_produits_fr GROUP BY Menu'; $reqMen = mysql_query($sqlMen) or die('Erreur SQL !<br>'.$sqlMen.'<br>'.mysql_error()); ?>
                              <select name="Menu" id="Menu" style="width:100%" onchange="MonSelect();">
                              <option selected="selected" disabled="disabled"><?php echo utf8_encode($datafr['Menu']); ?></option>
                              <option disabled="disabled">----------</option>
                              <?php while($dataMen = mysql_fetch_assoc($reqMen)){ echo "
                              <option value=".$dataMen['Menu'].">".$dataMen['Menu']."</option>
                              "; } ?>
                              </select>

                              Il récupère la valeur qui existe dans la table en ligne 1
                              Ensuite en ligne 2 il y a la séparation ----------
                              Et enfin en ligne 3 il y a la liste de tout le contenu du select (au choix)

                              Lorsque la ligne 1 (donc la valeur de la table) est sélectionné, il édite.
                              Lorsque la ligne 3+ est sélectionnée, il n'enregistre pas...

                              Donc il faut récupérer dans le
                              $_POST['Menu']
                              l'ID du select je pense...

                              Etant certain que c'est de là que vient le problème, je relance mon poste #6
                              Comment récupérer dans le $_POST l'ID du select ?
                              0
                              1. L'id est ignoré dans l'envoi des formulaires, c'est la propriété "name" qui est utilisée pour nommer les champs envoyés. Personne n'a jamais eu besoin de l'id à ce niveau-là.

                                Je t'ai déjà demandé de faire print_r($_POST) au début de confirmer.php. Peux-tu faire un copier-coller COMPLET de ce qu'affiche ce print_r ?
                                0