Problème de filtres de recherche !
Posté : 16 sept. 2015, 16:55
Bonjour,
Je suis nouveau en PHP je me suis lancé dedans seul, après une formation sur le net, il y à environ 1 mois. Je me suis dit "rien de mieux que de faire un petit site pour prendre en main le langage" et j'ai donc décidé de faire un petit site de jeux vidéo.
Je bloque actuellement sur une page qui affiche les 50 derniers jeux vidéo, pour donner un coté fun je veux permettre a l'utilisateur de pouvoir utiliser des filtres qui changent les jeux en fonction de critères sélectionnés comme le type de jeu, le pegi, la console etc etc....
Et la ou j'ai un problème c'est que je dois sélectionner chaque critère pour afficher un jeu, si par exemple je veux afficher les FPS je dois par exemple sélectionner le PEGI pour les afficher... les champs de sélection sont du coup dépendant les un des autres et j'aimerai qu'on ne soit pas obligé de tout sélectionner (si on veut on peut mais ce n'est pas obligatoire)
Concrètement voila quelques screen
Je travail que pour l'instant avec le TYPE et PEGI, j'ai laissé console et note de coté
Quand j'arrive sur ma page et qu'aucun champs n'est sélectionné j'ai ceci:

Si je selectionne les FPS (ils sont tous en PEGI 18 dans la BDD) avec le champs PEGI 18 j'ai ceci

En revanche si je selectionne uniquement les FPS sans le PEGI j'ai ce message d'erreur
Notice: Undefined index: typepegi in /Applications/MAMP/SITE/gameadvise/gamelist.php on line 54
Je comprend que la variable $typepegi n'est pas défini mais c'est normal puisque je ne l'utilise pas et je ne veux pas l'utiliser... alors si vous savez comment faire pour que je puisse aussi filtrer avec une valeur unique ce serait super ! Pourriez vous m'aider ? Par avance merci
Voici mon code
Je suis nouveau en PHP je me suis lancé dedans seul, après une formation sur le net, il y à environ 1 mois. Je me suis dit "rien de mieux que de faire un petit site pour prendre en main le langage" et j'ai donc décidé de faire un petit site de jeux vidéo.
Je bloque actuellement sur une page qui affiche les 50 derniers jeux vidéo, pour donner un coté fun je veux permettre a l'utilisateur de pouvoir utiliser des filtres qui changent les jeux en fonction de critères sélectionnés comme le type de jeu, le pegi, la console etc etc....
Et la ou j'ai un problème c'est que je dois sélectionner chaque critère pour afficher un jeu, si par exemple je veux afficher les FPS je dois par exemple sélectionner le PEGI pour les afficher... les champs de sélection sont du coup dépendant les un des autres et j'aimerai qu'on ne soit pas obligé de tout sélectionner (si on veut on peut mais ce n'est pas obligatoire)
Concrètement voila quelques screen
Je travail que pour l'instant avec le TYPE et PEGI, j'ai laissé console et note de coté
Quand j'arrive sur ma page et qu'aucun champs n'est sélectionné j'ai ceci:

Si je selectionne les FPS (ils sont tous en PEGI 18 dans la BDD) avec le champs PEGI 18 j'ai ceci

En revanche si je selectionne uniquement les FPS sans le PEGI j'ai ce message d'erreur
Notice: Undefined index: typepegi in /Applications/MAMP/SITE/gameadvise/gamelist.php on line 54
Je comprend que la variable $typepegi n'est pas défini mais c'est normal puisque je ne l'utilise pas et je ne veux pas l'utiliser... alors si vous savez comment faire pour que je puisse aussi filtrer avec une valeur unique ce serait super ! Pourriez vous m'aider ? Par avance merci
Voici mon code
<?php session_start();
// Connexion à la base de données
$bdd= new PDO('mysql:host=localhost;dbname=bd_gameadvice;charset=utf8','root','root');
include('header.php');
// REQUETE AFFICHAGE JEUX
$selectgame = $bdd->query('SELECT * FROM jeux ORDER BY id DESC');
// REQUETE PEGI
$selectpegi = $bdd->query('SELECT * FROM pegi_jeux');
// REQUETE TYPE
$selecttype = $bdd->query('SELECT * FROM type_jeux');
// REQUETE CONSOLES
$selectconsole = $bdd->query('SELECT * FROM console');
?>
<div class="container">
<div class="row">
<form method="post" action="">
<div class="form-group"><div class="col-md-2"><select class="form-control" name="typegame" ><option value="" disabled selected>Choisissez un type</option><?php while ($type = $selecttype->fetch()) { echo "<option value='".$type['id']."'>".$type['type_nom']."</option>";} ?></select></div>
<div class="form-group"><div class="col-md-3"><select class="form-control" name="typenote"><option value="" disabled selected>Note Moyenne</option><option value='1'>Moyenne à partir de 1.</option><option value='2'>Moyenne à partir de 2.</option><option value='3'>Moyenne à partir de 3.</option><option value='4'>Moyenne à partir de 4.</option></select></div>
<div class="form-group"><div class="col-md-2"><select class="form-control" name="typeconsole"><option value="" disabled selected>Console</option><?php while ($console = $selectconsole->fetch()) { echo "<option value='".$console['id']."'>".$console['nomconsole']."</option>";} ?></select></div>
<div class="form-group"><div class="col-md-2"><select class="form-control" name="typepegi"><option value="" disabled selected>Classification</option><?php while ($pegi = $selectpegi->fetch()) { echo "<option value='".$pegi['id']."'>".$pegi['pegi_nom']."</option>";} ?></select></div>
<div class="form-group"><div class="col-md-2"><button type="submit" class="btn btn-primary" name="searchgamelist">RECHERCHER</button></div></div>
</form>
</div><br><br><br><br>
<div class="row">
<div class="col-md-12">
<?php
if (isset($_POST['searchgamelist'])) {
// FILTRE AFFICHAGE TYPE DE JEU
if (!empty($_POST['typegame']) OR !empty($_POST['typepegi'])) {
$affichetype = $bdd->prepare('SELECT jeux.titre, jeux.id, jeux.jaquette FROM jeux WHERE id_typejeu = ? AND id_pegi = ? ORDER BY id DESC'); //AFFICHAGE DU TYPE DE JEUX
$affichetype->execute(array($_POST['typegame'], $_POST['typepegi']));
while ($searchtype = $affichetype->fetch()) {?>
<div class = "col-md-2"><a href="game.php?id=<?php echo $searchtype['id']?>">
<?php
if (!empty($searchtype['jaquette'])) {?>
<img width="160" height="199" title="<?php echo $searchtype['titre'] ;?>" src="img/jaquette/<?php echo $searchtype['jaquette'] ?>">
<?php }else{?>
<img width="160" height="199" title="<?php echo $searchtype['titre'] ;?>" src="img/jaquette/jdefaut.png">
<?php }
?>
</a>
<center><a href="game.php?id=<?php echo $searchtype['id'] ;?>"><?php echo substr($searchtype['titre'],0, 20).' ...';?></a></center>
<center><?php
$reqnote = $bdd->prepare('SELECT AVG(note) FROM notes WHERE id_jeux_note = ?');
$reqnote->execute(array($searchtype['id']));
while ($note = $reqnote->fetch()) {
if (isset($note['AVG(note)'])) {
$notemoyenne = round($note['AVG(note)'], 1);
if ($notemoyenne >= 1 AND $notemoyenne < 1.4 ) {?>
<img src="img/notes/1.png">
<?php }elseif($notemoyenne >=1.5 AND $notemoyenne < 2){?>
<img width="100" height="20" src="img/notes/15.png">
<?php }elseif($notemoyenne >=2 AND $notemoyenne < 2.4){?>
<img width="100" height="20" src="img/notes/2.png">
<?php }elseif($notemoyenne >=2.5 AND $notemoyenne < 3){?>
<img width="100" height="20" src="img/notes/25.png">
<?php }elseif($notemoyenne >= 3 AND $notemoyenne < 3.4){?>
<img width="100" height="20" src="img/notes/3.png">
<?php }elseif($notemoyenne >= 3.5 AND $notemoyenne < 4){?>
<img width="100" height="20" src="img/notes/35.png">
<?php }elseif($notemoyenne >= 4 AND $notemoyenne < 4.4){?>
<img width="100" height="20" src="img/notes/4.png">
<?php }elseif($notemoyenne >= 4.4 AND $notemoyenne < 5){?>
<img width="100" height="20" src="img/notes/45.png">
<?php }elseif($notemoyenne == 5){?>
<img width="100" height="20" src="img/notes/5.png">
<?php }
}else{
echo "<em>Pas encore de note.</em>";
} ?></center><br></div>
<?php }
} // while ($searchtype = $affichetype->fetch())
// FIN FILTRE TYPE DE JEU
}
}else{ //TOUS LES JEUX SANS FILTRE
while ($jeulist = $selectgame->fetch())
{?>
<div class = "col-md-2"><a href="game.php?id=<?php echo $jeulist['id']?>">
<?php
if (!empty($jeulist['jaquette'])) {?>
<img width="160" height="199" title="<?php echo $jeulist['titre'] ;?>" src="img/jaquette/<?php echo $jeulist['jaquette'] ?>"></a>
<?php } else{?>
<img width="160" height="199" title="<?php echo $jeulist['titre'] ;?>" src="img/jaquette/jdefaut.png"></a>
<?php }
?>
<center><a href="game.php?id=<?php echo $jeulist['id'] ;?>"><?php echo substr($jeulist['titre'],0, 20).' ...';?></a></center>
<center><?php
$reqnote = $bdd->prepare('SELECT AVG(note) FROM notes WHERE id_jeux_note = ?');
$reqnote->execute(array($jeulist['id']));
while ($note = $reqnote->fetch()) {
if (isset($note['AVG(note)'])) {
$notemoyenne = round($note['AVG(note)'], 1);
if ($notemoyenne >= 1 AND $notemoyenne < 1.4 ) {?>
<img src="img/notes/1.png">
<?php }elseif($notemoyenne >=1.5 AND $notemoyenne < 2){?>
<img width="100" height="20" src="img/notes/15.png">
<?php }elseif($notemoyenne >=2 AND $notemoyenne < 2.4){?>
<img width="100" height="20" src="img/notes/2.png">
<?php }elseif($notemoyenne >=2.5 AND $notemoyenne < 3){?>
<img width="100" height="20" src="img/notes/25.png">
<?php }elseif($notemoyenne >= 3 AND $notemoyenne < 3.4){?>
<img width="100" height="20" src="img/notes/3.png">
<?php }elseif($notemoyenne >= 3.5 AND $notemoyenne < 4){?>
<img width="100" height="20" src="img/notes/35.png">
<?php }elseif($notemoyenne >= 4 AND $notemoyenne < 4.4){?>
<img width="100" height="20" src="img/notes/4.png">
<?php }elseif($notemoyenne >= 4.4 AND $notemoyenne < 5){?>
<img width="100" height="20" src="img/notes/45.png">
<?php }elseif($notemoyenne == 5){?>
<img width="100" height="20" src="img/notes/5.png">
<?php }
}else{
echo "<em>Pas encore de note.</em>";
}
}
?></center><br>
</div>
<?php }
}
?>
</div>
</div>
</div> <!-- FIN CONTAINER -->
<?php include('footer.php'); ?>