Probleme de quote dans code php

Signaler
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006
-
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006
-
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

Messages postés
461
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
16 février 2012

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.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,



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

http://de2.php.net/manual/fr/function.addslashes.php
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

salut
morpheus262, ta solution n'a pas marché
merci quand meme
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Re,



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



lol.
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

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
Messages postés
3
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
14 mars 2005

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);
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

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
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

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
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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.
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

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!!
Messages postés
2
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

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+
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

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
Messages postés
2
Date d'inscription
mercredi 16 juillet 2003
Statut
Membre
Dernière intervention
5 avril 2005

En doublant les quote ca entre 'j'arrive' directement dans la base c'est mieux :p
Messages postés
67
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
3 avril 2006

moi je suis sur une base access, et j'ai deja essayé, ça ne marché pa