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 :

Construire une requête avec de multiples checkbox [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Par défaut Construire une requête avec de multiples checkbox
    Bonjour,
    Je bute sur un petit problème tout con, mais je ne vois pas comment faire.
    J'ai un formulaire dans lequel je peux cocher de multiples checkbox (Nombre variable).
    Je récupère les valeurs des checkbox pour écrire ma requête et c'est là que ça coince.
    Voici mon code

    Formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <table width='100%'>
            <?php
    	$query="SELECT DISTINCT(Section) FROM `adherents` GROUP BY Section ORDER BY Section";
    	$result = mysql_query($query) or die('Erreur SQL !'.$sql.''.mysql_error());
    	while($row = mysql_fetch_array($result))
      		{
            	echo "<tr><td class='lister'>".$row['0']."</td><td width='25' align='center' class='lister'><input type='checkbox' name='section[]' id='section[]' value='".$row['0']."'></td></tr>\n";
            	}
            ?>
    </table>
    Recuperation des données et création de la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($_POST['section'] as $section)
    {
    $req .= " Section='$section' OR";
    }
    et la requête avec une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID, Section, Nom, Prenom, Sexe, Date_naissance, Adresse, Code_postal, Ville, Tel_perso, Tel_famille, Montant, Mode_paiement, Paye, Caution, C_medical, Photo, Licence, Adresse_mail FROM adherents WHERE Section='JUNIOR F' OR Section='LOISIR COMPET' OR Section='LOISIR JEUDI' OR ORDER BY Nom ASC
    Je la vois bien entendu mon erreur mais je ne vois pas comment enlever ce dernier OR
    A moins que ma solution d'utiliser foreach soit mauvaise ?

    Merci d'avance de votre aide

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    bonjour,

    pourquoi ne pas faire un substring sorti de ton foreach ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = substr($req, 0, -2);

  3. #3
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    essay de mettre ça après ton foreach:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $requete = substr($requete, 0, -2);
    ça devrait enlever ton OR en trop


    PS: je suis trop lent comme d'hab

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 133
    Par défaut
    C'est ce que j'avais pensé faire, je l'avais essayé et ça fonctionnait.
    En fait je voulais surtout savoir s'il n'y avait pas une manière disons plus "jolie" de récuperer ces checkbox pour écrire la requête.

  5. #5
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Si tu y tiens vraiment, tu peux faire quelque chose comme ca :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    while(isset($_POST['section'])){
    	$req .= $_POST['section'][key($_POST['section'])];
     
    	if(next($_POST['section']) !== false)
    		$req .=  ',';
    	else
    		break;
     
    }

  6. #6
    Membre confirmé Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Par défaut
    c'est vrai que la requète est moche.

    tu peux la changer en ça :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    $req = "
    SELECT 
    ID, 
    Section, 
    Nom, 
    Prenom, 
    Sexe, 
    Date_naissance, 
    Adresse, 
    Code_postal, 
    Ville, 
    Tel_perso, 
    Tel_famille, 
    Montant,
    Mode_paiement, 
    Paye, 
    Caution, 
    C_medical, 
    Photo, 
    Licence, 
    Adresse_mail 
    FROM adherents 
    WHERE Section in (";
     
    foreach($_POST['section'] as $section)
    {
       $req .= "'$section', ";
    }
     
    $req = substr($req, 0, -2).")";
    ça simplifie la requête pour sql et c'est plus esthétique

    l'avantage de substr() c'est que tu n'a pas à faire le traitement du if dans chaque bouclage.
    en même temps c'est pas comme si ils allaient coche 100 000 cases

    c'est comme tu veux tu choise

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

Discussions similaires

  1. Optimisation d'une requête avec jointure multiple
    Par lucas52 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/03/2012, 14h36
  2. Insérer checkbox dans une BDD avec choix multiple
    Par honey87 dans le forum Langage
    Réponses: 7
    Dernier message: 07/09/2011, 21h32
  3. [MySQL] Construire une liste avec les résultat d'une requête
    Par Requiem11 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/04/2009, 23h18
  4. Filtrer une requête avec des checkbox
    Par prizmose dans le forum Requêtes
    Réponses: 0
    Dernier message: 28/05/2008, 10h31

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