Probleme d'apostrophe sur un UPDATE

Résolu
gorc Messages postés 16 Date d'inscription dimanche 7 novembre 2004 Statut Membre Dernière intervention 3 mars 2009 - 9 févr. 2009 à 14:46
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 3 mars 2009 à 15:29
Bonjour j'ai un problème pour l'update de données d'une base sql via un menu déroulant, l'affichage se fait correctement, la creation de la base aussi sans probleme mais quand j'update il coupe la donnée au niveau du ' ... voilà le code :
Sur la 1ere page avec menu deroulant :
                  <td><?php
                      $sql = @mysql_connect(localhost,root,"");
                      @mysql_select_db("annuaire");
                      $query  = "SELECT libelle FROM services" ;
                      $req = mysql_query($query);
                    if ($num=mysql_num_rows($req) >0)
                    {
                         echo "<select name='serv'><OPTION value='".$result->service."'>".$result->service."</OPTION>";
                         while($row = mysql_fetch_array($req))
                             {
                                 echo "<option value='$row[0]'> $row[0] </OPTION>";
                             }
                         echo "</SELECT>";
                    }?></td>


Sur la 2em page :

$serv = $_POST["serv"];
  $serv=addslashes($serv);
  $sql = "UPDATE users
            SET 
          service = '$serv'
           WHERE id = '$id' " ;


Le code marche tres bien si il n'y a pas d'apostrophe.
Merci de votre aide.
Fabien.

26 réponses

gorc Messages postés 16 Date d'inscription dimanche 7 novembre 2004 Statut Membre Dernière intervention 3 mars 2009
3 mars 2009 à 12:16
le post me retourne la reponse coupé au niveau de l'apostrophe cad pour "L'apostrophe" il me retourne "L"
Si j'ajoute les addslashes dans les options il me retourne "L"
je te rapelle ma boucle :
<td><?php
                      $sql = @mysql_connect(localhost,root,"");
                      @mysql_select_db("annuaire");
                      $query  = "SELECT libelle FROM services" ;
                      $req = mysql_query($query);
                    if ($num=mysql_num_rows($req) >0)
                    {
                         echo "<select name='serv'><OPTION value='".$result->service."'>".$result->service."</OPTION>";
                         while($row = mysql_fetch_array($req))
                             {
                                 echo "<option value='$row[0]'> $row[0] </OPTION>";
                             }
                         echo "</SELECT>";
                    }?></td>

Ps : torp tard pour le coiffeur , je suis chauve comme une fesse ;)
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 mars 2009 à 12:35
Heeeeeeee je ne comprend plus grand chose là ????
Ton bug est à quel niveau ?
Affichage dans ton ComboBox (il me semble que non) ?
Données dans ta table suite à l'UPDATE (pour moi c'est sa) ?

Là (sauf erreur de ma part) c'est la boucle de 'remplissage' de ton interface que tu à posté (soir ce qui alimente en données ton ComboBox) ??? Tu affiche correctement ce qui se trouve dans ta table non (ou tu affiche "L" à la place de "L'apostrophe", attention que tu est bien "L'apostrophe" dans ta table et que le bug à l'udate n'a pas déjà été rencontré) ???

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
0
gorc Messages postés 16 Date d'inscription dimanche 7 novembre 2004 Statut Membre Dernière intervention 3 mars 2009
3 mars 2009 à 13:29
L'erreur est dans le passage de la donnée ( qui est juste elle , la donnée affiché dans le menu ) du menu déroulant a l'update, le post me coupe après l'apostrophe, j'avoue que j'ai mis du temps aussi a trouvé d'où venait l'erreur mais je n'arrive pas a la corriger ...
0
gorc Messages postés 16 Date d'inscription dimanche 7 novembre 2004 Statut Membre Dernière intervention 3 mars 2009
3 mars 2009 à 13:35
Je viens de faire des test l'erreur n'est pas sur l'update je te confirme ( j'ai tenté avec du add ) mais bel et bien au passage de la valeur qui s'affiche dans le menu deroulant vers la fonction de la page suivante , donc le post qui me coupe apres l'apostrophe :/
L'erreur est donc dans le select mais je ne vois pas trop ou ...
Si quelqu'un a une idée ...
0

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

Posez votre question
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 mars 2009 à 14:18
Je pense avoir compris (enfin ^^)

Si le problème se trouve bien là où tu le dit, elle pourrais provenir de sa : "'$result->service'" (dans la ligne "<select name= 'serv'><OPTION value='".$result->service."'>".$result->service."</OPTION>";)
Car si on décompose ce que vas faire le code :
1) "<select name='serv'><OPTION value='"
concaténé avec
2) $result->service
concaténé avec
3)  "'>"
concaténé avec
4) $result->service
concaténé avec
5) "</OPTION>"

Donc si je comprend bien en ligne 4 c'est ce que tu affiche, et en ligne 2 la valeur.
Ta chaine concaténé vas donc te données (avec la donnée "L'apostrophe") :
"<select name='serv'><OPTION value=' L'apostrophe '>L'apostrophe</OPTION>"
En gras la valeur en souligné l'affichage.
L'affichage ne contiens pas de début et de fin de chaine donc pas de problème MAIS la valeur contiens elle des marques de début/fin de chaine et c'est sans doute là que se trouve le problème.
='                     <- Début de chaine (en gras)
L'                     <- Détecter comme fin de chaine (en gras)
apostrophe'>     <- Erreur supporté par le navigateur
A tu tenté de l'addslashs à ce niveau ?
Si oui :
Il est même possible que dans la chaine L/' l'apostrophe soit toujours considérer comme marque de fin
Tente de remplacé par un double apostrophe plutôt que par /' (des fois que ...)

A testé : <- Perso je préfére cette solution
Rempli un tableau de chaine de carac dans la boucle. Dans la value de tes options, place l'index du tableau où ce trouve ta chaine. Récupére les chaine de ton tableau en fonction de l'index choisi.

Autre solution : <- Fait très attention avec cette solution les erreurs sont facile à faire et difficile à détecter !
Remplace les apostrophes par des carac de controle dans la valeur (puis re-remplace ce carac de control par une apostrophe au moment des update. ATTENTION au erreur en cas de remplacement ce n'est pas aussi façile que sa en à l'aire : je conseilerais plutôt des carac non affichable et il faut vérif qu'il nexiste pas déjà dans la chaine si non le remplacé par autre chose, qui ne dois pas déjà existé dans ta chaine, ... Je pense que tu à compris le problème des remplacements.).
L'idéale serais que /' ne soit pas considérer comme une marque de fin de chaine

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
3 mars 2009 à 15:29
De rien
On ne peut pas dire que j'ai été efficace sur ce coup
Je ferais mieux la prochaine fois
Contant que tu t'en soit sortie, bon courage pour la suite et bonne prog

 Amicalement <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-pa
0
Rejoignez-nous