Aller au contenu

Sujets conseillés

Posté (modifié)

Hello tous!

Je suis nouveau, alors soyez indulgents!!!

J'ai un foutu problème: j'ai une erreur mysql sur ma base de donnés. Lorsque je soumets mon formulaire, j'ai ceci qui s'affiche comme erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'éléphant', Price='3', description='

J'ai essayé avec différents caractères, le seul qui coince et dont j'a vraiment besooin est l'apostrophe (').

J'ai tenté de changer les latin1_german1_ci, mais je netrouve aucun encodage qui supporte les apostrophes.

Attention: je suis une pive totale :blush: en php/mysql, alors... soyer si possible clairs!

d'avance merci à tous et bravo pour le forum.

colinus

edit:

php v. 4.42

mysql v. 14.12 Distrib 5.0.21, for pc-linux-gnu (i686) using readline 5.0

Modifié par colinus
Posté

C'est bien gentil de donner toutes ces infos, mais rassure-toi, c'est plus simple qu'il n'y parait.

Tout simplement, c'est parce que tu sépares tes champs par un apostrophe, et par conséquent les apostrophes de ton texte sont mal interprétés.

La meilleure solution, est de traiter tes variables juste avant la requête, de la manière suivante :

$ta_variable = mysql_real_escape_string($ta_variable);

Posté
C'est bien gentil de donner toutes ces infos, mais rassure-toi, c'est plus simple qu'il n'y parait.

Tout simplement, c'est parce que tu sépares tes champs par un apostrophe, et par conséquent les apostrophes de ton texte sont mal interprétés.

La meilleure solution, est de traiter tes variables juste avant la requête, de la manière suivante :

$ta_variable = mysql_real_escape_string($ta_variable);

<{POST_SNAPBACK}>

Huu... merci!

et ce bout de code, je dois le mettre où??

Je suis une pive, je le rappelle!

merci!

colinus

Posté
La meilleure solution, est de traiter tes variables juste avant la requête,

Donc, il te suffirait de faire l'opération pour chacune de tes variables, l'opération, et après de faire l'insertion en base :

$animal = mysql_real_escape_string($animal);
$prix = mysql_real_escape_string($prix);
$description = mysql_real_escape_string($description);

mysql_query("INSERT INTO ...");

Posté
Donc, il te suffirait de faire l'opération pour chacune de tes variables, l'opération, et après de faire l'insertion en base :

$animal = mysql_real_escape_string($animal);
$prix = mysql_real_escape_string($prix);
$description = mysql_real_escape_string($description);

mysql_query("INSERT INTO ...");

<{POST_SNAPBACK}>

'suis vraiment désolé, mais je ne comprends que dalle à tes explications, pourtant c'est pas faute d'essayer... :fou:

j'ai un formulaire en php pour créer des nouvelles entrées dans ma bd, et dans le champ qui pose problème, il y a le code suivant:

<?php echo str_replace("\"",""",$row[1]); ?>

Est-ce ceci que je dois modifier?

Posté

Tu as forcément un "mysql_query" quelque part dans ta page. C'est lui qui va insérer tes données dans la base.

Identifie-le, et ajoute le code susmentionné juste avant.

PS : c'est un code que tu as créé, ou tu l'as trouvé sur le net ?

Posté

Ok, je vais voir ça.

C'est un code du net, pour un système de shop en ligne: www.shop-script.com, version free.

J'aurais pas été capable d'écrire un machin comme ça...!

Je poste dès qu'il y a du nouveau.

merci!

colinus

Posté

Yop,

j'ai trouvé une page avec le code mysql_query, voici:

function db_connect($host,$user,$pass) //create connection
{
$r = mysql_connect($host,$user,$pass);
if(preg_match('/^5\./',mysql_get_server_info($r)))db_query('SET SESSION sql_mode=0');
return $r;
}

function db_select_db($name) //select database
{
return mysql_select_db($name);
}

function db_query($s) //database query
{
return mysql_query($s);
}

function db_fetch_row($q) //row fetching
{
return mysql_fetch_row($q);
}

function db_insert_id()
{
return mysql_insert_id();

Pourrais-tu me dire comment insérer le code que tu indiques dans tes posts précédents? J'ai essayé, mais c'est encore pire qu'avant....

Promis, dès que possible je m'y mets, mais avec le taff c'est pas fastoche... ou alors je fais un grève du sommeil.

Merci!

colinus

Posté (modifié)

pas vraiment, là ce sont les fonctions de tests.

Tu dois avoir au milieu du programme une luigne de type:

$requete='Insert annonce(code,TITRE) Values("users0002","Maison")'; 

$valeur=mysql_query($requete);

c'est dans la première ligne que tu mélange les ' avec des ". Dans l'exemple ci-dessus, la chaîne est entre ' ', les varaibles entre ". L'inverse fonctionne également. Par contre si tu utilise les mêmes partout:

$requete="Insert annonce(code,TITRE) Values(\"users0002\",\"Maison\")";

ca doit être celà.

Modifié par ybet
Posté

Hello, et merci ybet.

Je vois ce que tu veux dire, mais le hic c'est que je n'ai pas le code que tu dis, dans aucune de mes pages.

J'ai fait une recherche de "$requete=" dans les codes source de mes pages, et rien trouvé...

Si jamais je pose le code complet de ma page "mysql.php", voici:

<?php
/*****************************************************************************
* *
* Shop-Script FREE *
* Copyright (c) 2005 WebAsyst LLC. All rights reserved. *
* *
****************************************************************************/

// database functions :: MySQL

function db_connect($host,$user,$pass) //create connection
{
$r = mysql_connect($host,$user,$pass);
if(preg_match('/^5\./',mysql_get_server_info($r)))db_query('SET SESSION sql_mode=0');
return $r;
}

function db_select_db($name) //select database
{
return mysql_select_db($name);
}

function db_query($s) //database query
{
return mysql_query($s);
}

function db_fetch_row($q) //row fetching
{
return mysql_fetch_row($q);
}

function db_insert_id()
{
return mysql_insert_id();
}

function db_error() //database error message
{
return mysql_error();
}

?>

Je précise que ce n'est pas moi qui ait écrit ce code, il appartient à shop script free.

Une idée? Là je suis totalement largué.

Merci!!

colinus

Posté

le code n'est pâs dans cette page. Il doit y avoir sur la page qui crée la requête un include('fichier') ou un require('fichier') probablement le deuxième qui renvoie un message d'erreur en cas d'absence.

Ils sont passés par les $r et les $s. Mais sur cette page peut rien dire de plus.

Posté
'suis vraiment désolé, mais je ne comprends que dalle à tes explications, pourtant c'est pas faute d'essayer... :fou:

j'ai un formulaire en php pour créer des nouvelles entrées dans ma bd, et dans le champ qui pose problème, il y a le code suivant:

<?php echo str_replace("\"",""",$row[1]); ?>

Est-ce ceci que je dois modifier?

Bonjour,

Moi je mettrais la fonction addslash pour ajouter les éléments corrects en cas d'apostrophe ou de slash

et pour les afficher la fonction stripslash

Pat

Posté
Bonjour,

Moi je mettrais la fonction addslash pour ajouter les éléments corrects en cas d'apostrophe ou de slash

et pour les afficher la fonction stripslash

Pat

moi uniquement mysql_real_escape_string() pour garder une base de données "propre" ;o)

Posté

Hello tous et merci pour vos réponses!

Le support technique de shop-script free a (enfin) fini par me répondre, et ils m'ont dit de mettre un fichier .htaccess avec dedans ce code:

php_flag magic_quotes_gpc On

à la racine de mon shop.

Allez savoir pourquoi, ça fonctionne! (aucune idée du pourquoi du comment).

Merci encore pour votre soutien!

colinus

Posté (modifié)
Hello tous et merci pour vos réponses!

Le support technique de shop-script free a (enfin) fini par me répondre, et ils m'ont dit de mettre un fichier .htaccess avec dedans ce code:

php_flag magic_quotes_gpc On

à la racine de mon shop.

Allez savoir pourquoi, ça fonctionne! (aucune idée du pourquoi du comment).

Merci encore pour votre soutien!

colinus

Bonjour,

En gros, cette ligne dans ce fichier htaccess configure le php.ini mais uniquement de ton site, pas de tout le serveur. C'est de cette façon que tu peux adapter ton php sans déranger tous les sites hébergés sur le même serveur. La commande fait que tous les '\', guillemet etc sont correctement traités avant d'aller dans ta DB et enlevés correctement lorsque tu récupères tes données

Patrick

Modifié par objectifweb

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...