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

  1. #21
    Membre du Club
    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
    Points : 43
    Points
    43
    Par défaut
    Si je reformule ma requête comme suit, au moins je récupère les éléments du tableau en chaine de caractères:
    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
     
    		<?php
    		$appendToSql = '';
    		$length = count($_POST['sort']);
    		for($i=0;$i<=$length-1;$i++){
    		$appendToSql .="'".$_POST['sort'][$i]."'";
    		 if($i!=$length-1){
    			 $appendToSql .= ',';
    		  }
    		}
    		$sql = 'SELECT * FROM events INNER JOIN eventgenre ON libelle.id_genre=event.id_genre WHERE 
    			event.id_genre IN ('.$appendToSql.') AND 
    		year_event="2015" ORDER BY dateEvent ASC';		
    		echo $sql;
     
    		$resultat = mysql_query($sql);
    		?>
    		<ul style="list-style:none;">
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    				?><li>
    					<?php echo $donnee['libelle']; ?><br />
    					<?php echo $donnee['titre_event']; ?>
    				</li><hr><?php
    			}
    			?>
    		</ul>
    Ainsi un echo Ssql donne si je coche"salon" et "exposition":

    SELECT * FROM events INNER JOIN eventgenre ON libelle.id_genre=event.id_genre WHERE event.id_genre IN ('Salon','Exposition') AND year_event="2015" ORDER BY dateEvent ASC

    Mais j'ai toujours le:
    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\dvlppz-sorting\index2.php on line 35

  2. #22
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est toujours au niveau du array_map qui ne récupère pas de string.
    C'est normal tes value sont censées contenir les id, pas les libellés.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #23
    Membre du Club
    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
    Points : 43
    Points
    43
    Par défaut
    @sabotage
    Votre technique d'assistance est redoutable. Vous donnez une piste, et pour un profane comme moi, je retourne mille fois la question sans pouvoir lui trouver la solution, malgré des efforts et le temps consacrés.
    Pourtant, j'ai resimplifié au max mon code et suivi vos indications.
    Une solution concrète de votre part basée sur mon code simplifié me serais très utile car il y a encore des réglages à faire.
    Sans rancune.

  4. #24
    Membre du Club
    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
    Points : 43
    Points
    43
    Par défaut
    J'ai mis les id_genre au lieu des libellés dans les values des checkboxes

    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
     
    	<section id="leftside" style="width:640px;float:left;">
    		<?php
    		$sql = 'SELECT * FROM events INNER JOIN eventgenre ON libelle.id_genre=event.id_genre WHERE ';
    		if (!empty($_POST['sort'])) {
    			$sql .= 'event.id_genre IN ('.implode(', ',  array_map('intval', $_POST['sort'])).') AND ';
    		}
    		$sql .= ' year_event="2015" ORDER BY dateEvent ASC';		
    		//echo $sql;
    		//var_dump(array_map('intval', $_POST['sort']));
    		$resultat = mysql_query($sql);
    		?>
    		<ul style="list-style:none;">
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    				?><li>
    					<?php echo $donnee['libelle']; ?><br />
    					<?php echo $donnee['titre_event']; ?>
    				</li><hr><?php
    			}
    			?>
    		</ul>
    	</section>
    	<section id="rightside" style="width:330px;float:right;" >
    		<form id="trier" method="post" action="index.php" style="width:300px;">
    			<input type="checkbox" name="sort[]" id="salon" value="1" /><label>Salon</label><br />
    			<input type="checkbox" name="sort[]" id="expo" value="2" /><label>Exposition</label><br />
    			<input type="checkbox" name="sort[]" id="foire" value="3" /><label>Foire</label><br />
    			<input type="submit" value="Filtrer"/>
    		</form>
    	</section>
    Nom : libelle.PNG
Affichages : 126
Taille : 13,4 Ko

  5. #25
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Debug la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $resultat = mysql_query($sql);
    echo mysql_error();
    Au passage, pourquoi tu persistes à mettre "2015" au lieu de 2015 tout nu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #26
    Membre du Club
    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
    Points : 43
    Points
    43
    Par défaut
    Bonjour,
    l'echo mysql_error() m'a permis de corriger des erreurs:

    ON libelle.id_genre=event.id_genre --> ON eventgenre.id_genre=events.id_genre
    $sql .= 'event.id_genre IN --> $sql .= 'events.id_genre IN

    Maintenant j'arrive à afficher ma liste d'évènements, mais si je coche une case, j'ai une erreur:
    Undefined variable: sort in C:\wamp\www\dvlppz-sorting\index.php on line (37,40,43)

    Pouvez-vous m'éclairer dessus? Merci
    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
    	<section id="leftside" style="width:640px;float:left;">
    		<?php
    		if(!isset($_POST['Filtrer'])){
    			$sql = 'SELECT * FROM events INNER JOIN eventgenre ON eventgenre.id_genre=events.id_genre WHERE year_event=2015 ORDER BY dateEvent ASC' ;      
    			$resultat = mysql_query($sql)or die(mysql_error());
    		}else{
    			if(!isset($_POST['sort'])){
    				$sql = 'SELECT * FROM events INNER JOIN eventgenre ON eventgenre.id_genre=events.id_genre WHERE year_event=2015 ORDER BY dateEvent ASC' ;       
    				$resultat = mysql_query($sql) or die(mysql_error());
    			}else{
    				$sort=$_POST['sort'];
     
    				$sql = 'SELECT * FROM events INNER JOIN eventgenre ON eventgenre.id_genre=events.id_genre WHERE ';
    				if (!empty($_POST['sort'])) {
    					$sql .= 'events.id_genre IN ('.implode(', ',  array_map('intval', $_POST['sort'])).') AND ';
    				}
    				$sql .= ' year_event=2015 ORDER BY dateEvent ASC' ;	
    				$resultat = mysql_query($sql) or die(mysql_error());
     
    			}
    		}
    		?>
    		<ul style="list-style:none;">
    			<?php
    			while ( $donnee = mysql_fetch_assoc($resultat) ) {
    				?><li>
    					<?php echo $donnee['libelle']; ?><br />
    					<?php echo $donnee['titre_event']; ?>
    				</li><hr><?php
    			}
    			?>
    		</ul>
    	</section>
    	<section id="rightside" style="width:330px;float:right;" >
    		<form id="trier" method="post" action="index.php" style="width:300px;">
    			<input type="checkbox" name="sort[]" id="salon" value="1" 
    				<?php if($_POST && in_array('1',$sort)){ echo "checked";} ?>
    			/><label>Salon</label><br />
    			<input type="checkbox" name="sort[]" id="expo" value="2" 
    				<?php if($_POST && in_array('2',$sort)){ echo "checked";} ?>
    			/><label>Exposition</label><br />
    			<input type="checkbox" name="sort[]" id="foire" value="3" 
    				<?php if($_POST && in_array('3',$sort)){ echo "checked";} ?>
    			/><label>Foire</label><br />
    			<input type="submit" value="Filtrer"/>
    		</form>
    	</section>

  7. #27
    Membre du Club
    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
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    j'ai enfin trouvé la solution:
    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
     
    <?php
    if(!isset($_POST['sort']) || !isset($_POST['Filtrer'])){
    	$sql = 'SELECT * FROM events INNER JOIN eventgenre ON 
    	eventgenre.id_genre=events.id_genre WHERE year_event=2015 
    	ORDER BY dateEvent ASC' ;      
    	$resultat = mysql_query($sql)or die(mysql_error());
    }
    if(isset($_POST['sort'])){
    	$sql = 'SELECT * FROM events INNER JOIN eventgenre ON 
    	eventgenre.id_genre=events.id_genre WHERE ';
    	if (!empty($_POST['sort'])) {
    		$sql .= 'events.id_genre IN 
    		('.implode(', ',  array_map('intval', $_POST['sort'])).') AND ';
    	}
    	$sql .= ' year_event=2015 ORDER BY dateEvent ASC' ;	
    	$resultat = mysql_query($sql) or die(mysql_error());
    	$sort=$_POST['sort'];
    	if(isset($_POST['Filtrer'])){
    		$sort=$_POST['sort'];
    	}
    }
    ?>
    Comme ça , j'arrive presque à mon but. Il me reste le cas "sélectionner tout/désélectionner tout", je pense y arriver avec du JavaScript.
    Je ne mets pas encore le sujet en résolu afin de poster ultérieurement un code complet fonctionnel si jamais quelqu'un en aura besoin. Entretemps, s'il y a des remarques ou corrections, elles me seront très utiles.
    Merci sabotage pour votre conseil tout au long de cette odyssée, merci ABCIWEB.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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