Update et sqlite

Mammouth du PHP | 1029 Messages

17 oct. 2006, 16:24

bonjour,
j'essaye d'insérer le code suivant.

Code : Tout sélectionner

UPDATE motsphrase SET motphrasedebut = je suis un pamplemouse, motreponse = pamplemouse, motphrasefin = exact je suis une pamplemouse WHERE idmots = 3
et j'ai ceci comme erreur, je ne comprend pas bien

Code : Tout sélectionner

Warning: sqlite_query() [function.sqlite-query]: near "suis": syntax error in /var/www/ProjetEmmanuelle/DA/modifDevinetteDa.php on line 130 je suis un pamplemouse
Merci de votre aide
L'expérience est la somme de toutes nos erreurs.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 oct. 2006, 16:27

Il faut entourer tes chaînes de guillemets ou d'apostrophe :)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 1029 Messages

17 oct. 2006, 16:38

Sqlite et ses quotes et doubles quotes je m'y perd c'est une horreur.

Merci.

ça passe
:lol:
L'expérience est la somme de toutes nos erreurs.

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

17 oct. 2006, 17:37

Sqlite et ses quotes et doubles quotes je m'y perd
Si tu dois encadrer une valeur alors n'utilise que des "single quotes", l'apostrophe '
Si tu dois encadrer le nom d'un champs ou d'une table (ce qui est assez rare en soit) le standard est d'utiliser des "double quotes", ou guillemets " mais ça, malheureusement ça dépend un peu des serveurs.

Mammouth du PHP | 1029 Messages

18 oct. 2006, 10:20

Bonjour,

merci de pour c'est renseignements précieux, je me suis heurté à ce problème de quote, où le single quote avec une valeur qui comprenais une apostrophe terminais ma ligne sql plutôt que prévus.

Donc j'ai parsé les données avec sqlite_escape_string(), et remplacer les single quote par des doubles quotes, et puis bardaf.

Je vais essayer de me tenir à vos conseils.

Merci
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

18 oct. 2006, 13:29

Désolé, mais je deviens fou, et je pense ne plus avoir une vue globale sur ce qui ce passe ici.

mon code :
<?php
$sql = "INSERT INTO motsphrase (motphrasedebut,motreponse,motphrasefin,motssolution) VALUES ('$phrasedebut','$solution','$phrasefin','$motssolution')";
sqlite_escape_string($sql);
sqlite_query($sql,$opensqlite);
?>
le echo de $sql

Code : Tout sélectionner

INSERT INTO motsphrase (motphrasedebut,motreponse,motphrasefin,motssolution) VALUES ('je suis gérard','gérard','exact c\'est bien moi','gg,gégé,dgé,gérarementsoif')
l'erreur

Code : Tout sélectionner

Warning: sqlite_query() [function.sqlite-query]: near "est": syntax error in /var/www/ProjetEmmanuelle/DA/modifDevinetteDa.php on line 142
Pourtant le "c'est" est bien échappé?????????????????
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

19 oct. 2006, 14:33

Je viens de supprimer les magic_quote_gpc, et mon problème reste entier, je devrais ajouter une quote en plus comme ceci

Code : Tout sélectionner

c''est
Mais je pensais que c'etais le boulot de
sqlite_escape_string()
je ne comprend pas bien là.

Auriez-vous une idée.

merci
L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

19 oct. 2006, 14:39

Alors là, je ne comprend vraiment pas parce ceci me donne la solution.
$sql = "INSERT INTO motsphrase (motphrasedebut,motreponse,motphrasefin,motssolution) VALUES ('".$phrasedebut."','".$solution."','".sqlite_escape_string($phrasefin)."','".$motssolution."')";

Code : Tout sélectionner

INSERT INTO motsphrase (motphrasedebut,motreponse,motphrasefin,motssolution) VALUES ('je suis gérard','gérard','exact c''est bien moi','gg,gégé,dgé,gérarementsoif')
Pq il echape la variable, et pas le ligne de commande complète ](*,)
L'expérience est la somme de toutes nos erreurs.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 oct. 2006, 14:59

Pour SQLite, l'échappement des apostrophes se fait effectivement en doublant l'apostrophe, contrairement à MySQL chez qui il suffit de la backslasher (yeah!8))

La fonction sqlite_escape_string() va retourner la chaine passée en paramètre, en doublant toutes ses apostrophes, mais elle ne modifie pas la chaine pour autant :
$sql = "Ma chaine avec 'apostrophes'";
echo sqlite_escape_string($sql); // affiche : Ma chaine avec ''apostrophes''
echo $sql; // affiche : Ma chaine avec 'apostrophes' (la valeur de $sql n'est pas modifiée)

Mammouth du PHP | 1029 Messages

19 oct. 2006, 15:15

Si c'etais si simple. :cry:
<?php
$sql = "UPDATE motsphrase SET motphrasedebut = '".$motphrasedebut."', motreponse = '".$reponse."', motphrasefin = '".$motphrasefin."',motssolution = '".$motssolution."' WHERE idmots = $id ";
		echo sqlite_escape_string($sql);
		sqlite_query($sql,$opensqlite );
?>

me donne ceci

Code : Tout sélectionner

UPDATE motsphrase SET motphrasedebut = ''je suis gérard'', motreponse = ''gérard'', motphrasefin = ''exact c''est bien moi'',motssolution = ''gg,gégé,dgé,gérarementsoif'' WHERE idmots = 13
et de nouveaux la même erreur

Code : Tout sélectionner

Warning: sqlite_query() [function.sqlite-query]: near "est": syntax error in /var/www/ProjetEmmanuelle/DA/modifDevinetteDa.php on line 127
par contre cette solution corespond à mes besoins, même si je sais que ce n'est pas propre et encore moins logique
<?php
	$sql = "UPDATE motsphrase SET motphrasedebut = '".sqlite_escape_string($motphrasedebut)."', motreponse = '".sqlite_escape_string($reponse)."', motphrasefin = '".sqlite_escape_string($motphrasefin)."',motssolution = '".sqlite_escape_string($motssolution)."' WHERE idmots = $id ";
		// echo sqlite_escape_string($sql);
		sqlite_query($sql,$opensqlite );
?>

L'expérience est la somme de toutes nos erreurs.

Mammouth du PHP | 1029 Messages

20 oct. 2006, 11:29

Ca y est j'ai la révélation à mon incompréhension que je comprenais pas tout, en ignorant complétement la remarque de Ryle.
<?php
echo sqlite_escape_string($sql); // affiche : Ma chaine avec ''apostrophes''
echo $sql; // affiche : Ma chaine avec 'apostrophes' (la valeur de $sql n'est pas modifiée)
?>

En fait j'ai deux serveur, un en production et un autre en test.
N'ayant jamais vraiment vérifier mon php.ini et travaillant sous Debian, il étais absolument évident pour moi que le simple fait de faire apt-get install php5, me mettrais mon php.ini avec les magic_quotes_gpc à Off, donc pour moi le code suivant etais correcte.
<?php
$sqladresse = "UPDATE adresse SET adrrue = '$rue', adrnumero = '$numero', adrbte = '$bte', adrlocalite = '$localite'";
$sqladresse.="WHERE idparticipant = '".$_SESSION['id']."'";
pg_escape_string($sqladresse);
pg_query($sqladresse);
?>
le simple fait de faire
<?php
pg_escape_string($sql)
?>
étais pour moi correcte, donc mon $sql étais bien parsé, de plus cela fonctionnais bien, normal les magic_quotes_gpc sont activés :shock:

Et puis "voila", que je me permet de voir mon php.ini sur le serveur de test (qui lui est sous Ubuntu) et de mettre les magic_quotes_gpc à Off.

Et voila les problèmes qui commence, puisque dans ma tête le simple fait de faire pg_escape_string($sql) etais suffisant, je me bloquais, je viens seulement de comprendre qu'il faut que je parse chaque variables, comme par exemple
<?php
	$opensqlite = sqlite_open('sqlite/basedb.sqlite');
		
		$sql = "UPDATE motsphrase SET";
		$sql.=" motphrasedebut = '".sqlite_escape_string($motphrasedebut)."',";
		$sql.=" motreponse = '".sqlite_escape_string($reponse)."',"; 
		$sql.=" motphrasefin = '".sqlite_escape_string($motphrasefin)."',";
		$sql.=" motssolution = '".sqlite_escape_string($motssolution)."'";
		$sql.=" WHERE idmots = $id ";
		sqlite_query($sql,$opensqlite );
		sqlite_close($opensqlite);
?>

En tous cas merci de votre aide.

et comme je dis L'expérience est la somme de toutes nos erreurs.
L'expérience est la somme de toutes nos erreurs.