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 :

Multiselect à partir d'une requête [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Par défaut Multiselect à partir d'une requête
    Bonjour,
    J'ai un formulaire avec plusieurs listes dont une est à choix multiple et je récupère dans une autre page (mais c'est pareil lorsque j'envoie le formulaire sur la même page) les lignes de la BDD correspondantes aux valeurs choisies.

    Malheureusement, je n'obtiens jamais plus que les lignes qui correspondent à la dernière valeur sélectionnée mais jamais les autres correspondant aux autres sélections.
    Je peux m'escrimer autant que je peux, que ce soit à partir de la liste ou de son équivalent en cases à cocher, en GET ou en POST,c'est la même chose, impossible d'obtenir toutes les valeurs. Les valeurs du champ choisi sont de type VARCHAR mais c'est pareil avec des décimales, en revanche, je n'ai pas essayé avec un champ ENUM, mais je crains que ce ne soit la même chose.
    Tout ceci dans le cadre d'une recherche avancée qui n'avance guère...
    J'ai consulté beaucoup et obtenu peu jusqu'alors, on me parle de crochets [] à la suite de la déclaration du select name"truc[]" mais ça ne change rien.
    Je ne peux pas faire intervenir BETWEEN parce que c'est du VARCHAR, je suis donc légèrement bloqué.
    Quelqu'un a-t-il une idée ?
    Merci.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 280
    Par défaut
    Pas tres bien compris le soucis, ni le besoin non plus...

    c'est un truc comme ca que tu veux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT mescolonnes...
    FROM matable
    WHERE colatester IN ('val1','val2','val3',...,'valn');
    ---
    Farid

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Par défaut
    Non, ce n'est pas du tout ça.
    Le besoin est de remplir un tableau construit à partir des choix utilisateurs dans le cadre d'une recherche détaillée destinée aux agriculteurs et afin d'affiner un choix parmi 400 produits différents qui leur sont destinés.

    Dans un formulaire, je choisi d'abord un type de sol (menu à choix simple):
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <select name="sol" id="sol">
          <option value="%">Indifférent</option>
          <option value="Tout sol">Tout sol</option>
          <option value="Sol frais et humifère">Sol frais et humif&egrave;re</option>
          <option value="Tout sol drainant">Tout sol drainant</option>
      </select>
    Ensuite le type d'exposition (menu à choix simple) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <select name="expo" id="expo">
          <option value="%">Indifférent</option>
          <option value="Plein soleil">Plein soleil</option>
          <option value="Soleil, mi-ombre">Soleil, mi-ombre</option>
      </select>
    Pour finir la hauteur (menu à choix multiple) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <select name="hauteur" size="3" multiple="multiple" id="hauteur">
        <option value="%">Indifférent</option>
        <option value="0,50 cm">0,50 cm</option>
        <option value="0,75 cm">0.75 cm</option>
        <option value="1 m">1 m</option>
        <option value="1,25 m">1,25 m</option>
        <option value="1,50 m">1,50 m</option>
      </select>
    J'ai d'autres critères plus précis encore mais ce n'est pas la question.

    C'est la fin du form, il est envoyé en POST à la page résultat dans laquelle se trouve la requête avec la récupération de toutes les variables POST.
    J'obtiens donc les solutions de produits(tirés de la BDD) et respectant les choix demandés, leur nombre est variable. MAIS lorsque je spécifie 2 ou 3 hauteurs à la fois comme critère de hauteur, je ne les obtiens jamais toutes mais apparaissent alors toutes les lignes correspondantes seulement à la dernière (la plus haute) valeur demandée.
    J'ai essayé de changer le menu hauteur en checkbox, le comportement est le même.
    J'ai essayé à partir de valeurs décimales au lieu de VARCHAR, c'est pareil.
    Voilà, j'espère que c'est clair. Merci

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Il te faut rendre $_POST['hauteur'] tabulaire.
    Pour cela, il faut effectivement nommer la liste name="hauteur[]".
    Alors tu pourras utiliser la syntaxe WHERE `hauteur` IN (liste des valeurs provenant de $_POST['hauteur[]') que t'a fournie Farid_92.
    J'ai supposé que tu traitais ton formulaire avec php.
    Si tu as un doute sur la façon d'utiliser $_POST['hauteur[]'), fais un print_r($_POST) dans ton script et tu comprendras mieux comment c'est organisé par http.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Par défaut
    Merci Maljuna Kris
    Bon, les crochets placés sur name="hauteur[]" obtiennent un tableau vide.
    Je livre ici ma requête de récupération des données du formulaire, affichées dans un tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    $colsol_recup = "%";
    if (isset($_POST['sol'])) {
      $colsol_recup = (get_magic_quotes_gpc()) ? $_POST['sol'] : addslashes($_POST['sol']);
    }
    $colhauteur_recup = "%";
    if (isset($_POST['hauteur'])) {
      $colhauteur_recup = (get_magic_quotes_gpc()) ? $_POST['hauteur'] : addslashes($_POST['hauteur']);
    }
    $colexpo_recup = "%";
    if (isset($_POST['expo'])) {
      $colexpo_recup = (get_magic_quotes_gpc()) ? $_POST['expo'] : addslashes($_POST['expo']);
    }
    mysql_select_db($database_essai, $essai);
    $query_recup = sprintf("SELECT * FROM vegetaux WHERE vegetaux.expo LIKE '%s' and vegetaux.sol LIKE '%s' and vegetaux.hauteur LIKE '%s' ", $colexpo_recup,$colsol_recup,$colhauteur_recup);
    $recup = mysql_query($query_recup, $essai) or die(mysql_error());
    $row_recup = mysql_fetch_assoc($recup);
    $totalRows_recup = mysql_num_rows($recup);
    ?>
    print_r ($_POST); donne ceci :Array ( [expo] => % [sol] => % [hauteur] => Array ( [0] => 2 m [1] => 4 m ) [Submit] => Envoyer )
    lorsque j'ai sélectionné 2 hauteurs.
    Je ne vois plus.

  6. #6
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par zorbo Voir le message
    Bon, les crochets placés sur name="hauteur[]" obtiennent un tableau vide.
    La preuve du contraire
    Citation Envoyé par zorbo Voir le message
    print_r ($_POST); donne ceci :Array ( [expo] => % [sol] => % [hauteur] => Array ( [0] => 2 m [1] => 4 m ) [Submit] => Envoyer )
    tu peux donc construire la liste pour le IN de la requête SQL, par exemple comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste= '\''.explode('\',\'',$_POST['hauteur']).'\'';
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/09/2011, 18h14
  2. Copier à partir d'une requète
    Par Sendo dans le forum Access
    Réponses: 3
    Dernier message: 28/09/2005, 20h13
  3. Réponses: 4
    Dernier message: 16/09/2005, 14h49
  4. Récupérer le code SQL à partir d'une requête
    Par Edith_T dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 23/11/2004, 14h10
  5. Réponses: 2
    Dernier message: 02/11/2004, 12h38

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