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

Langage PHP Discussion :

Filtre ou Tri sur données


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut Filtre ou Tri sur données
    Bonjour à tous,

    Je débute avec les filtres et tris. Je pense que mon erreur doit être très grossière et je m'en excuse par avance. Ci-dessous mon problème:

    Sur un listing de candidats issu de ma BDD je souhaite proposer un tri via un select sur plusieurs valeurs.
    Pour ce faire j'utilise le code suivant et ça fonctionne très bien :
    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
    <?php
    require "connect.php";
    ?>
     
    <form method="post" action="listing.php" name="formulaireTri">
     
    	<select name="liste_choix">
     
    		<option value="">--- Trier ---</option>
    		<option value="type">par Type</option>
    		<option value="nom">par Nom</option>
    		<option value="pole">par Pôle</option>
     
    	</select>
     
    	<input type="submit" value="OK" />
     
    </form>
     
     
    <?php
    	if (isset($_POST['liste_choix']) AND ($_POST['liste_choix']=="type"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY type');
    	}
    	elseif (isset($_POST['liste_choix']) AND ($_POST['liste_choix']=="nom"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY nom');
    	}
    	elseif (isset($_POST['liste_choix']) AND ($_POST['liste_choix']=="pole"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY pole');
    	}
    	else
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY id');
    	}
    ?>
    Mais je souhaite aussi proposer un filtre via un select sur plusieurs valeurs.
    Pour avoir le tri ET le filtre sur ma page j'utilise le code qui suit. Mais maintenant le tri ne fonctionne plus, seul le filtre fonctionne.
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
    require "connect.php";
    ?>
     
    <form method="post" action="listing.php" name="formulaireTri">
     
    	<select name="liste_choix">
     
    		<option value="">--- Trier ---</option>
    		<option value="type">par Type</option>
    		<option value="nom">par Nom</option>
    		<option value="pole">par Pôle</option>
     
    	</select>
     
    	<input type="submit" value="OK" />
     
    </form>
     
     
    <?php
    	if (isset($_POST['liste_choix']) AND ($_POST['liste_choix']=="type"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY type');
    	}
    	elseif (isset($_POST['liste_choix']) AND ($_POST['liste_choix']=="nom"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY nom');
    	}
    	elseif (isset($_POST['liste_choix']) AND ($_POST['liste_choix']=="pole"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY pole');
    	}
    	else
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY id');
    	}
    ?>
     
    <form method="post" action="listing.php" name="formulaireFiltre">
     
    	<select name="liste_filtre">
     
    		<option value="">--- Filtrer par type ---</option>
    		<option value="orga">ORGA</option>
    		<option value="candi">CANDI</option>
    		<option value="jury">JURY</option>
     
    	</select>
     
    	<input type="submit" value="OK" />
     
    </form>
     
     
    <?php
    	if (isset($_POST['liste_filtre']) AND ($_POST['liste_filtre']=="orga"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades WHERE type =\'ORGA\'');
    	}
    	elseif (isset($_POST['liste_filtre']) AND ($_POST['liste_filtre']=="candi"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades WHERE type =\'CANDI\'');
    	}
    	elseif (isset($_POST['liste_filtre']) AND ($_POST['liste_filtre']=="jury"))
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades WHERE type =\'JURY\'');
    	}
    	else
    	{
    		$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY id');
    	}
    ?>
    Je sens bien que le code est bancal, 2 form, 2 submit... Mais je ne sais pas quoi modifier... Comment procéder pour avoir mes 2 select de tri et filtre ?
    Merci par avance pour votre aide.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ouille

    On ne repete pas du code identique pour chaque cas, chaque valeur :
    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
    <form method="post" action="listing.php" name="formulaireTri">
     
    	<select name="liste_choix">
     
    		<option value="">--- Trier ---</option>
    		<option value="type">par Type</option>
    		<option value="nom">par Nom</option>
    		<option value="pole">par Pôle</option>
     
    	</select>
     
    	<select name="liste_filtre">
     
    		<option value="">--- Filtrer par type ---</option>
    		<option value="orga">ORGA</option>
    		<option value="candi">CANDI</option>
    		<option value="jury">JURY</option>
     
    	</select>
     
    	<input type="submit" value="OK" />
     
    </form>
     
    <?php
    require "connect.php";
    $sql = 'SELECT * FROM olympiades';
    $param = array();
     
    // ajoute le filtre dans la requête
    if (isset($_POST['liste_filtre']))	{
    	$sql .= ' WHERE type = ? ';
    	$param = array($_POST['liste_filtre']);
    }
     
    // ajoute l'ordre dans la requête
    $colonnes_filtre = array('type', 'nom', 'pole');
    if (isset($_POST['liste_choix']) && in_array($_POST['liste_choix'], $colonnes_filtre)) 	{
    	$sql .= ' ORDER BY ' . $_POST['liste_choix'];
    }
     
    $reponse = $bdd->prepare($sql);
    $reponse->execute($param);
     
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    oui ouille comme tu dis sabotage
    Merci pour ta réponse, en effet ça a une meilleure gueule...

    Maintenant ce doit être la suite de mon code qui n'est pas réglo car lorsque je me sers de ton code:

    - J'arrive sur ma page listing j'ai bien tous mes enregistrements :

    Pièce jointe 200536
    - Je me sers du select tri je n'ai plus aucun enregistrement :

    Pièce jointe 200537
    - Je me sers du select filtre j'ai bien mes enregistrements filtrés :

    Pièce jointe 200538
    - Si je reclique sur le bouton OK de nouveau je n'ai plus aucun enregistrement


    Ci-dessous la suite de mon code qui récupère le résultat des requêtes dans mon tableau listing:
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    <form method="post" action="listing.php" name="formulaireTri">
     
    	<select name="liste_choix">
     
    		<option value="">--- Trier ---</option>
    		<option value="type">par Type</option>
    		<option value="nom">par Nom</option>
    		<option value="pole">par Pôle</option>
     
    	</select>
     
    	<select name="liste_filtre">
     
    		<option value="">--- Filtrer par type ---</option>
    		<option value="orga">ORGA</option>
    		<option value="candi">CANDI</option>
    		<option value="jury">JURY</option>
     
    	</select>
     
    	<input type="submit" value="OK" />
     
    </form>
     
    <?php
    require "connect.php";
    $sql = 'SELECT * FROM olympiades';
    $param = array();
     
    // ajoute le filtre dans la requête
    if (isset($_POST['liste_filtre']))	{
    	$sql .= ' WHERE type = ? ';
    	$param = array($_POST['liste_filtre']);
    }
     
    // ajoute l'ordre dans la requête
    $colonnes_filtre = array('type', 'nom', 'pole');
    if (isset($_POST['liste_choix']) && in_array($_POST['liste_choix'], $colonnes_filtre)) 	{
    	$sql .= ' ORDER BY ' . $_POST['liste_choix'];
    }
     
    $reponse = $bdd->prepare($sql);
    $reponse->execute($param);
     
    ?>
     
     
     
    <table>
    	<tr id="titre1">
    		<td>TYPE</td>
    		<td colspan="6">IDENTITE</td>
    		<td colspan="4">ETAT</td>
    		<td colspan="2">HOTEL</td>
    		<td colspan="3">CHAMBRE</td>
    		<td>GENRE</td>
    		<td colspan="6">NUITEES</td>
    		<td colspan="2">PARTAGE</td>
    		<td>COMMENTAIRES</td>
    	</tr>
     
    	<tr id="titre2">
    		<td></td>
    		<td>N°</td>
    		<td>Nom</td>
    		<td>Prénom</td>
    		<td>Pôle</td>
    		<td>Métier</td>
    		<td>Divers</td>
    		<td>Inscrit le</td>
    		<td>Modifié le</td>
    		<td>Annulé le</td>
    		<td>Remplacé par</td>
    		<td>Hôtel</td>
    		<td>Catégorie</td>
    		<td>Type</td>
    		<td>N° fictif</td>
    		<td>N° réel</td>
    		<td></td>
    		<td>lu 21</td>
    		<td>ma 22</td>
    		<td>me 23</td>
    		<td>je 24</td>
    		<td>ve 25</td>
    		<td>sa 26</td>
    		<td>Colocataire twin</td>
    		<td>Colocataire triple</td>
    		<td></td>
    	</tr>
     
    <?php
    	$i = 0;
    	while ($donnees = $reponse->fetch())
    	{
    		?>
    			<tr style="background-color:<?php echo (++$i%2==0 ? "#C0C0C0" : "#FFFFFF"); ?>">
    				<td> <?php echo $donnees['type']; ?> </td> 
    				<td class="cellCentree"> <?php echo $donnees['id']; ?> </td>
    				<td <?php if($donnees['annule'] == "on"){?>style="background-color:red;"<?php } ?>> <?php echo $donnees['nom']; ?> </td>
    				<td <?php if($donnees['annule'] == "on"){?>style="background-color:red;"<?php } ?>> <?php echo $donnees['prenom']; ?> </td>
    				<td> <?php echo $donnees['pole']; ?> </td>
    				<td> <?php echo $donnees['metier']; ?> </td>
    				<td> <?php echo $donnees['divers']; ?> </td>
    				<td> <?php echo $donnees['dateInscrit']; ?> </td>
    				<td> <?php echo $donnees['dateModifie']; ?> </td>
    				<td <?php if($donnees['annule'] == "on"){?>style="background-color:red;"<?php } ?>> <?php echo $donnees['dateAnnule']; ?> </td>
    				<td> <?php echo $donnees['remplace']; ?> </td>
    				<td> <?php echo $donnees['nomHotel']; ?> </td>
    				<td></td>
    				<td> <?php echo $donnees['typeChambre']; ?> </td>
    				<td class="cellCentree"> <?php echo $donnees['numChambreFictif']; ?> </td>
    				<td class="cellCentree"> <?php echo $donnees['numChambreReel']; ?> </td>
    				<td class="cellCentree"> <?php echo $donnees['genre']; ?> </td>
    				<td class="cellCentree"> <?php if($donnees['21mars'] == "on"){echo "1";} else {echo $donnees['21mars'];} ?> </td>
    				<td class="cellCentree"> <?php if($donnees['22mars'] == "on"){echo "1";} else {echo $donnees['22mars'];} ?> </td>
    				<td class="cellCentree"> <?php if($donnees['23mars'] == "on"){echo "1";} else {echo $donnees['23mars'];} ?> </td>
    				<td class="cellCentree"> <?php if($donnees['24mars'] == "on"){echo "1";} else {echo $donnees['24mars'];} ?> </td>
    				<td class="cellCentree"> <?php if($donnees['25mars'] == "on"){echo "1";} else {echo $donnees['25mars'];} ?> </td>
    				<td class="cellCentree"> <?php if($donnees['26mars'] == "on"){echo "1";} else {echo $donnees['26mars'];} ?> </td>
    				<td> <?php echo $donnees['colocataireTwin']; ?> </td>
    				<td> <?php echo $donnees['colocataireTriple']; ?> </td>
    				<td> <?php echo $donnees['commentaires']; ?> </td>
    				<td><a href="inscription.php?idinscrit=<?php echo $donnees['id']; ?>">Modifier</a></td>
    			</tr>
    		<?php
    	}
    	$reponse->closeCursor();
    	?>	
    	</table>
    Merci pour ton aide sabotage. La route de l'apprentissage est longue...

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est à cause de la valeur vide qui est par défaut.
    Remplace les deux tests isset() par !empty()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    sabotage you're a star !
    Merci merci

    Dernière question pour toi si tu as le temps de m'y répondre : y a-t-il un moyen d'identifier qu'un filtre est appliqué sur mon listing de candidats ? Je vais avoir près de 700 enregistrements et si je n'ai pas un repère visuel difficile de savoir si la liste est filtrée ou pas...
    Je cherche un truc du genre Excel où quand tu filtres une colonne tu as une petite icône filtre qui apparaît sur l'en-tête.
    Ici ça pourrait être le select qui change de couleur par ex... Si tu as une idée ?

    Merci @ toi et Bonne journée

  6. #6
    Membre averti
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Points : 320
    Points
    320
    Par défaut
    Bonjour moi j’essaierai de présélectionner les champs.
    Par exemple si tu trie par type alors ton premier select est déjà sur la valeur "par Type"
    Idem pour l'autre selecte.
    voir ici pour le selected.
    pour le code (c'est pas jolie jolie mais fait en vitesse)
    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
    <?php 
    $selected = (isset($_POST['liste_choix']) && !empty($_POST['liste_choix']))?$_POST['liste_choix']:"Trier";
    ?><!--
    ...
    -->
    <html><body>
    <form action ="" method="POST">
    	<select name="liste_choix">
     
    		<option value="" <?Php if($selected == "Trier"){echo "selected";} ?> >--- Trier ---</option>
    		<option value="type" <?Php if($selected == "type"){echo "selected";} ?> >par Type</option>
    		<option value="nom" <?Php if($selected == "nom"){echo "selected";} ?> >par Nom</option>
    		<option value="pole" <?Php if($selected == "pole"){echo "selected";} ?> >par Pôle</option>
     
    	</select>
    	<input type="submit"/>
    	</form>
    	</body></html>
    Pourquoi faire simple quand on peut faire compliqué.

  7. #7
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Hello magicshark,

    Merci pour ta réponse
    Oui c'est une idée ça, je vais la tester je te tiens au courant dans le WE.

    Merci !

  8. #8
    Membre averti
    Avatar de magicshark
    Homme Profil pro
    Dans une SS2I donc pas que JAVA
    Inscrit en
    Octobre 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dans une SS2I donc pas que JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 133
    Points : 320
    Points
    320
    Par défaut
    Euh désolé je t'ai mis une ternaire en étant sûre d'en avoir croisé une dans ton code mais je vois que non donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $selected = (isset($_POST['liste_choix']) && !empty($_POST['liste_choix']))?$_POST['liste_choix']:"Trier";
    correspond à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST['liste_choix']) && !empty($_POST['liste_choix'])){
    $selected = $_POST['liste_choix'];
    } else {
    $selected ="Trier";
    }
    Pourquoi faire simple quand on peut faire compliqué.

  9. #9
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Œil de lynx magicshark !
    Merci en tous cas pour ce nouveau message.
    Je regarde ce WE

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    @magicshark,
    le empty() englobe le isset() donc utiliser les deux est redondant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $selected = (isset($_POST['liste_choix']) && !empty($_POST['liste_choix']))?$_POST['liste_choix']:"Trier";
    est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $selected = (empty($_POST['liste_choix'])) ? 'Trier' : $_POST['liste_choix'];

  11. #11
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Hello magicshark, rawsrc,

    Merci pour vos posts.
    Solution parfaite pour mes filtres et tris, ça fonctionne nickel !
    Et en plus maintenant mes filtres et mes tris se cumulent alors qu'avant si je choisissais l'un ça annulait l'autre et vice-versa.

    et bonne journée

  12. #12
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Je reprends la discussion car j'ai voulu ajouter un nouveau select de filtre à l'existant, et les 2 ne font pas bon ménage.
    Voilà ce que j'ai écrit :

    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php 
    $selectedTri = (empty($_POST['liste_choix_tri'])) ? 'Trier' : $_POST['liste_choix_tri'];
    $selectedFiltreType = (empty($_POST['liste_filtre_type'])) ? 'Filtrer par type' : $_POST['liste_filtre_type'];
    $selectedFiltreHotel = (empty($_POST['liste_filtre_hotel'])) ? 'Filtrer par hôtel' : $_POST['liste_filtre_hotel'];
    ?>
     
    <form id="triFiltre" method="post" action="index.php" name="formulaireTri">
     
    	<select name="liste_choix_tri">
     
    		<option value="" <?Php if($selectedTri == "Trier"){echo "selected";} ?> >--- Trier ---</option>
    		<option value="type" <?Php if($selectedTri == "type"){echo "selected";} ?>>par Type</option>
    		<option value="nom" <?Php if($selectedTri == "nom"){echo "selected";} ?>>par Nom</option>
    		<option value="pole" <?Php if($selectedTri == "pole"){echo "selected";} ?>>par Pôle</option>
     
    	</select>
     
    	<select name="liste_filtre_type">
     
    		<option value="" <?Php if($selectedFiltreType == "Filtre par type"){echo "selected";} ?>>--- Filtrer par type ---</option>
    		<option value="orga" <?Php if($selectedFiltreType == "orga"){echo "selected";} ?> >ORGA</option>
    		<option value="candi" <?Php if($selectedFiltreType == "candi"){echo "selected";} ?>>CANDI</option>
    		<option value="jury" <?Php if($selectedFiltreType == "jury"){echo "selected";} ?>>JURY</option>
     
    	</select>
     
    	<select name="liste_filtre_hotel">
     
    		<option value="" <?Php if($selectedFiltreHotel == "Filtre par hôtel"){echo "selected";} ?>>--- Filtrer par Hôtel ---</option>
    		<option value="Hôtel 1" <?Php if($selectedFiltreHotel == "Hôtel 1"){echo "selected";} ?>>Hôtel 1</option>
    		<option value="Hôtel 2" <?Php if($selectedFiltreHotel == "Hôtel 2"){echo "selected";} ?>>Hôtel 2</option>
    		<option value="Hôtel 3" <?Php if($selectedFiltreHotel == "Hôtel 3"){echo "selected";} ?>>Hôtel 3</option>
     
    	</select>
     
    	<input type="submit" value="OK" />
     
    </form>
     
    <?php
    $sql = 'SELECT * FROM olympiades';
    $param = array();
     
    // ajoute le filtre dans la requête
    if (!empty($_POST['liste_filtre_type']))	{
    	$sql .= ' WHERE type = ? ';
    	$param = array($_POST['liste_filtre_type']);
    }
     
    if(!empty($_POST['liste_filtre_hotel']))	{
    	$sql .= ' WHERE nomHotel = ? ';
    	$param = array($_POST['liste_filtre_hotel']);
    }
     
    // ajoute l'ordre dans la requête
    $colonnes_filtre = array('type', 'nom', 'pole');
    if (!empty($_POST['liste_choix_tri']) && in_array($_POST['liste_choix_tri'], $colonnes_filtre)) 	{
    	$sql .= ' ORDER BY ' . $_POST['liste_choix_tri'];
    }
     
    $reponse = $bdd->prepare($sql);
    $reponse->execute($param);
     
    ?>
    Je crois que comme dirait sabotage c'est un coup de "On ne repete pas du code identique pour chaque cas" (mes requêtes SQL pour mes 2 filtres en l'occurrence...)
    Mais je ne sais pas comment arranger ce code.

    Merci encore si vous pouvez m'aider

  13. #13
    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
    Enfin là ce n'est pas le problème de faire un code PHP simple, c'est que tu te retrouves avec deux fois le WHERE dans la requête.
    Un possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // ajoute le filtre dans la requête
    if (!empty($_POST['liste_filtre_type']))	{
    	$where[] = ' type = ? ';
    	$param[] = array($_POST['liste_filtre_type']);
    }
     
    if(!empty($_POST['liste_filtre_hotel']))	{
    	$where[] = ' nomHotel = ? ';
    	$param[] = array($_POST['liste_filtre_hotel']);
    }
     
    $sql .= implode($where, ' AND ');
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    En plus de la réponse du sieur sabotage, tu peux réduire la redondance du code :
    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
    $selected = function($k, $v) { return ($k === $v) ? ' selected' : ''; };
    ?>
     
    <form id="triFiltre" method="post" action="index.php" name="formulaireTri">
     
        <select name="liste_choix_tri">
     
            <option value=""<?= $selected($selectedTri, 'Trier') ?>>--- Trier ---</option>
            <option value="type"<?= $selected($selectedTri, 'type') ?>>par Type</option>
            <option value="nom"<?= $selected($selectedTri, 'nom') ?>>par Nom</option>
            <option value="pole"<?= $selected($selectedTri, 'pole') ?>>par Pôle</option>
     
        </select>
     
        <select name="liste_filtre_type">
     
            <option value=""<?= $selected($selectedFiltreType, 'Filtre par type') ?>>--- Filtrer par type ---</option>
            <option value="orga"<?= $selected($selectedFiltreType, 'orga') ?>>ORGA</option>
            <option value="candi"<?= $selected($selectedFiltreType, 'candi') ?>>CANDI</option>
            <option value="jury"<?= $selected($selectedFiltreType, 'jury') ?>>JURY</option>
     
        </select>
     
        <select name="liste_filtre_hotel">
     
            <option value=""<?= $selected($selectedFiltreHotel, 'Filtre par hôtel') ?>>--- Filtrer par Hôtel ---</option>
            <option value="Hôtel 1"<?= $selected($selectedFiltreHotel, 'Hôtel 1') ?>>Hôtel 1</option>
            <option value="Hôtel 2"<?= $selected($selectedFiltreHotel, 'Hôtel 2') ?>>Hôtel 2</option>
            <option value="Hôtel 3"<?= $selected($selectedFiltreHotel, 'Hôtel 3') ?>>Hôtel 3</option>
     
        </select>
     
        <input type="submit" value="OK" />
     
    </form>

  15. #15
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    OK merci messieurs !

    Comment je dois définir la variable $where ?

  16. #16
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bah le post de sabotage juste au dessus du mien t'as déjà tout filé, c'est du tout cuit

  17. #17
    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
    N'oublie pas de mettre par défaut au début du code
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Oui c'est ça que je cherchais sabotage, merci.

    Mais maintenant j'ai la notice suivante lorsque j'utilise l'un ou l'autre select de filtre (soyez indulgents hein je suis en phase d'apprentissage et j'essaye de comprendre) :

    Notice: Array to string conversion sur la ligne 27
    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
    <?php
    $sql = 'SELECT * FROM olympiades';
    $param = array();
    $where = array();
     
    // ajoute le filtre dans la requête
    if (!empty($_POST['liste_filtre_type']))	{
    	$where[] = ' type = ? ';
    	$param[] = array($_POST['liste_filtre_type']);
    }
     
    if(!empty($_POST['liste_filtre_hotel']))	{
    	$where[] = ' nomHotel = ? ';
    	$param[] = array($_POST['liste_filtre_hotel']);
    }
     
    $sql .= implode($where, ' AND ');
     
     
    // ajoute l'ordre dans la requête
    $colonnes_filtre = array('type', 'nom', 'pole');
    if (!empty($_POST['liste_choix_tri']) && in_array($_POST['liste_choix_tri'], $colonnes_filtre)) 	{
    	$sql .= ' ORDER BY ' . $_POST['liste_choix_tri'];
    }
     
    $reponse = $bdd->prepare($sql);
    $reponse->execute($param);
     
    ?>

  19. #19
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    il y a une petite erreur dans ton code ici (d'où le notice) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $param[] = array($_POST['liste_filtre_type']);
    $param[] = array($_POST['liste_filtre_hotel']);
    cela devrait être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $param[] = $_POST['liste_filtre_type'];
    $param[] = $_POST['liste_filtre_hotel'];

  20. #20
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Au taquet rawsrc !
    Je vais regarder ça merci !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Filtre et tri sur Excel via vba
    Par benol3 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/06/2014, 09h33
  2. Filtre et tri sur l'en-tête d'une colonne d'un tableau
    Par davidtse dans le forum GWT et Vaadin
    Réponses: 6
    Dernier message: 25/11/2010, 10h20
  3. Réponses: 6
    Dernier message: 12/07/2010, 16h38
  4. Filtre et tri sur 2 tables => Utilisation d'une vue ?
    Par gmic7 dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/04/2010, 16h28
  5. Filtre et tri sur variable ?
    Par Sylvie.B dans le forum Débuter
    Réponses: 1
    Dernier message: 28/07/2009, 16h45

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