Page 1 sur 1

Affiner le résultat d'une requête SQL selon checkbox sélectionné

Posté : 01 févr. 2016, 00:29
par dzavatar
Bonsoir ou bonjour à tous,
je viens vers vous car je sèche sur un problème qui je penses dois être pour certain plutôt simple.

J'ai un site sur lequel des gens peuvent s'inscrire pour participer à divers projet.
Dans mon administration j'affiche la liste des personnes inscrites. jusque la rien de bien compliqué.

L'idée est la suivante :
Dans un menu qui se trouve sur mon panneau de gauche j'y ai placé quelques checkbox pour affiner l'affichage du résultat qui se trouve à droite.

Code : Tout sélectionner

<div> <form id="form1" name="form1" method="post" action=""> <label> <input type="radio" name="Genre" value="bouton radio" id="Genre_0" checked/>Tout </label> <label> <input type="radio" name="Genre" value="bouton radio" id="Genre_1" />Homme </label> <label> <input type="radio" name="Genre" value="bouton radio" id="Genre_2" />Femme </label> <br/> <br/> <label>Styles<br/> <br/> <input type="checkbox" name="style[]" value="Portrait" id="style_0" />Portrait </label> <br/> <label> <input type="checkbox" name="style[]" value="prèt à porter" id="style_1" />Prêt à porter </label> <br/> <label> <input type="checkbox" name="style[]" value="Mode" id="style_2" />Mode </label> <br/> <br/> <label>Lieux<br/> <br/> <input type="checkbox" name="lieu[]" value="Studio" id="lieu_0" />Studio </label> <br/> <label> <input type="checkbox" name="lieu[]" value="Interieur" id="lieu_1" />Intérieur </label> <br/> <label> <input type="checkbox" name="lieu[]" value="Exterieur" id="lieu_2" />Extérieur </label> </form> </div>
Je n'y ai pas placé de bouton d'envois car j'aimerai tout simplement que cela se fasse en temps réel quand je fais une sélection.

Voici la page de résultat :

Code : Tout sélectionner

<?php $sql="SELECT * FROM fiche"; $req=mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); echo'<table border="0" id="modele" with="100%">'; while($data=mysql_fetch_assoc($req)){ echo' <tr> <td><img class="mod_img" src="../img_site/fiche/'.$data['photo1'].'"><img class="mod_img" src="../img_site/fiche/'.$data['photo2'].'"><img class="mod_img" src="../img_site/fiche/'.$data['photo3'].'"></td> <td>&nbsp;&nbsp;&nbsp;'.$data['prenom'].'&nbsp;&nbsp;&nbsp;</td> <td>&nbsp;'.$data['age'].'&nbsp;&nbsp;&nbsp;</td> <td>&nbsp;'.$data['ville'].'&nbsp;&nbsp;&nbsp;</td> <td>'; echo implode('<img src="../img_site/check.png"></br>', explode('|', $data['style'])).'</td> <td>'; echo implode('<img src="../img_site/check.png"></br>', explode('|', $data['lieu'])).'</td> <td>voir la fiche</td> <td>Contacter</td> </tr> '; } echo'</table>'; ?>
Si certain d'entre vous pouvais prendre le temps de m'éclaircir sur la marche à suivre , je vous en serais bien reconnaissant.
Merci d'avance.

Re: Affiner le résultat d'une requête SQL selon checkbox sélectionné

Posté : 01 févr. 2016, 00:38
par Ascla
Bonsoir,
Pour t'éclaircir la situation, il faut tout d'abord savoir que ta requête SQL s'effectue côté serveur, c'est à dire qu'elle va s'effectuer pendant le chargement de la page.
Il y a alors 2 solutions pour affiner tes recherches.

La première consiste à placer des restrictions de type CLAUSE (utilisation du WHERE ...). Le soucis de cette solution, c'est qu'il faudra recharger ta page à chaque fois. Pour éviter d'actualiser la page à chaque fois, tu peux néanmoins utiliser les requêtes Ajax.

La deuxième solution serait d'afficher toutes les données, puis d'effectuer le système de recherche entièrement avec Javascript. Cette solution ne serait pas du tout la bienvenue si tu venais à avoir beaucoup de données.

Si tu souhaites plus d'informations, n'hésite pas.

Re: Affiner le résultat d'une requête SQL selon checkbox sélectionné

Posté : 01 févr. 2016, 00:42
par or 1
$sql="SELECT * FROM fiche where 1";
si genre alors rajouter un " and genre=quelquechose" à $sql
idem pour style et lieu

faire un print_r($_POST); pour savoir sous quelle forme sont les données du formulaire dans le script php quand il y a 0, 1 ou plusieurs cases cochées.

Re: Affiner le résultat d'une requête SQL selon checkbox sélectionné

Posté : 01 févr. 2016, 00:58
par dzavatar
Merci pour vos réponses rapide :)
Et quelque part je craignais l'une d'elle , la construction de la requête en Ajax ou la j'avoues être complètement au niveau 0 ...
J'ai testé la création de la requête avec un "submit & $_POST" ou la ben tout simplement je faisait une batterie de test à savoir si pour le genre c'etait 0 (tout) ,1 (homme) ou 2 (femme) et ainsi de suite , mais je trouvais cela moins intéressant.

je vois souvent sur les sites de vente le système ou a chaque choix le resultat s'affine directement. Je prends en exemple l'achat d'un écran ou il y a le choix de la marque de la taille et ainsi de suite.
J'imagine que cela doit fonctionner avec un onclick sur les checkbox qui va relancer la requête et en retourner le résultat ?

Je vais tenter de chercher la création avec Ajax, mais je suis preneur de toute infos , piste ou autre si jamais vous auriez cela en stock :)

Re: Affiner le résultat d'une requête SQL selon checkbox sélectionné

Posté : 01 févr. 2016, 13:48
par Ascla
Le onclick n'est sans doutes pas le plus idéal. Il faudrait je pense utiliser le onchange.
La première étape est de créer une simple page php qui réceptionne par une méthode POST une condition et qui l'intègre directement dans la requête SQL. Enfin, il te faudra ensuite renvoyer tout le résultat obtenu par un simple écho.

Du côté de ta page principale, la requête Ajax va prélever l'écho renvoyé puis l'afficher de la façon désirée.

Re: Affiner le résultat d'une requête SQL selon checkbox sélectionné

Posté : 01 févr. 2016, 14:48
par dzavatar
Après pas mal d'heure de recherche cette nuit sur le sujet et mon incompréhension totale des résultats et vu que la nuit porte un peu conseil. J'ai effectué quelque modif sur mes attente de résultat.

Dans un premier temps , j'ai changé les checkbox en radio car au final il me faut : 1 genre , 1 lieux et un style, ou ... une des conditions voir 2 et j'envois pour l'instant avec un bouton submit.

sur la page du résultat qui au départ affiche la totalité. Je teste dans un premier temps l’existence des différent $_POST que je colle dans des variables .

Code : Tout sélectionner

if(!empty($_POST['Genre']) && $_POST['Genre']==1){ $Genre='Homme'; }elseif (!empty($_POST['Genre']) && $_POST['Genre']==2){ $Genre='Femme'; }; if(!empty($_POST['lieu'])){ $lieu=$_POST['lieu']; echo $lieu; }; if(!empty($_POST['style'])){ $style=$_POST['style']; echo $style; };
j'ai affiché la variable de lieu et style ici juste pour voir si elle passait correctement.

Ensuite viens la création de la requête ou j'ai en premier le cas ou rien n'est choisis et du coup il m'affiche tout sinon (ici juste avec le genre ) il n'affiche que homme ou femme. Je bloque déjà sur la création de celle-ci en y incluant la ou les variables restante si elles existent.

Code : Tout sélectionner

if(empty($_POST['Genre']) || $_POST['Genre']==0 && empty($_POST['lieu']) && empty($_POST['style'])){ $sql="SELECT * FROM fiche"; }else{ $sql="SELECT * FROM fiche WHERE genre='".$Genre."'"; }
et ensuite j’exécute la requête et son affichage :

Code : Tout sélectionner

$req=mysql_query($sql) or die ('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); echo'<table border="0" id="modele">'; while($data=mysql_fetch_assoc($req)){ echo' <tr> <td><img class="mod_img" src="../img_site/fiche/'.$data['photo1'].'"><img class="mod_img" src="../img_site/fiche/'.$data['photo2'].'"><img class="mod_img" src="../img_site/fiche/'.$data['photo3'].'"></td> <td>'.$data['prenom'].'</td> <td>'.$data['age'].'</td> <td>'.$data['ville'].'</td> <td>'; echo implode('<img src="../img_site/check.png"></br>', explode('|', $data['style'])).'</td> <td>'; echo implode('<img src="../img_site/check.png"></br>', explode('|', $data['lieu'])); echo'</td> <td><a href="?page=voir_fiche&id='.$data['id'].'">voir</a></td> <td>contacter</td> </tr> <tr> <td colspan="8">&nbsp;</td> </tr> '; } echo'</table>';

Peu etre que déjà à se niveau je pars sur une mauvaise façon de créer la requête qui m'embrouille et me complique les choses ?