PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 28-02-2011 17:07:01

péachepé
Membre
Inscription : 28-02-2011
Messages : 8

Affichage de résultats de recherche

Bonjour à tous,

Je suis nouveau sur le forum et débutant en php. Je dois remettre en place la base de données d'un site "brouillon" pour un boulot à la fac.

Je parviens à faire s'afficher l'ensemble des parcours touristiques proposés dans la base de données et je suis aussi parvenu à faire s'afficher les résultats pour une requête formulée via le champ de recherche.

Cependant, une fois ma requête validée sur le champ de recherche, les résultats voulus apparaissent, mais l'ensemble des parcours touristiques au dessus reste apparent.

Je voudrais savoir comment faire pour que ce soit l'un ou l'autre qui apparaisse, pas les deux en même temps ! Voici l'état actuel de mon code :

<?php

$resultat = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");
 
$mot = $_POST["parcours"];
$recherche = mysql_query ("SELECT parcours FROM parcours WHERE parcours LIKE '%$mot%' ORDER BY pays, parcours");


while ($tableau1 = mysql_fetch_array($resultat)) {
  echo "{$tableau1["parcours"]}<br/><hr/>";
    if (!$resultat) {
      die ("Echec de la requête." .mysql_error ());
      }
  }
 
 
  echo "<br/><hr/>";
   
if ($recherche) {
  while ($tableau2 = mysql_fetch_array($recherche)) {
    echo "{$tableau2["parcours"]}<br/><hr/>";
      if (!$recherche) {
        die ("Echec de la requête." .mysql_error ());
        }
    }
  }
 
 
 
?>

 

Je vous remercie tous par avance.
A bientôt

Hors ligne

#2 28-02-2011 19:32:01

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Affichage de résultats de recherche

Saluton,
Le moins que je puisse dire c'est que la logique de ce script ne me saute pas aux yeux. Quant à tes explications...ben, c'est cor'assez la même chose.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 28-02-2011 19:43:54

péachepé
Membre
Inscription : 28-02-2011
Messages : 8

Re : Affichage de résultats de recherche

Salut,

Je vais donc essayer d'être plus clair :

J'ai une page web avec du php dans laquelle je dois faire figurer des parcours touristiques tirés d'une base de données. Cela fonctionne, quand je clique sur l'onglet "parcours" de mon site, ça marche, la liste de parcours apparaît. Voir la variable $resultat et son code ci-dessus. L'autre variable $recherche renvoie à une requête qui s'exécutera dans un formulaire selon le mot défini dans la variable $mot qui renvoie au champ de recherche, là aussi, ça marche.

Le hic, c'est que lorsque j'effectue un recherche sur un mot comme "trekking", j'obtoens la liste de tous les parcours et ensuite celle concenant le mot que j'ai tapé dans le champ de recherche lié au formulaire.

Ce que je voudrais, c'est que quelqu'un me dise quoi écrire pour n'avoir qu'un seul des deux tableaux à la fois.

Voilà, merci.

Hors ligne

#4 01-03-2011 05:53:16

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Affichage de résultats de recherche

A tout hasard, essaye comme cela

<?php
if(isset($_POST["parcours"])){ // isset — Détermine si une variable est définie et est différente de NULL
    $recherche=sprintf("SELECT parcours FROM parcours WHERE parcours LIKE '%%%s%%' ORDER BY pays, parcours",
                        mysql_real_escape($_POST['parcours']));
     }
else{
    $recherche = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");
    }
$resultat = mysql_query ($recherche) or die($recherche.'<br />'."Echec de la requête." .mysql_error ());
while ($tableau = mysql_fetch_array($resultat)) {
    printf("%s %s<br/><hr/>",
            $tableau['parcours'],
            isset($tableau['nbrJours'])? $tableau['nbrJours'] :'');
    }

Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 01-03-2011 16:06:19

péachepé
Membre
Inscription : 28-02-2011
Messages : 8

Re : Affichage de résultats de recherche

Salut,

Malheureusement ça ne marche pas, mais merci du coup de main. Si toi ou d'autres ont encore des idées sur mon problème, je suis preneur.

Ceci étant, il y a dans le code que tu m'as suggéré des fonctions que je ne connaissais pas :

- printf
- sprintf
- mysql_real_escape

Que veulent-elles dire ?

C'est quoi le %s ? Et dans le LIKE pourquoi y a t-il '%%%s%% ?

Je vais essayer de voir pour la suite avec le code que j'avais mais je conserve les autres codes.

Merci !

Hors ligne

#6 01-03-2011 23:10:26

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Affichage de résultats de recherche

salut,

Pour des infos sur les fonctions http://www.php.net

Le %s est inhérent à la fonction sprintf regarde la doc de celle-ci sur le site de php.net

Qu'entends tu par ne marche pas ?

Est ce que les requêtes fonctionnent avec phpmyadmin ou en ligne de commande ?

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#7 02-03-2011 16:27:48

péachepé
Membre
Inscription : 28-02-2011
Messages : 8

Re : Affichage de résultats de recherche

Salut,

Ce que j'entends par "ne marche pas", c'est que ça me retourne une parse error in line 60. Pour mémoire, le code que l'on m'avait suggéré était :

<?php

if(isset($_POST["parcours"])){ // isset — Détermine si une variable est définie et est différente de NULL

    $recherche=sprintf("SELECT parcours FROM parcours WHERE parcours LIKE '%$mot%' ORDER BY pays, parcours",

                        mysql_real_escape($_POST['parcours']));

     }

else{

    $resultat = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");

    }

$resultat = mysql_query ($recherche) or die($recherche.'<br />'."Echec de la requête." .mysql_error ());

while ($tableau = mysql_fetch_array($resultat)) {

    printf("%s %s<br/><hr/>",

            $tableau['parcours'],

            isset($tableau['nbrJours'])? $tableau['nbrJours'] :'');

    }
?>

 

Comme ça ne fonctionnait pas (peut-être est-ce moi qui en ait mal compris l'utilisation) j'ai repris mon ancien code et j'ai bidouillé, du coup, je suis à peu près arrivé à ce que je voulais. Voici l'état actuel du code :

<?php

$saut = "<br><br>";
 
$mot = $_POST["parcours"];
$recherche = mysql_query ("SELECT parcours, nbrJours FROM parcours WHERE parcours LIKE '%$mot%' ORDER BY pays, parcours");

if (!$mot) {
  echo "Commencez votre recherche de parcours !";
  }

elseif ($recherche) {
  echo "<br/><b>Résultat de la recherche pour le terme : $mot.</b><br/><br/><hr/>";
  while ($tableau1 = mysql_fetch_array($recherche)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]}<br/><hr/>";
      }
    }

 

?>

<?php
echo $saut;

$resultat = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");


echo "<br/><b>Voici la totalité des parcours proposés.</b><br/><br/><hr/>";
while ($tableau1 = mysql_fetch_array($resultat)) {
  echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    if (!$resultat) {
      die ("Echec de la requête." .mysql_error ());
      }
  }
   
?>

 

Mais c'est pas grave, comme je l'ai dit, je reste preneur diées qui m'aideraient à améliorer les choses !

A plus !

Hors ligne

#8 12-03-2011 11:16:41

péachepé
Membre
Inscription : 28-02-2011
Messages : 8

Re : Affichage de résultats de recherche

Salut à tous,

C'est toujours moi et mes problème d'affichages de listes de parcours touristiques. J'ai avancé dans ma réalisation et suis parvenu à faire ce que je voulais mais j'ai maintenant un autre problème :

A présent, je souhaiterais qu'en cliquant sur différents boutons de ma page d'accueil, je sois renvoyé aux parcours touristiques qui correspondent au bouton sur lequel j'ai cliqué. J'ai crée six requêtes SQL qui sont valides, une pour chaque grande catégorie de parcours. Cependant, je me retrouve malgré mes boucles while et mes conditions en if... elseif.. else, avec la liste de tous les parcours.

Voici l'état actuel de mon code :

<?php

//La section "Afrique Ouest équatoriale Australie" correspond à l'onglet "Afrique Noire".


$destination1 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Afrique Saharienne' ORDER BY pays ASC, parcours ASC");
$destination2 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Mediterranee Proche Orient Europe' ORDER BY pays ASC, parcours ASC");
$destination3 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Afrique Ouest Equatoriale Australe' ORDER BY pays ASC, parcours ASC");
$destination4 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Asie' ORDER BY pays ASC, parcours ASC");
$destination5 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Oceanie' ORDER BY pays ASC, parcours ASC");
$destination6 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Ameriques' ORDER BY pays ASC, parcours ASC");


echo "<br/><b>Les parcours de la zone demandée.</b> <br/><br/><hr/>";

  while ($tableau1 = mysql_fetch_array($destination1)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination2)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination3)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination4)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination5)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination6)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 

?>

 

L'un(e) d'entre vous aurait une solution pour récupérer les bonnes données en cliquant sur le bon bouton ? J'ai même essayé les variables superglobales en GET et POST avec les id des boutons mais rien n'y a fait.

Quelqu'un a une idée ?

Merci par avance.

Hors ligne

#9 12-03-2011 13:53:19

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage de résultats de recherche

$cond_secteur = "";
if( !empty($_GET['secteur']) )
  $cond_secteur = "WHERE grandSecteurs = '" . mysql_real_escape_string($_GET['secteur']) . "'";
$destination = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours $cond_secteur ORDER BY pays ASC, parcours ASC");
echo "<br/><b>Les parcours de la/les zone(s) demandée(s).</b> <br/><br/><hr/>";
while ($tableau = mysql_fetch_array($destination)) {
  echo "{$tableau['parcours']}, {$tableau['nbrJours']} jours<br/><hr/>";
}

Cela serait un brin plus propre. wink
Et cela permet de gérer l'affichage d'une seule zone : script.php?secteur=Asie

Hors ligne

#10 12-03-2011 14:27:58

péachepé
Membre
Inscription : 28-02-2011
Messages : 8

Re : Affichage de résultats de recherche

Salut xTG,

D'abord, merci pour cette aide. Ca ne semble pas fonctionner bien que je crois comprendre ce que tu as voulu me faire faire. Je me retrouve toujours avec un tableau complet de parcours touristiques sans avoir de tri fait avec ma requête SQL. La variable $cond_secteur doit-elle comporter un contenu entre ses guillemets ou celui-ci s'insère t-il en fonction du bouton sur lequel j'ai cliqué préalablement ? Enfin, que veulent dire les apostrophes que l'on retrouve dans ton code ?

Merci.

Hors ligne

#11 13-03-2011 10:14:22

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Affichage de résultats de recherche

Pour pouvoir trier avec mon exemple il faut passer la valeur du champs grandSecteurs dans la variable secteur en méthode GET (donc dans l'url).
Quelle est la partie que tu ne comprends pas ? Je n'ai pas très bien compris ton histoire de guillement. hmm

Hors ligne

Pied de page des forums