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 :

Filtrer des éléments d'une liste selon plusieures valeurs d'un champ d'une table bdd [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é
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Par défaut Filtrer des éléments d'une liste selon plusieures valeurs d'un champ d'une table bdd
    Bonjour,
    M'inspirant de ce site:http://annuaire.lenouveleconomiste.f...20&ParPage=10&,
    je voudrais donner aux utilisateurs le choix de filtrer une liste d'évènements selon leurs centres d'intérêts.
    Description de mon module simplifié :
    Par défaut, Dans la zone de gauche, la page affiche tous les évents par date décroissante.
    et dans la zone droite, un formulaire avec des checkboxes correspondant aux différentes valeurs du genre (nature) de l'event. Selon les cases cochées , la page se recharge et ne liste que les évents dont le (ou les) genre(s) est (sont) coché(s).
    Je ne sais pas comment m'y prendre, et je sollicite votre aide pour m'indiquer le principe de fonctionnement, les étapes ou les grandes lignes. À moi de faire le reste en cherchant d'après vos indications.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE IF NOT EXISTS `events` (
      `id` int(4) NOT NULL AUTO_INCREMENT,
      `titreEvent` varchar(255) NOT NULL,
      `genreEvent` varchar(255) NOT NULL,
      `yearEvent` varchar(4) NOT NULL,
      `dateEvent` date NOT NULL,
      PRIMARY KEY (`id`)
    )
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <body>
    	<section id="leftside" style="width:640px;float:left;">
    		<?php
    		$sql = 'SELECT * FROM events WHER year="2015" ORDER BY dateEvent DESC';
    		$resultat = mysql_query($sql);
    		?>
    		<ul>
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    			?>
    				<li><?php echo $donnee['genreEvent']; ?><br />
    				</li><?php echo $donnee['titreEvent']; ?>
    				<hr>
    			<?php
    			}
    			?>
    		</ul>
     
     
    	</section>
    	<section id="rightside" style="width:330px;float:right;" >
    		<form id="trier" method="post" action="index.php" style="width:300px;">
    		<p>
    			<input type="checkbox" name="sort[]" id="tous" value="Tous" /><label>Tous</label><br />
    			<input type="checkbox" name="sort[]" id="salon" value="Salon" /><label>Salon</label><br />
    			<input type="checkbox" name="sort[]" id="expo" value="Exposition" /><label>Exposition</label><br />
    			<input type="checkbox" name="sort[]" id="foire" value="Foire" /><label>Foire</label><br />
    			<input type="checkbox" name="sort[]" id="jpo" value="Journées Portes Ouvertes" /><label>Journées Portes Ouvertes</label><br />
    			<input type="checkbox" name="sort[]" id="inaug" value="Inauguration" /><label>Inauguration</label><br />
    			<input type="checkbox" name="sort[]" id="conf" value="Conférence" /><label>Conférence</label><br />
    			<input type="checkbox" name="sort[]" id="debat" value="Débat" /><label>Débat</label><br />
    			<input type="checkbox" name="sort[]" id="congr" value="Congrès" /><label>Congrès</label><br />
    			<input type="checkbox" name="sort[]" id="semin" value="Séminaire" /><label>Séminaire</label><br />
    			<input type="checkbox" name="sort[]" id="forma" value="Formation" /><label>Formation</label><br />
    			<input type="checkbox" name="sort[]" id="jurid" value="Juridique" /><label>Juridique</label><br />
    			<input type="checkbox" name="sort[]" id="fisc" value="Fiscal" /><label>Fiscal</label><br />
    			<input type="checkbox" name="sort[]" id="autre" value="Autre" /><label>Autre</label><br />
     
    			<input type="submit" value="Filtrer"/>
    		</p>
    		</form>
    		<?php
    			$sorting = $_POST["sort"];
    			echo "<b>Vous avez choisi </b><br />";
    			for ($i=0; $i<count($sorting); $i++) {
    				echo $sorting[$i]."<br />";
    			}
    		?>
    	</section>
    </body>
    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il y a tellement peu à écrire du côté PHP que c'est difficile de t'aider sans te le faire.
    Tu ajoutes seulement dans ta requête les données cochées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql = 'SELECT * FROM events WHERE year=2015';
    if (!empty($_POST['sort'])) {
        $sql .= ' AND event_type IN (' . explode(',' array_map('intval', $_POST['sort'])) . ')';
    }
    $sql .= ' ORDER BY dateEvent DESC';
    $resultat = mysql_query($sql);
    Il faut par contre evidemment que
    - le type d’événement soit inscrit dans ta table (ici j'ai mis event_type par défaut)
    - les valeurs de tes cases à cocher correspondent aux valeurs de ta bdd ; idéalement tu as dans ta bdd une table référençant ces types et tes cases à cocher sont inscrites à partir de cette table.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Par défaut
    Je ne savais pas qu'on peut couper une requête sql par du php. Merci
    Mon champ est libellé "genreEvent" dans la table "events".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			$sql = 'SELECT * FROM events WHERE year="2015" ';
    			if (!empty($_POST['sort'])) {
    				$sql .= ' AND genreEvent IN ('.explode(', ' array_map('intval', $_POST['sort'])).')';
    			}
    			$sql .= ' ORDER BY dateEvent DESC';
    Votre code me retourne:
    Parse error: syntax error, unexpected T_STRING in C:\wamp\www\14ghostphpsql\agenda\events-list.php on line 48
    c'est à dire à ce niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' AND genreEvent IN ('.explode(', ' array_map('intval', $_POST['sort'])).')';
    N'y a-t-il pas qq part une erreur de concaténation? Excusez-moi.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Une requête SQL ce n'est rien de plus qu'une chaine de caractère, donc on en fait ce qu'on veut.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur web amateur
    Inscrit en
    Août 2012
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur web amateur
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 84
    Par défaut
    N'y a-t-til pas une erreur de concaténation à ce niveau de votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' AND genreEvent IN ('.explode(', ' array_map('intval', $_POST['sort'])).')';
    car ça me retourne : " Parse error: syntax error, unexpected T_STRING in C:\wamp\www\14ghostphpsql\agenda\events-list.php on line 48" ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Avec moi tout est possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql .= ' AND genreEvent IN ('.implode(', ',  array_map('intval', $_POST['sort'])).')';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/01/2010, 14h22
  2. Réponses: 2
    Dernier message: 30/11/2007, 17h54
  3. Afficher Une Liste Selon La Valeur D'une Cellule
    Par Kevin_18 dans le forum Excel
    Réponses: 10
    Dernier message: 02/07/2007, 19h22
  4. Réponses: 4
    Dernier message: 23/04/2007, 14h01
  5. Réponses: 5
    Dernier message: 28/08/2006, 18h11

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