Rendre le résultat de la recette cliquable

Fermé
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023 - 22 juin 2018 à 16:18
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023 - 27 juin 2018 à 16:29
bonjour les développeurs.
j'ai créé un moteur de recherche, ça marche.
mon soucis a l'heure actuelle: rendre le ressaut de raquette cliquable.
merci en avance pour le coup de main


voici le code:
<?php 
     

     //intialisation de la variable contenant les resultats
     $resultats = "";
	 $nbreparametres = 2;   // Nombre de parametre à renseigner 
	 
	

     //traitement de la requette
     if(isset($_POST['query']) && !empty($_POST['query'])) {
       //si l'utilisateur a entre quelque chose, on traite sa requette


       // on rend la requette de l'utilisateur
       $query = preg_replace("#[^a-zA-Z ?0-9]#i", "", $_POST["query"]);

       if($_POST['filtre'] == "site entier"){

               $nbreparametres = 4;
			   
			    // recherche site entier
              $sql = "(SELECT id, description AS nom FROM  creche WHERE description LIKE ? OR lieux LIKE ?)
             UNION (SELECT id, pageecoprim_nom AS nom FROM ecoles_primaires WHERE pageecoprim_nom LIKE ? OR pageecoprim_contenance LIKE ?)";
			 
			  

         
       } else if($_POST['filtre'] == "creche"){
              $sql = "SELECT id, description AS nom FROM  creche WHERE description LIKE ? OR lieux LIKE ?";

       } else if($_POST['filtre'] == "primaire"){
              $sql = "SELECT id, pageecoprim_nom AS nom FROM ecoles_primaires WHERE pageecoprim_nom LIKE ? OR pageecoprim_contenance LIKE ?";


     }


     //connexion a la base de donnée
     include"includes/connect_db.php";

     $req = $db->prepare($sql);
	 if($nbreparametres == 2) {
     $req ->execute(array('%'.$query.'%', '%'.$query.'%'));
       } else {
	   $req ->execute(array('%'.$query.'%', '%'.$query.'%', '%'.$query.'%', '%'.$query.'%'));
	   }
     $count = $req->rowCount();

     if($count >= 1) {

        
            echo " $count résultat(s) trouvé pour <strong>$query</strong><hr/>";

            while($data = $req->fetch(PDO::FETCH_OBJ)){
                   echo '#'.$data->id.' - Titre: '.$data->nom.'<br/>';
            }

     } else {
           echo "<hr/>0  résultat trouvé pour <strong>$query</strong><hr/>";

     } 
	 
	 }
 ?>

<!DOCTYPE html>
<html>
     <head>
          <title> mini moteur de recherche</title>
     </head>
     <body>
<p>
     <form action ="<?php echo $_SERVER['PHP_SELF']; ?>" method='POST'> 
             <label for="query">entrer votre recherche: </label>
             <input type= "search" name="query" maxlength="80" size="80" id="query " /><br/>
            recherche au niveau de:
             <select name="filtre">
                 <option value="site entier">site entier</option>
                 <option value="creche">creche</option>
                 <option value="primaire">primaire</option>

              </select><br/>
             <input type="submit" value="Recherche">
     </form>


      <?php echo $resultats; ?>
     </body>
</html>



"<?php echo $_SERVER['PHP_SELF']; ?>"

3 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
22 juin 2018 à 18:00
Bonjour,

Pour rendre cliquable, on est purement dans la couche de présentation, HTML voire javascript.
Il faut donc que tu crées un lien <a> ou un bouton de formulaire <input> voire un simple bouton <button>. À toi de voir ce que tu veux faire.

Ceci dit, là, on n'a répondu qu'à 10% de la question.
La vraie question, c'est : cliquable, oui, mais pour faire quoi ? Ouvrir une autre page ? Exécuter une action ?

Xavier
0
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
22 juin 2018 à 19:31
bonsoir Reivax962. je souhaiterais que le visiteur après avoir effectué une recherche, puisse cliquer sur le résultat qui pourras le ramener sur une page selon son résultat obtenu.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 juin 2018 à 11:24
D'accord.
Une façon de faire, c'est que ton PHP crée un lien html (balise <a>).
Après, il faut construire le lien vers cette page. Le plus simple est de passer des paramètres GET, c'est-à-dire sous la forme page.php?variable=valeur. Ce couple variable/valeur sera ce qui te permettra de retrouver le lien sur lequel l'utilisateur a cliqué. Par exemple, pour tes résultats, cela pourrait être page.php?creche_id=5

Dans ta requête il manquera quand même une information cruciale. Quand tu fais une UNION sur creche et ecoles_primaires , tu perds l'information de savoir de quelle table est venue la donnée. Ensuite tu ne sauras donc plus dans quelle table faire la requête pour ressortir les infos de l'établissement.

Je te suggère donc de rajouter un troisième champ de sortie (sur l'UNION mais aussi sur les autres) :
SELECT id, description AS nom, 'c' as type FROM  creche WHERE description LIKE ? OR lieux LIKE ?
SELECT id, pageecoprim_nom AS nom, 'e' as type FROM ecoles_primaires WHERE pageecoprim_nom LIKE ? OR pageecoprim_contenance LIKE ?


Et pour finir, la création du lien :
while($data = $req->fetch(PDO::FETCH_OBJ)){
     echo '#'.$data->id.' - Titre : <a href="nouvelle_page.php?id='.$data->id.'&type='.$data->type.'">'.$data->nom.'</a><br/>';
}


Tu n'as plus qu'à créer ta page nouvelle_page.php (que tu nommes bien sûr comme tu veux).
Dans cette page, l'id sélectionné sera récupéré avec $_GET['id'], et le type $_GET['type'] vaudra 'c' pour les crèches et 'e' pour les écoles primaires.

Xavier
0
dproduction Messages postés 39 Date d'inscription lundi 2 juillet 2012 Statut Membre Dernière intervention 30 mars 2023
27 juin 2018 à 16:29
merci Reivax962. ta réponse m'a beaucoup aidé
0