AddSlashes et requete sql

alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 18 août 2004 à 10:53
cs_lotr Messages postés 128 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 août 2005 - 18 août 2004 à 22:23
bonjour,

contexte:
j'utilise php afin de renseigner une base access (d'ou les procedures odbc du prg ci-dessous).

procedures:
sur ma page web, je recupere a l'aide de formulaires des renseignements tels que $titre_doc, $date_parution, $reference, $chemin_doc ou $observations.
j'applique aux variables $reference, $titre_doc et $observations la procedures addSlashes(). (l. 5 a 7)
je joints ensuite les variables ainsi transformees a ma table 'document'. (l. 10)
pour continuer, j'interroge ma table 'document' afin de connaitre le 'NuméroAuto' (=> 'no_doc') attribue a mon enregistrement par access. (l. 11)
enfin, j'utilise ce 'NuméroAuto' pour creer une copie du fichier sur le serveur. (l. 13)

programme:
1 $date_enregistrement = strtotime("now");
2 $date_parution = mktime (0, 0, 0, $mois, $jour, $annee);
3 if ($reference == "")
4 $reference = "Sans références";
5 $reference = addSlashes($reference);
6 $titre_doc = addSlashes($titre_doc);
7 $observations = addSlashes($observations);
8 echo "INSERT INTO document (utilisateur, date_enr, lien_doc, titr_doc, cod_pub, ref_doc, date_doc, obs_doc) VALUES ('$individu', $date_enregistrement, "$nom_fichier", "$titre_doc", $num_revue, "$reference", $date_parution, "$observations");
";9 echo "SELECT no_doc FROM document WHERE utilisateur '$individu' AND date_enr $date_enregistrement AND lien_doc = "$nom_fichier" AND titr_doc = "$titre_doc" AND cod_pub = $num_revue AND date_doc = $date_parution AND obs_doc = "$observations";";
10 odbc_do($cnx, "INSERT INTO document (utilisateur, date_enr, lien_doc, titr_doc, cod_pub, ref_doc, date_doc, obs_doc) VALUES ('$individu', $date_enregistrement, "$nom_fichier", "$titre_doc", $num_revue, "$reference", $date_parution, "$observations");");11 $numero_fichier odbc_do($cnx, "SELECT no_doc FROM document WHERE utilisateur '$individu' AND date_enr = $date_enregistrement AND lien_doc = "$nom_fichier" AND titr_doc = "$titre_doc" AND cod_pub = $num_revue AND date_doc = $date_parution AND obs_doc = "$observations";");
12 if ($extension_fichier <> "")
13 copy($chemin_doc, "docs_scannes/".odbc_result($numero_fichier, no_doc).$extension_fichier);

probleme:
lorsque je mets des '''''' la requete 'INSERT INTO' (l. 10) ne fonctionne plus.
pourtant si je fais un copier du resultat de la procedure "echo "INSERT INTO ...";" (l. 8) et que je le colle dans l'assistant de creation de requete d'access, l'enregistrement passe sans aucun probleme !!!
on dirait qu'access comprend ma requete mais que php n'arrive pas a lui envoyer convenablement ?!
toujours est il que je suspecte les procedures addSlashes() d'etre pour quelque chose dans cette histoire ...
quelqu'1 saurait-il expliquer cela et m'aider a resoudre mon probleme ???

merci a vous,

alonsyl

2 réponses

ozitoun Messages postés 115 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 25 mars 2008
18 août 2004 à 15:39
t'as essayé des quotes simples ' à la place des doubles-quotes " !?
cs_lotr Messages postés 128 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 12 août 2005
18 août 2004 à 22:23
Bonsoir,
c'est un peu le cirque dans tes requêtes... Parfois tu fais $var, parfois '$var' ou encore"$var".
Comment veut tu que php s'y retrouve ?

Essaies quelquechose du genre :

$req = "SELECT champ_1, champ_2, ...,champ_n FROM ta_table WHERE champ_1='$var_1' AND champ_2='$var_2' AND ... AND champ_n='$var_n'";
$res = odbc_do($connexion, $req) or die(odbc_error()) ;

Ca devrait beaucoup mieux fonctionner avec une syntaxe cohérente...
Rejoignez-nous