Qu'est-ce qui ne va pas dans la syntaxe de cet UPDATE ?

WRInaute passionné
Bonjour,

Je ne sais pas à l'avance quel champ je dois updater.
Donc je fais ça :
Code:
 $update="
  UPDATE  
  `annuaire` 
  SET 
  '".$paysAncien."'='".$paysAncien."'+1 ";
  mysql_query($update);

Ca n'update pas. Donc ça vient des variables dans le set.

Quelle est la bonne syntaxe, s'il vous plait ?
 
WRInaute impliqué
peut-être parce que tu ne spécifies pas quel annuaire doit être updaté..

Code:
$update=" 
  UPDATE  
  `annuaire` 
  SET 
  '".$paysAncien."'='".$paysAncien."'+1 " where id_annuaire = 'id annuaire' ";
  mysql_query($update);
 
WRInaute discret
Bonsoir, quel est le message d'erreur ?

Tu n'as pas de clause WHERE à appliquer ?

Il ne faut pas de quote simple autour du nom du champ à incrémenter dans la requête SQL :

Code:
$update="
  UPDATE 
  `annuaire`
  SET
  ".$paysAncien."=".$paysAncien."+1 ";
  mysql_query($update);
 
WRInaute passionné
Non alors, ça ne doit pas bon comme syntaxe, parce que j'ai tout vérifié, j'ai affiché $paysAncien et j'ai rajouté le WHERE que j'avais omis et ça ne fonctionne pas.

Etes vous certains que l'on peut utiliser des variables comme ça dans une requête SQL ?
 
WRInaute occasionnel
$paysancien doit être le nom d'un champ de la table :
update nom_table set champ = champ + 1

=> en php :

$sql = "update nom_table set $champ = $champ + 1";
 
WRInaute passionné
Je ne comprend pas ta réponse Didier_S.
$paysAncien est en effet le nom du champs à updater. Tu me suggères quoi ? D'enlever les ' ".." ' ?


Voilà le dernier code testé, au complet :

Code:
  if($specialiteAancienne==0)
  {$update="
  UPDATE  
  `categorieAnnuaire` 
  SET 
  '".$paysAncien."'='".$paysAncien."'+1 
  WHERE rang='".$sA."'";
  mysql_query($update); 

//on vérifie si l'instruction est bien effectuée et si les données sont correctes :
  echo' '.$paysAncien.' -'.$sA.' ;
  }

Donc là, le test en bas est effectué et les données sont correctes. Mais la requête n'update pas.
 
WRInaute occasionnel
ok, la variable $paysancien contient bien le nom du champ, essayes
Code:
$update="
  UPDATE 
  `categorieAnnuaire`
  SET
  `".$paysAncien."`=`".$paysAncien."`+1
  WHERE rang='".$sA."'";
  mysql_query($update);
note que dans ce cas, ta requete est entourée de double-quotes, donc tu peux écrire plus simplement :
Code:
$update="
  UPDATE 
  `categorieAnnuaire`
  SET
  `$paysAncien`=`$paysAncien`+1
  WHERE rang='$sA'";
  mysql_query($update);
avant ton mysql_query, fais
Code:
echo $update;
(pour voir si ta requete est bien formée, et
Code:
echo mysql_error();
(après mysql_query) pour voir si l'exécution de la requete a retourné des erreurs.
 
WRInaute passionné
Ok, ça fonctionne, j'ai donc fait comme ça :
Code:
SET 
`".$paysAncien."`='".$paysAncien."'+1


Merci beaucoup Didier_S :D
 
WRInaute passionné
Non en fait ça ne fonctionne pas. Je viens de me rendre compte du bug :

Ca n'incrémente ou ne décrémente pas le compteur.

Ca update et ça marque 1.

Si il y avait 3, ça ne marque pas 4, mais 1.

Quand je veux décrémenter, si j'avais 3 ça ne marque pas 2 mais -1.
 
WRInaute discret
En mettant des guillemets sur $paysAncien (du coté droit) tu rend une valeur qui n'est pas numérique, à laquelle tu ajoutes ou retires 1.
Essaies en les enlevant, ou en mettant des ` à la place si ça ne marche pas
 
WRInaute passionné
Sans quoi, exactement ?

J'ai essayé ça aussi : `".($paysAncien+1)."`mais ça ne fonctionne pas non plus, ça n'update plus rien.
 
WRInaute occasionnel
Tu peux me noter l'état actuel de ta requête et je te la corrige dessuite et sinon teste avec le +1 mais en mettant des espaces.
 
WRInaute passionné
La dernière en date, c'est celle-ci :

Code:
  if($specialiteAancienne==0)
  {$update="
  UPDATE  
  `categorieAnnuaire` 
  SET 
  `".$paysAncien."`=`".($paysAncien+1)."`
  WHERE rang='".$sA."'";
  mysql_query($update); 
  }

Donc là, ça n'update plus rien du tout. Le but étant comme j'ai dit que ça incrémente de 1 le compteur, or au mieux, pour l'instant, ça a affiché 1 quel que soit le chiffre précédent... :?

**edit**
des espaces où ça ?
 
WRInaute occasionnel
Je la ferais comme ça :

Code:
if($specialiteAancienne==0) 
{
   $update=mysql_query(" UPDATE categorieAnnuaire SET paysAncien='".($paysAncien + 1)."' WHERE rang='".$sA."'"; 
}

Je crois que l'erreur viens de `".$paysAncien."`=`".($paysAncien+1)."` à mon avis ton champ en base doit d'appeler paysAncien et non s'appeler la valeur de $paysAncien

Sinon les ` ne servent à rien ou presque, pour les valeurs à donner utilise des '
 
WRInaute passionné
Non c'est pas possible ça, Silef, parce que j'ai 4 champs et je ne sais pas à l'avance lequel je dois updater.

Donc j'ai besoin de la variable à gauche du SET.

D'ailleurs de ce côté ça fonctionne. C'est du côté droit que ça ne fonctionne pas.
 
WRInaute occasionnel
Le truc c'est que si tu n'as pas d'erreur mysql et que ça update un peu tout et n'importe quoi : c'est ta requête qui n'est pas bonne et non sa structure.

Perso c'est cette histoire de
Code:
SET ".$mavariable."='".$mavariable + 1."'
qui me plait pas du tout.
 
WRInaute passionné
Bah je comprend bien, mais bon le problème concerne le coté droit, pas le gauche. C'est le bon champ qui est updaté, mais pas de la bonne valeur.
 
WRInaute accro
Je suis comme silef, y'a un truc illogique dans ton ordre d'UPDATE.

Si ta variable $mavariable est égale à 2 par exemple ca fait un truc du genre :

Code:
SET 2='2+1'

je vois difficilement dans quel cas un ordre pareil peut être utilisé perso 8O
 
WRInaute passionné
Si mes variables étaient correctement interprêtée, ma requête ne signifierait rien d'autre que :

Code:
Set Belgique = Belgique + 1

ça n'a rien d'extraordinaire, qu'est ce qui vous choque.
 
WRInaute discret
Meeuuuhhh a dit:
Sans quoi, exactement ?

J'ai essayé ça aussi : `".($paysAncien+1)."`mais ça ne fonctionne pas non plus, ça n'update plus rien.

ça
Code:
mysql_query("UPDATE categorieAnnuaire SET $paysAncien = $paysAncien + 1 WHERE rang = '$sA' ");
 
WRInaute occasionnel
Je m'incruste :)
Si $paysAncien est le nom du champ (de la colonne dans ta table quoi), comment peux-tu y ajouter 1 ???
Dans l'insctruction MySQL, tu dois avoir qqch comme :
Code:
... SET colonne1 = valeur1, colonne2=valeur2, ...
 
WRInaute accro
xdeslandes a dit:
Je m'incruste :)
Si $paysAncien est le nom du champ (de la colonne dans ta table quoi), comment peux-tu y ajouter 1 ???
Dans l'insctruction MySQL, tu dois avoir qqch comme :
Code:
... SET colonne1 = valeur1, colonne2=valeur2, ...

Je pensais pareil mais en fait tu peux (apparemment) utiliser cette syntaxe :


Code:
SET monchamp = monchamp + 1

Ce dont je n'étais pas sûr, n'ayant jamais eu l'occasion de le faire.
 
WRInaute passionné
Ca fonctionne comme ça !

Code:
  if($specialiteAancienne==0)
  {$update="
  UPDATE 
  `categorieAnnuaire`
  SET
  $paysAncien=$paysAncien+1
  WHERE rang='".$sA."'";
  mysql_query($update);
  }

Donc ni quote, ni point ni guillemets autour des variables.
 
WRInaute discret
petit rappel :

les ` servent à délimiter les noms de tables et champs, ce qui permet de les "protèger" on peut alors utiliser le nom de champ `FROM` ou `WHERE` et sont facultatifs, si tant est qu'on utilise pas FROM WHERE ou autre nom de commande dans ces noms

les ' (simples quotes) servent à délimiter les valeurs littérales des champs comme dans cet exemple :

Code:
$q="UPDATE `matable` SET `monchamp`='la valeur de mon champ' WHERE `id`='le champ que je veux'"

les ` et ' ne sont là que pour signifier à MySQL que les caractères qu'ils délimitent sont des valeurs, ou des noms de champs ou tables.

en php, lorsqu'une chaine est délimité par " (double quotes), les variables qu'elle contient sont remplacées par leur valeur :
Code:
$nom = "Bond";
echo "Mon nom est $nom, James $nom";
//affichera :
//Mon nom est Bond, James Bond

donc, logiquement, ces codes ci dessous sont tous équivalents et fonctionneront tous dans ton cas :
Code:
$update="UPDATE `categorieAnnuaire` SET $paysAncien=$paysAncien+1 WHERE rang='".$sA."'";

Code:
$update="UPDATE categorieAnnuaire SET $paysAncien=$paysAncien+1 WHERE rang='$sA'";
ou encore
Code:
$update="UPDATE `categorieAnnuaire` SET `$paysAncien`=`$paysAncien`+1 WHERE `rang`='$sA'";
[/code]

tout ça c'est dans les docs...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut