Page 1 sur 1

Update et sqlite

Posté : 17 oct. 2006, 16:24
par Maitrepylos
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

Posté : 17 oct. 2006, 16:27
par mere-teresa
Il faut entourer tes chaînes de guillemets ou d'apostrophe :)

Posté : 17 oct. 2006, 16:38
par Maitrepylos
Sqlite et ses quotes et doubles quotes je m'y perd c'est une horreur.

Merci.

ça passe
:lol:

Posté : 17 oct. 2006, 17:37
par Hubert Roksor
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.

Posté : 18 oct. 2006, 10:20
par Maitrepylos
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

Posté : 18 oct. 2006, 13:29
par Maitrepylos
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é?????????????????

Posté : 19 oct. 2006, 14:33
par Maitrepylos
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

Posté : 19 oct. 2006, 14:39
par Maitrepylos
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 ](*,)

Posté : 19 oct. 2006, 14:59
par Ryle
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)

Posté : 19 oct. 2006, 15:15
par Maitrepylos
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 );
?>


Posté : 20 oct. 2006, 11:29
par Maitrepylos
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.