IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Problème de requète


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Il serait également de bon aloi de protéger vos requêtes contre les injections via la fonction mysql_real_escape_string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

Discussions similaires

  1. [SQL] Problème de requête et <tr>+<td>
    Par ruty dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/08/2006, 09h10
  2. [SQL] Problème bizarre requête date
    Par masseur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 13h12
  3. [Oracle] [SQL] problème de requête
    Par joselito dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 25/01/2006, 12h55
  4. [SQL]problème de requête.
    Par shnouf dans le forum Oracle
    Réponses: 21
    Dernier message: 24/01/2006, 11h12
  5. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo