requête Update renvoyant une erreur

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requête Update renvoyant une erreur

Re: requête Update renvoyant une erreur

par Ryle » 18 mars 2012, 23:53

Heureusement que les éditeurs proposent une fonction Rechercher/Remplacer ;)

Sinon tu peux quand même utiliser les ` même si ce n'est pas la meilleure pratique...

Re: requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 21:15

effectivement... wow ca m'énerve car j'ai déjà tout noté comme cela dans plus d'une 20 aine de pages et ce a plusieurs endroits ^^ enfin merci pour le tuyaux.

Re: requête Update renvoyant une erreur

par Ryle » 18 mars 2012, 20:07

Comme le message d'erreur te l'indique, le problème est au niveau de ton champ e-mail.

En effet, le "-" est un opérateur pour mysql et ne devrait pas être utiliser dans un nom de champ ou de table (en l'occurrence il tente de faire "e" moins "mail", et ça marche pas top :)). Alors tu peux bien sur utiliser les ` de mysql pour protéger le nom du champ et lui dire que c'est bien `e-mail`, mais je t'encourage quand même vivement a éviter cette syntaxe (qu'aucun autre SGBD ne connait) et à changer le nom de ta colonne (email, mail ou courriel fonctionneront tout aussi bien :))

Re: requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 19:58

j'ai essayé avec cela
<?php
$sql = 'UPDATE  user SET  qualite = "'.mysql_real_escape_string($_POST['qualite']).'", nom="'.mysql_real_escape_string($_POST['nom']).'" , prenom ="'.mysql_real_escape_string($_POST['prenom']).'" , date_naissance ="'.mysql_real_escape_string($_POST['date_naissance']).'" , lieue_naissance  ="'.mysql_real_escape_string($_POST['lieue_naissance']).'" , profession  ="'.mysql_real_escape_string($_POST['profession']).'" , adresse  ="'.mysql_real_escape_string($_POST['adresse']).'" , adresse2  ="'.mysql_real_escape_string($_POST['adresse2']).'" , ville  ="'.mysql_real_escape_string($_POST['ville']).'" , code_postal  ="'.mysql_real_escape_string($_POST['code_postal']).'" , pays  ="'.mysql_real_escape_string($_POST['pays']).'" , tel  ="'.mysql_real_escape_string($_POST['tel']).'" , fax  ="'.mysql_real_escape_string($_POST['fax']).'" , e-mail  ="'.mysql_real_escape_string($_POST['e-mail']).'" , nature  ="'.mysql_real_escape_string($_POST['nature']).'" , etat  ="'.mysql_real_escape_string($_POST['etat']).'"  WHERE  n_doss="'.mysql_real_escape_string($_POST['n_doss']).'"' ;
                    


mysql_query($sql) or die(__LINE__.mysql_error().$sql);

echo "données insérées avec succès";
?>
mais j'ai toujours une erreur sous jacente:

Code : Tout sélectionner

223You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-mail ="[email protected]" , nature ="facture impayée" , etat ="All" WHERE ' at line 1UPDATE user SET qualite = "Débiteur principal", nom="Doe" , prenom ="John" , date_naissance ="01-01-1970" , lieue_naissance ="" , profession ="" , adresse ="22 Accacia Avenue" , adresse2 ="" , ville ="Paris 2" , code_postal ="75002" , pays ="" , tel ="0123456789" , fax ="0607080910" , e-mail ="[email protected]" , nature ="facture impayée" , etat ="All" WHERE n_doss="110015666223"

Re: requête Update renvoyant une erreur

par Ryle » 18 mars 2012, 19:26

Pars de la requête que tu veux obtenir, ce sera beaucoup plus simple :)
UPDATE creance SET qualite='principal', nom='Boulanger', prenom='Marc André', date_naissance='25-11-1973', ... WHERE  n_doss = 33
Et ensuite il te suffit de procéder par étape :
$sql = "UPDATE creance SET qualite='principal', nom='Boulanger', prenom='Marc André', date_naissance='25-11-1973', ... WHERE  n_doss = 33";

$sql = "UPDATE creance SET qualite='" . 'principal' . "', nom='" . 'Boulanger' . "', prenom='" . 'Marc André' . "', date_naissance='" . '25-11-1973' . "', ... WHERE  n_doss = " . 33;

$sql = "UPDATE creance SET qualite='" . $_POST['qualite'] . "', nom='" . $_POST['nom'] . "', prenom='" .$_POST['prenom'] . "', date_naissance='" . $_POST['date_naissance'] . "', ... WHERE  n_doss = " . $_POST['n_doss'];
et si tu protéger ta requête (au cas où un p'tit malin tente d'exploiter ta requête en passant des paramètres malveillante) :
$sql = "UPDATE creance SET 
  qualite='" . mysql_real_escape_string($_POST['qualite']) . "'
  , nom='" . mysql_real_escape_string($_POST['nom']) . "'
  , prenom='" . mysql_real_escape_string($_POST['prenom']) . "'
  , date_naissance='" . mysql_real_escape_string($_POST['date_naissance']) . "'
  , ... 
  WHERE  n_doss = " . $_POST['n_doss'];

Re: requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 19:07

j'ai essayé en mettant des antislash mais il me renvoi l'erreur sous-jacente:
Parse error: syntax error, unexpected '/', expecting T_STRING or T_VARIABLE or T_NUM_STRING in

Re: requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 18:26

c'est a causes des simples quotes dans les $_POST['post'] je ne sais pas comment procéder.

Re: requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 18:12

mais avec toutes les concaténations je ne sais pas comment procéder. tu pourrais me donner un exemple stp?

Re: requête Update renvoyant une erreur

par xTG » 18 mars 2012, 18:06

Une chaîne de caractère en SQL doit être entouré de quotes simples. ;)
Hors là on voit bien que Boulanger ou Marc André ne sont pas à l'intérieur de quote.

Re: requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 18:04

effectivement pour le premier j'ai bêtement oublié les quotes ^^ j'ai un peu remanié le code voici
<?php 
$sql = 'SELECT * FROM creance where n_doss='.$_POST['n_doss'].'';
$result = mysql_query($sql) or die(__LINE__.mysql_error().$sql); 
?>
                  <?php
      $user = mysql_fetch_assoc($result)
      
        ?><?php if ($_POST['qualite']==$user['qualite']) { ?><?php
$sql = "UPDATE  creance SET  qualite =".$_POST['qualite'].", nom=".$_POST['nom'].", prenom =".$_POST['prenom'].", date_naissance =".$_POST['date_naissance'].", lieue_naissance  =".$_POST['lieue_naissance'].", profession  =".$_POST['profession'].", adresse  =".$_POST['adresse'].", adresse2  =".$_POST['adresse2'].", ville  =".$_POST['ville'].", code_postal  =".$_POST['code_postal'].", pays  =".$_POST['pays'].", tel  =".$_POST['tel'].", fax  =".$_POST['fax'].", e-mail  =".$_POST['e-mail'].", nature  =".$_POST['nature'].", etat  =".$_POST['etat']." WHERE  n_doss=".$_POST['n_doss']."";
                    
/*on lance la commande (mysql_query) et au cas où, 
on rédige un petit message d'erreur si la requête ne passe pas (or die) 
(Message qui intègrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
echo "données insérées avec succès";
?><?php } ?>
pour l'erreur mysql renvoyée

Code : Tout sélectionner

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'principal, nom=Boulanger, prenom =Marc André, date_naissance =25-11-1973, lieue' at line 1
mais je ne vois pas a cette ligne ce qui est susceptible de ne pas fonctionner.

Re: requête Update renvoyant une erreur

par Ryle » 18 mars 2012, 17:55

Il y a deux choses qui ne vont pas dans ton script...

La première, le warning :
- $_POST[qualite] fait appel à la valeur du tableau dont l'index est égal à la valeur de la constante "qualite". Mais comme php ne trouve pas de constante "qualite", il va supposer que c'est une erreur du développeur et va voir s'il trouve le tableau dont l'index est la chaine "qualite". Et puisqu'il prend une initiative personnelle, il t'en informe, histoire que tu puisses corriger si ce comportement ne te convient pas ou si tu as oublié de définir la constante en question.
- $_POST['qualite'] (avec des apostrophes ou des guillemets), fait directement appel à l'index est la chaine "qualite"

Et comme la longueur de ma description te le montre facilement, vaut mieux utiliser la seconde option que de laisser php faire ;)

Le second point, ta requête sql. Si elle retourne une erreur, c'est que le code sql est erroné. Soit une erreur de syntaxe, soit un nom de table ou de champ qui n'existe pas, ... Le message d'erreur de mysql_error() t'indique l'endroit à partir duquel ça ne va plus. Y a peut être d'autres erreurs, mais à vu de nez, il te manque une virgule avant le champ date_naissance ;)

requête Update renvoyant une erreur

par piotrowski-s » 18 mars 2012, 17:42

Bonjour à tous, j'ai cette requête ci qui me renvoit une rreur et je n'arrives pas à savoir pourquoi.
><?php 
$sql = 'SELECT * FROM creance where n_doss='.$_POST['n_doss'].'';
$result = mysql_query($sql) or die(__LINE__.mysql_error().$sql); 
?>
                  <?php
      $user = mysql_fetch_assoc($result)
      
        ?><?php if ($_POST[qualite]==$user['qualite']) { ?><?php
$sql = "UPDATE  creance SET  `qualite` =".$_POST['qualite'].", `nom`=".$_POST['nom'].",`prenom` =".$_POST['prenom']."`date_naissance` =".$_POST['date_naissance'].",`lieue_naissance` =".$_POST['lieue_naissance'].",`profession` =".$_POST['profession'].",`adresse` =".$_POST['adresse'].",`adresse2` =".$_POST['adresse2'].",`ville` =".$_POST['ville'].",`code_postal` =".$_POST['code_postal'].",`pays` =".$_POST['pays'].",`tel` =".$_POST['tel'].",`fax` =".$_POST['fax'].",`e-mail` =".$_POST['e-mail'].",`nature` =".$_POST['nature'].",`etat` =".$_POST['etat']." WHERE  n_doss=".$_POST['n_doss']."";
                    
/*on lance la commande (mysql_query) et au cas où, 
on rédige un petit message d'erreur si la requête ne passe pas (or die) 
(Message qui intègrera les causes d'erreur sql)*/
mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
echo "données insérées avec succès";
?><?php } ?>

L'erreur renvoyée est la suivante:

Code : Tout sélectionner

Notice: Use of undefined constant qualite - assumed 'qualite' in
la ligne concernée:
<?php if ($_POST[qualite]==$user['qualite']) 
pourtant j'ai fais un vardump, la variable est bien renseignée je ne comprends pas pourquoi cette erreur survient.