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 :

faire varier requete en fonction de variables


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut faire varier requete en fonction de variables
    Bonjour,

    je vous ecris car j'ai grand besoin de votre aide pour résoudre un problème qui m'échappe =(.
    Pour faire simple, j'ai un formulaire avec plusieurs menu déroulant qui correspondent a des filtres pour affiner ma recherche.

    Mon but est de faire varier la requête de SELECT en fonction de ce que je recevrai en POST de mon formulaire qui contient mes menus deroulants.

    A la base je peux recevoir de mon formulaire les variables suivantes :
    $frequence = $_POST['frequence'];
    $marque = $_POST['marque'];
    $technologie = $_POST['technologie'];
    $taille = $_POST['taille'];
    $resolution = $_POST['resolution'];
    $ports = $_POST['ports'];

    ps : ces champs issus des menu déroulants sont facultatifs de peux en prendre aucun, comme je peux en cumuler 3-5.....

    Mon but faire varier ma requete en fonction de ce que je recevrai

    Au debut j'ai fait ca :

    SELECT * FROM `tv` WHERE `frequence`= ".$frequence." OR `constructeur`= ".$marque." OR `technologie`= ".$technologie." OR `taille` = ".$taille." OR `resolution`=".$resolution." OR `ports` = ".$ports."

    et dans mon menu déroulant j' ai choisi de faire une recherche par " frequence".
    mais voila cela ne marche pas =(

    deja mais "or" sont en dure et enfin comme je ne recois que la frequence, les autres champs se retrouvent a vide.


    Je suis désespéré , j'ai cherché partout mais je ne sais pas comment faire pour adapter ma requetes en fonction des champs que je recevrais =(((


    sil vous plait, si quelqu'un peu m'aider !!

    un grand merci !!

  2. #2
    Membre confirmé
    Avatar de tse_jc
    Homme Profil pro
    Data Solutions
    Inscrit en
    Août 2010
    Messages
    287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Data Solutions
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 287
    Points : 597
    Points
    597
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Pour répondre à ton problème, il faut tout d'abord que la valeur par défaut de tes champs correspondent à la valeur par défaut de tes variables lorsqu'elles sont vides. Si tu as un champ par défaut défini à null, il faut que tu fasses un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($_POST['frequence']){$freq=$_POST['frequence'];}
    // placer ici : test du contenu de $freq par expression régulière ou par fonction PHP. si cest une chaîne tu peux te servir par ex de is_string() comme premier filtre 
    if ($freq==''||strlen($freq)==0){$freq="null";}
    Si la valeur par défaut est une chaîne vide assure toi simplement que ta variable (ex: $freq) soit une chaîne vide.

    Ensuite comme tu dois test l'ensemble des paramètres en même temps le OR de ta requête sur ta clause where doit être remplacé par AND. Il pourra être utile voire necessaire d'utiliser l'opérateur LIKE. Je t'invite à consulter le manuel en ligne de MySQL.

    Note: Pour plus de souplesse, rester concis et pour faire les choses bien, le mieux est de construire ta requête dynamiquement notamment sur la partie de ta clause where via la concaténation de chaîne et d'utiliser la fonction isnull() de mysql lorsque le champ par défaut est de type null lorsque aucune info n'est présente.

    Cordialement

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 56
    Points : 30
    Points
    30
    Par défaut suite a votre aide
    Bonjour,

    suite a votre préciseuse aide j'ai fais ce code sur mon site
    mais voila j'obtiens cette erreur ci :
    SELECT * FROM `tv` WHERE frequence = ‘120′ AND constructeur = ‘Hitachi’
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource line 227

    j'ai beau retourner le code dans tous les sens je comprend pas =(((

    pourriez vous m'aider svp =(

    $condition = array();

    if (isset($_POST['frequence']) && ($_POST['frequence'] != 'frequence')) // si ma valeur est passe, je l'ajoute au tableau des conditions
    $condition[] = " frequence = '{$_POST['frequence']}' ";

    if (isset($_POST['marque'])&& ($_POST['marque'] != 'marque'))
    $condition[] = " constructeur = '{$_POST['marque']}' ";

    if (isset($_POST['technologie'])&& ($_POST['technologie'] != 'technologie'))
    $condition[] = " technologie = '{$_POST['technologie']}' ";

    if (isset($_POST['taille'])&& ($_POST['taille'] != 'taille'))
    $condition[] = " taille = '{$_POST['taille']}' ";

    if (isset($_POST['resolution'])&& ($_POST['resolution'] != 'resolution'))
    $condition[] = " resolution = '{$_POST['resolution']}' ";

    if (isset($_POST['ports'])&& ($_POST['ports'] != 'ports'))
    $condition[] = " ports = '{$_POST['ports']}' ";


    if (count($condition) > 0){ // si j'ai des conditions, j'ajoute le where et mes conditions séparées par un AND (ou un OR selon ce que tu veux faire)
    $sql= "SELECT * FROM `tv` WHERE " . implode(' AND ', $condition);

    echo $sql;

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/02/2014, 09h42
  2. Réponses: 12
    Dernier message: 22/08/2013, 17h56
  3. Réponses: 10
    Dernier message: 23/07/2013, 13h49
  4. [Débutant] Faire varier des variables d'une fonction
    Par nicolas.tran dans le forum MATLAB
    Réponses: 6
    Dernier message: 24/10/2012, 08h35
  5. faire une requete en passant en variable le nom du champ
    Par warrios dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 09/08/2006, 15h14

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