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/06/2007, 11h57   #1
Invité de passage
 
Inscription : mai 2007
Messages : 11
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 11
Points : 0
Points : 0
Par défaut [SQL] Problème de requète

Voici mon problème :
J'aimerais que à la place de 2007,3 et 4 il y est respectivement les variables $année, $id_trim et $id_service que j'importe d'un formulaire via une méthode post.
Mais quand j'insère ces variables dans la requète sql (avec ou sans " "), cela ne marche pas.
A préciser que lorsque je fais un print des varaibles "$année, $id_trim et $id_service ", j'obtiens bien : "2007,3,4".

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 $action = $_POST["action"];
 $année = $_POST["ANNEE"];
 $id_trim=$_POST["TRIMESTRE"];
 $id_service= $_POST["SERVICE"];
 
 $sql = 'SELECT nom_atb,R,I,S from bacterio,atb,bactéries'
        . ' WHERE (bactéries.id_bacterie = bacterio.id_bacterie)'
        . ' AND (atb.id_atb = bacterio.id_atb)'
        . ' AND (bacterio.id_service = "4")'
        . ' AND (bacterio.id_bacterie like "STAU")'
        . ' AND (bacterio.S != "0")'
        . ' AND (bacterio.id_trim = "3")'
        . ' AND (bacterio.annee ="2007") ';
Merci d'avance à tous pour vos réponses !
ceaser est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 12h02   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Le problème vient du fait qu'entre ' ' les $id ne sont pas interprétés, le plus simples c'est d'entourer la requete par les double quotes deja, et de séparer la requete pour les variables (qui doivent être entourées de ' ' si ce sont des string)
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
$action = $_POST["action"];
$annee = $_POST["ANNEE"];
$id_trim=$_POST["TRIMESTRE"];
$id_service= $_POST["SERVICE"];
 
$sql = "SELECT nom_atb,R,I,S from bacterio,atb,bactéries
 WHERE (bactéries.id_bacterie = bacterio.id_bacterie)
 AND (atb.id_atb = bacterio.id_atb)
 AND (bacterio.id_service = '" . $id_service . "')
 AND (bacterio.id_bacterie like 'STAU')
 AND (bacterio.S != '0')
 AND (bacterio.id_trim = '" . $id_trim . "')
 AND (bacterio.annee ='" . $annee  ."')";

Comme dit au dessus, pas besoin de mettre les ' ' si tes champs années, id_trim et id_service sont des int.

Ps: penses a mettre ton code en forme avec le bouton # et évites les accents dans les noms de variables dans le code!
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 16h12   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
Une remarque : si tu encadres la requete par des doubles quotes (") tu n'as pas besoin de concaténer les variables : les doubles quotes permettent l'interprétation des variables mon explication sur le sujet
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2007, 19h52   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il serait également de bon aloi de protéger vos requêtes contre les injections via la fonction mysql_real_escape_string :
Code :
1
2
3
4
$action = mysql_real_escape_string($_POST["action"]);
$annee = mysql_real_escape_string($_POST["ANNEE"]);
$id_trim = mysql_real_escape_string($_POST["TRIMESTRE"]);
$id_service = mysql_real_escape_string($_POST["SERVICE"]);
On pourrait éventuellement s'en passer pour des champs numériques mais encore faut-il s'assurer que les données obtenues correspondent bien à ce type !

Si magic_quotes_gpc est actif (valeur On, voir votre phpinfo), il serait nécessaire d'appliquer d'abord la fonction stripslashes avant mysql_real_escape_string.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h58.


 
 
 
 
Partenaires

Hébergement Web