Probeleme avec requete update(php)

Bonjour tout le monde j'ai un probleme avec la requete update dans php et je ne sais pas pour quoi la modification ne s'effectue pas dans ma base.voila mon code :

//connexion à la base
include("config.php");
mysql_connect($host,$user,$pwd);
mysql_select_db($bd);
//insertion dans la table article
$id=$_GET['x'];
echo "id=".$id;
$codeA=$_POST['zCodeA'];
$libA=$_POST['zLibA'];
$puA=$_POST['zPrixA'];
$cat=$_POST['zCodeCat'];
echo $codeA;
$requete="UPDATE articles SET codeA=$codeA,libA=$libA,puA=$puA,codeCat=$cat WHERE codeA=$id";
mysql_query($req);

echo "modifcation effectuee avec succees";
echo "<a href='article.php'>retour</a>";

7 réponses

  1. C'est normal, tout ce qui est variable doit être sorti des guillemets et concaténé avec le reste.
    0
    1. j'ai essayé mais ça n'as pas marché .svp pouvez vous réécrire la requête correctement.
      0
      1. Bonjour,

        Pour reprendre le conseil de Varaldi Q, cela donnerait je pense:

        $requete="UPDATE articles SET codeA=".$codeA.",libA=".$libA.",puA=".$puA.",codeCat=".$cat." WHERE codeA=".$id;
        0
        1. J'ai pas trop lu, mais ça a une bonne tête !

          Dis nous si ça marche !
          0
        2. Euh... oui mais non.
          Suffit de faire:
          echo $requete;
          pour voir qu'on se retrouve avec le même résultat.
          Voici ce que je propose:
          $requete='UPDATE articles SET codeA="'.mysql_real_escape_string($codeA).'", libA="'.mysql_real_escape_string($libA).'", puA="'.mysql_real_escape_string($puA).'", codeCat="'.mysql_real_escape_string($cat).'" WHERE codeA="'.mysql_real_escape_string($id).'";

          Je me suis permis au passage de rajouter la fonction mysql_real_escape_string()
          Voir cette page: https://www.php.net/manual/fr/function.mysql-real-escape-string.php
          0
        3. C'est pareil hormis que tu conserves les caractères spéciaux non ?
          0
        4. Le message de mpmp93 explique la différence entre tout exemple et le miens.
          Tu peux comparer les deux exemple assez facilement.
          Prends une requête simple.
          $sql='SELECT * FROM table WHERE champ="'.$var.'"';

          Tu peux très bien l'écrire à ta manière:
          $sql="SELECT * FROM table WHERE champ=".$var;

          Donne simplement une valeur à la variable $var.
          $var='exemple';

          Et fait un echo sur la variable $sql.
          $var='exemple';
          $sql="SELECT * FROM table WHERE champ=".$var;
          echo $sql;

          Maintenant, modifie la valeur de la variable:
          $var='un exemple de code';

          Compare les deux requêtes (ce qui est affiché avec echo).
          L'ajout d'apostrophe et/ou de guillemet (voire mon exemple ou celui de mpmp93) permet d'avoir des valeurs qui contiennent des espaces.
          En fait, ça change tout.

          L'utilisation de la fonction mysql_real_escape_string() n'a rien à voir. Elle permet de protéger les requêtes SQL.
          0
        5. Ah ok !! Merci bien !

          Le problème n'était jamais survenu, mais j'y penserai au cas où !!
          0
      2. Bonjour,

        Simple, dans:
        UPDATE articles SET codeA=$codeA,libA=$libA,puA=$puA,codeCat=$cat WHERE codeA=$id"

        si je prends libA=$libA où $libA contient "NOIRMOUTIER" il y a des chances que ça passe:*

        libA=NOIRMOUTIER

        par contre, si $libA contient "NOISY LE GRAND", ça casse:

        libA=NOISY LE GRAND

        Toute chaîne affectée à un champ doit être encadrée de guillemets:

        libA='NOISY LE GRAND'

        Donc:
        UPDATE articles SET codeA=$codeA,libA='$libA',puA='$puA', codeCat='$cat' WHERE codeA=$id"

        Si vous mettez des valeurs numériques entre guillemets, ça passera également:

        UPDATE articles SET codeA='$codeA', libA='$libA', puA='$puA', codeCat='$cat' WHERE codeA='$id'"

        A+
        0
        1. Merci de cette réponse ! Je n'y aurai probablement pas pensé si j'avais rencontré le problème !
          0
      3. Alors du coup ça marche ?

        Résolu ?
        0
        1. Moi a ta place je commencerais par tester s'il y a bien une connexion donc

          if (mysql_connect($host,$user,$pwd)){  
             if (mysql_select_db($bd)){  
               
                 //......le reste du code  
             }  
             else {echo 'impossible de trouver la table';}  
          }  
          else { echo 'impossible de se connecter a la BDD';}


          ensuite, si pas de problème de connexion ajouter les apostrophes comme a dis mpmp93

          "UPDATE articles SET codeA='$codeA', libA='$libA', puA='$puA', codeCat='$cat' WHERE codeA='$id'"


          si toujours rien faut vérifier si les nom des champs de la bdd sont identiques a ceux écrits dans la requête, attention a la casse (majuscule et minuscule).
          0
          1. PS tu devrais favoriser une connection via pdo (je sais pas si c'est le cas ou non, je dis ça au cas où)
            0
          2. oui PDO serait beaucoup mieux mais bon je me suis plus concentrer sur la solution que sur l'optimisation.
            0
          3. okok, l'important, c'est que ce soit résolu.. c'est le cas ?
            0
        2. merci beaucoup pour votre aide :)
          0
          1. N'oublie pas de modifier le statut comme tel (en haut)
            0