Probleme de quote dans code php

rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006 - 14 mars 2005 à 10:01
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006 - 6 avril 2005 à 08:39
bonjour à tous,

j'ai une zone de texte à remplir dans un formulaire, mais quand je mais une quote dans ce texte le php croit que je veut fermer la quote de la requete sql, alors que non.

pour mieux comprendre:


<FORM name= ajout action=ajout_agenda2.php method=post>
<CENTER>
Ajout dans l'agenda
</CENTER>
date,
,
----

heure,
,
----

texte,
,
----

</FORM>

et là, il prend en compte la quote:


<FORM name=formulaire>09/05/200412:50c'est un teste de quote
<CENTER>INSERT INTO agenda (datebd, heure, texte) VALUES ( '09/05/2004', '12:50', 'c'est un teste de quote')</CENTER>

Warning : odbc_do(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression ''c'est un teste de quote')'., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-7\www\pref28\ajout_agenda2.php on line 32
37000</FORM>


voici mon code:

<html>
<head><title>ajout dans agenda</title></head>



<FORM NAME ="formulaire">


<?php


include ("connexion.php");

//récupération des valeurs des champs:

$datebd = $_POST["datebd"] ;

$heure = $_POST["heure"] ;

$texte = $_POST["texte"] ;

echo $datebd;
echo $heure;
echo $texte;


//création de la requête SQL:

$sql = "INSERT INTO agenda (datebd, heure, texte)
VALUES ( '$datebd', '$heure', '$texte')";


echo ( "<center>".$sql."</center>"."
") ;


$requete = odbc_do ($cnx,$sql) or die( odbc_error() ) ;


if($requete)

echo("<center>L'insertion a été correctement effectuée</center>") ;
else
echo("<center>L'insertion à échouée</center>") ;


odbc_close($cnx);



?>

merci de votre aide;

14 réponses

morpheus262 Messages postés 461 Date d'inscription mardi 27 avril 2004 Statut Membre Dernière intervention 16 février 2012
14 mars 2005 à 10:41
Salut,

ben une solution peux consister a d abord modifier la cote avant de la saisir dans la base et tu effectura l operation inverse pour un affichage.
str_replace($texte,"'","%xx"); va te trnaformer ton ' en %xx (tu met ce que tu veux pour le xx mais y en a des resservé)
et tu fera l inverse pour afficher.
essaye aussi
str_replace($texte," ' "," '' ") ca peut peut etre marcher:


<HR>
Sans maîtrise la puissance n'est rien et je maîtrise... Apprend ca petit
Sur ce a tchiao bon dimanche.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 mars 2005 à 10:46
Hello,



ben c'est a ca que servent addslashes() et stripslashes().

http://de2.php.net/manual/fr/function.addslashes.php
0
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
14 mars 2005 à 14:19
salut
morpheus262, ta solution n'a pas marché
merci quand meme
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 mars 2005 à 14:26
Re,



voui, ben raison de plus pour utiliser addslashes() puis stripslashes()



lol.
0

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

Posez votre question
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
14 mars 2005 à 14:38
salut

malalam,

addslashes mache bien quand je met : $texte = $_POST["texte"] ;
echo addslashes ($texte) ;

mais dans la requete sql, ça ne marche pas:
soit quand je met ça:

$sql = "INSERT INTO agenda (datebd, heure, texte)
VALUES ( '$datebd', '$heure', '$texte')";

echo addslashes( "<center>".$sql."</center>"."
") ;

il me met ça:


<CENTER>INSERT INTO agenda (datebd, heure, texte) VALUES ( \'un\', \'un\', \'une\'quote\')</CENTER>

Warning : odbc_do(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression ''une'quote')'., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-7\www\pref28\ajout_agenda2.php on line 31

soit quand je met ça :

$sql = "INSERT INTO agenda (datebd, heure, texte)
VALUES ( '$datebd', '$heure', '$texte')";


echo ( "<center>".$sql."</center>"."
") ;

il me met ça :



<CENTER>INSERT INTO agenda (datebd, heure, texte) VALUES ( 'un', 'un', 'une'quote')</CENTER>

Warning: odbc_do(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression ''une'quote')'., SQL state 37000 in SQLExecDirect in c:\program files\easyphp1-7\www\pref28\ajout_agenda2.php on line 31
37000

je sais plus quoi faire, et la doc est en anglais et j'ai du mal!!!

aidez moi svp
merci quand meme si tu trouve pas malalam
0
ecloet Messages postés 3 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 14 mars 2005
14 mars 2005 à 14:47
salut

Essaye le code suivant

<?php
include ("connexion.php");
//récupération des valeurs des champs:
$datebd = $_POST["datebd"] ;
$heure = $_POST["heure"] ;
$texte = addslashes($_POST["texte"]) ;
echo $datebd;
echo $heure;
echo striplsashes($texte);
//création de la requête SQL:

$sql = "INSERT INTO agenda (datebd, heure, texte)
VALUES ( '$datebd', '$heure', '$texte')";


echo ( "<center>".$sql."</center>"."
") ;


$requete = odbc_do ($cnx,$sql) or die( odbc_error() ) ;


if($requete)

echo("<center>L'insertion a été correctement effectuée</center>") ;
else
echo("<center>L'insertion à échouée</center>") ;


odbc_close($cnx);
0
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
14 mars 2005 à 15:09
salut,
j'ai bien mit

$texte = addslashes($_POST["texte"]) ;
et
echo striplsashes($texte);

il me met bien les / au bon endroit

mais il me met encore la meme erreur

Warning: odbc_do(): SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe (opérateur absent) dans l'expression ''unm\'essage');'., SQL state 37000 in SQLExecDirect in ...

jcomprend pas, quand je met un texte sans ' ça marche pourtant!!

merci quand meme
0
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
14 mars 2005 à 15:44
re,
l'erreur peu venir du sql
ptet que en sql, le ' n'est pas le caractère qui permet de ne pas interpreté ce qu'il y a dedans,
si c'est le cas, savez vous qu'elle est ,en sql ,le caractère qui permet de ne pas interpreté les quote,
sinon si vous avez une autre idée n'hesité pas svp !!!
avez vous une
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
14 mars 2005 à 17:38
Le truc ce n'est que ce n'est pas mysql, apparemment. Mysql a aussi un caractere d'echappement bien a lui.

Y a une fonction php : http://de3.php.net/manual/en/function.mysql-real-escape-string.php

mysql_real_escape_string () qui permet de gerer ca.

Il n'y a pas l'air d'y avoir la meme chose avec odbc.



Mais je suis quand meme tres etonne...j'ai utilise des addslashes() des
tas de fois avec des requetes sans que cela pose de probleme.
D'ailleurs, c'est marque la :

http://dev.mysql.com/doc/mysql/en/string-syntax.html



lol.



Bon...tu fais donc bien $texte = addslashes($_POST['texte']);



puis tu mets juste $texte dans ta requete.

Et elle plante en s'arretant au simple quote.



Il faut que tu vois du cote de ta base quel est le caractere
d'echappement. Le probleme vient peut-etre du fait qu'elle ne comprend
pas \ comme un caractere d'echappement.
0
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
21 mars 2005 à 15:42
j'ai pas trouvé le caractère d'echapement de access,


par contre j'ai mis une fonction qui remplace les ' par des /,c'est bon l'insertion dans la base marche, et la fonction inverse quand j'affiche les données de la base,


mais c'est une mauvaise idée car si j'ai un / dans le texte, il va me le remplacer par ' meme si je ne le veux pas!!


si tu trouve le caractère d'echapement d'une base access, peut tu me le dire?


et si tu as une autre idée n'hesite pas à me tenir au courant!!
0
scbzolk Messages postés 2 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 5 avril 2005
4 avril 2005 à 13:29
rukiyes,

Je suis pas sur qu'il y ait vraiment un caractère d'échappement dans access mais je viens d'avoir ce problème et si tu doubles les quote ( j'arrive->j''arrive ) ca marche.

A+
0
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
5 avril 2005 à 09:10
salut,

en fait, j'ai résolue le probleme,

je fais un remplacement quand je l'enregistre dans la base

$textetemp=ereg_replace (" ' "," \quote ",$textetemp);

et je reremplace à l'affichage

$textetemp=ereg_replace (" \quote "," ' ",$textetemp);

comme ça, quand je tape : j'arrive

je l'entre dans la base en mettant
$textetemp=ereg_replace (" ' "," \quote ",$textetemp);

dans ma base j'ai: j\quotearrive

ensuite quand je veux l'afficher je met
$textetemp=ereg_replace (" \quote "," ' ",$textetemp);

et à l'affichage, j'ai : j'arrive

j'espere que ça peut t'aider

bye
0
scbzolk Messages postés 2 Date d'inscription mercredi 16 juillet 2003 Statut Membre Dernière intervention 5 avril 2005
5 avril 2005 à 09:48
En doublant les quote ca entre 'j'arrive' directement dans la base c'est mieux :p
0
rukiyes Messages postés 67 Date d'inscription lundi 17 janvier 2005 Statut Membre Dernière intervention 3 avril 2006
6 avril 2005 à 08:39
moi je suis sur une base access, et j'ai deja essayé, ça ne marché pa
0
Rejoignez-nous