Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/11/2007, 02h43   #1
Membre régulier
 
Inscription : octobre 2006
Messages : 324
Détails du profil
Informations personnelles :
Âge : 59
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2006
Messages : 324
Points : 70
Points : 70
Par défaut [SQL] OK en local erreur sur serveur !

hello !

Le forum m'a enlevé une belle épine dans la journée.... (merci !)
En résumé :
1) formulaire (destiné à insérer une enregistrement dans une table)
2) page réception (post) => le client vérifie ses données tapées passe =>
3) la page 2 envoie (post) a page 3 une variable qui contient la requete INSERT
çà marche au poil en local (EasyPhp 1.8) grâce à une astuce donnée par le forum => la tranmission de la variable à la requète !
Citation:
la page 2 transmet par
(post) value="<?php echo htmlspecialchars($sql); ?>"
la page 3
$requete =@mysql_query($sql) or die( mysql_error() ) ;
OK en local
Le serveur me retourne
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 '\'appartement confortable
\',\' 09\',\' PARIS\',\' 75 \', \'14\',

comprend pas !

Merci, je lirai demain => au lit, je suis naze

tremeur53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 08h43   #2
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
A prioris ta requète SQL est mal construite : tu essaies d'insérer une chaine de caractère qui possède des ' qui est justement le caractère délimiteur de chaines pour MySql. Quand tu construis ta requète SQL, fais quelque chose du genre :

Code :
$q = "INSERT INTO table SET txt='".addslashes($txt)."'";
Entre ton serveur et ton EseayPHP, la config des magic quotes est surement différente : http://fr2.php.net/magic_quotes
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h27   #3
Membre régulier
 
Inscription : octobre 2006
Messages : 324
Détails du profil
Informations personnelles :
Âge : 59
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2006
Messages : 324
Points : 70
Points : 70
Merci mais pas compris !
les , delimitent les champs ! !
Faudrait me donner un exemple colet de requete (avec 2 champs)
INSERT INTO $table nom_champ1, nom_champ2..
'$champ1','$champ1'...

tremeur53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h33   #4
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Je parlais de délimiteurs de chaines.
Exemple si tu veux ajouter la chaine de caractère suivante dans un champ texte :

Citation:
L'aéroport n'est pas loin
la requète sera

Code :
INSERT INTO `table` SET champ='L\'aéroport n\'est pas loin'
' est le délimiteur
\ est le caractère d'échappement

(corrigez moi si je me trompe dans les termes)

Sans délimiteur ni échappement, MySql n'aurait aucun moyen de savoir où commence et où finit une chaine...
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h47   #5
Membre régulier
 
Inscription : octobre 2006
Messages : 324
Détails du profil
Informations personnelles :
Âge : 59
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2006
Messages : 324
Points : 70
Points : 70
Pour éviter les embrouilles :
page 1 = formulaire post
page 2 = traitement formulaire et création variable pour la requête
page3 (post) j'envoie la requête

La variable de requête (41 champs en varchar)
Code :
1
2
3
4
$sql="INSERT  INTO biens (description, type, ville, departement, region,surface,terrain,jour,mois,an,age,vendu,viager,etages,nb_chambres,chambres,bureau,cuisine,bains,salon,	sam,extras,grenier,cave,notes,ecoles,commerces,pratique,prix,pays,fax,nom,prenom,adresse1,adresse2,ville_perso,cp,telephone,telephone2)
 VALUES ('$description',' $type',' $ville',' $departement', '$region', '$surface',' $terrain','$jour','$mois','$an','$age','$vendu','$viager','$etages','$nb_chambres','$chambres','$bureau','$cuisine','$bains','$salon','$sam','$extras','$grenier','$cave','$notes','$ecoles','$commerces','$pratique','$prix','$pays','$fax', '$nom','$prenom','$adresse1','$adresse2','$ville_perso','$cp','$telephone','$telephone2') ";
Je poste par 
<input type="hidden" name="sql" value="<?php echo htmlspecialchars($sql); ?>" />
page de réception et envoi de la requête
Code :
1
2
$sql=$_POST['sql'];
  $requete =@mysql_query($sql) or die( mysql_error() ) ;
L'astuce dans input donnée hier par le forum pour interpréter $sql.
Easyphp 1.8 => çà fonctionne au poil !

Le serveur (php et mysql plus récent) = erreur
tremeur53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h52   #6
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Avec ce que je t'ai expliqué tu avais toutes les cartes en main pour solutionner ton problème.

Try this :

Code :
1
2
$sql=$_POST['sql'];
$requete =@mysql_query(addslashes($sql)) or die( mysql_error() );
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h53   #7
Membre régulier
 
Inscription : octobre 2006
Messages : 324
Détails du profil
Informations personnelles :
Âge : 59
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2006
Messages : 324
Points : 70
Points : 70
Sorry, suis pas une pointure sql !

Je teste, je tiens au courant
merci
tremeur53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h59   #8
Membre régulier
 
Inscription : octobre 2006
Messages : 324
Détails du profil
Informations personnelles :
Âge : 59
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2006
Messages : 324
Points : 70
Points : 70
PERDU

Citation:
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 '\'\',\' \',\' \',\' \', \'\', \'\',\' \',\'\',\'\',\'2007\',\'\'
La hotline (PHPNET) va me répondre sous peu... (mail)

M'enfin si tu veux tester autre chose...
tremeur53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 11h03   #9
Membre confirmé
 
Avatar de Mogwaï
 
Inscription : mai 2004
Messages : 247
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2004
Messages : 247
Points : 243
Points : 243
Envoyer un message via MSN à Mogwaï
Essaie l'inverse :

Code :
1
2
$sql=$_POST['sql'];
$requete =@mysql_query(stripslashes($sql)) or die( mysql_error() );
__________________
Etre à son compte, y'a rien de mieux !
Mogwaï est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 11h15   #10
Membre régulier
 
Inscription : octobre 2006
Messages : 324
Détails du profil
Informations personnelles :
Âge : 59
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2006
Messages : 324
Points : 70
Points : 70
Chapeau bas ! !
çà maaaaaaaaarche.
Local et serveur

Merci beaucoup, çà m'a gonflé mais c'est bon d'apprendre !
So long camarade
tremeur53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h03.


 
 
 
 
Partenaires

Hébergement Web