Probeleme avec requete update(php)

Fermé
titou123 Messages postés 70 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2011 - 5 juin 2011 à 14:18
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 - 7 juin 2011 à 21:22
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é
5 juin 2011 à 14:59
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 mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2011
5 juin 2011 à 16:30
j'ai essayé mais ça n'as pas marché .svp pouvez vous réécrire la requête correctement.
0
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é
5 juin 2011 à 21:22
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 jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
6 juin 2011 à 05:57
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é
6 juin 2011 à 09:32
C'est pareil hormis que tu conserves les caractères spéciaux non ?
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
6 juin 2011 à 13:58
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é
6 juin 2011 à 16:38
Ah ok !! Merci bien !

Le problème n'était jamais survenu, mais j'y penserai au cas où !!
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
6 juin 2011 à 09:30
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é
6 juin 2011 à 16:44
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é
6 juin 2011 à 16:45
Alors du coup ça marche ?

Résolu ?
0
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é
6 juin 2011 à 16:55
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
oui PDO serait beaucoup mieux mais bon je me suis plus concentrer sur la solution que sur l'optimisation.
0
Profil bloqué
6 juin 2011 à 17:10
okok, l'important, c'est que ce soit résolu.. c'est le cas ?
0
titou123 Messages postés 70 Date d'inscription mercredi 20 octobre 2010 Statut Membre Dernière intervention 21 octobre 2011
7 juin 2011 à 21:05
merci beaucoup pour votre aide :)
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
7 juin 2011 à 21:22
N'oublie pas de modifier le statut comme tel (en haut)
0