Probeleme avec requete update(php)

titou123 Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   -
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>";




A voir également:

7 réponses

Profil bloqué
 
C'est normal, tout ce qui est variable doit être sorti des guillemets et concaténé avec le reste.
0
titou123 Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai essayé mais ça n'as pas marché .svp pouvez vous réécrire la requête correctement.
0
Groquik
 
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
Profil bloqué
 
J'ai pas trop lu, mais ça a une bonne tête !

Dis nous si ça marche !
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
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
Profil bloqué
 
C'est pareil hormis que tu conserves les caractères spéciaux non ?
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
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
Profil bloqué
 
Ah ok !! Merci bien !

Le problème n'était jamais survenu, mais j'y penserai au cas où !!
0
mpmp93 Messages postés 6648 Date d'inscription   Statut Membre Dernière intervention   1 340
 
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
Profil bloqué
 
Merci de cette réponse ! Je n'y aurai probablement pas pensé si j'avais rencontré le problème !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Profil bloqué
 
Alors du coup ça marche ?

Résolu ?
0
chankouti
 
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
Profil bloqué
 
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
chankouti
 
oui PDO serait beaucoup mieux mais bon je me suis plus concentrer sur la solution que sur l'optimisation.
0
Profil bloqué
 
okok, l'important, c'est que ce soit résolu.. c'est le cas ?
0
titou123 Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
merci beaucoup pour votre aide :)
0
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
N'oublie pas de modifier le statut comme tel (en haut)
0