Moteur de recherche

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Moteur de recherche

par mazflo007 » 27 nov. 2005, 14:34

tu peut m'aider maintenant pour faire 1 seul champ stp

par Cyrano » 20 nov. 2005, 18:46

Tu as déjà digéré tout ce qu'on a vu aujourd'hui ??? J'en doute fort, et puis tu avais fort bien réussi avec deux champ de saisie, ce sera d'autant plus simple avec un seul. Commence et si tu as des messages d'erreur à l'exécution ou des résultats qui ne correspondent pas à ton attente, on t'aidera à les résoudre. Je crois que je t'en ai donné pas mal pour aujourd'hui
;)

par mazflo007 » 20 nov. 2005, 18:22

peut-tu m'aider stp

par Cyrano » 20 nov. 2005, 18:19

Bien, on avance à grand pas :)

Pour simplifier et réduire à un seul champ de saisie, il faudrait revoir la manière de construire dynamiquement ta requête SQL mais en te basant sur une seule donnée envoyée par le formulaire au lieu de deux.

par mazflo007 » 20 nov. 2005, 18:15

merci ca marche
Une derniere question comment faire un seul champ de recherche et que sa recherche dans nom et description

par Cyrano » 20 nov. 2005, 17:58

Juste avant de générer tes liens et quand tu n'as plus besoin de $description sous forme de tableau, il faut le remetre en chaine. Donc tu peux insérer ceci juste avant la partie où sont générés les liens :
$description = implode(" ", $description);
Mais ça pose un problème : si on a envoyé juste un nom, il n'y a pas de description et on va avoir un paramètre sans valeur dans l'url. On va donc devoir construire un peu différemment les paramètres. Ton code complet revu dans cette optique : regarde ce qui se passe après le tableau HTML:
<html>
<head>
<title> Excelabo : formulaires avancés</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta NAME="Author" CONTENT="Florence Cabon http://www.excelabo.net">
<meta http-equiv="Content-Language" content="fr">
</head>
<body>
<h1>Recherche de personnes inscrites</h1>
<?php
/// paramètres de connection à la base de données
require("connect.php");
$tous = mysql_query("SELECT * FROM jeux");
$nb_tous = mysql_num_rows($tous);
?>
<p>Ce moteur vous permet de rechercher parmi les <font color="#008080"><b><? echo($nb_tous); ?></b></font> entrées de la table jeux.</p>
<br>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  <input type="text" name="nom" size="20">&nbsp;Nom<br>
  <input type="text" name="description" size="20">&nbsp;Description<br><br>
  <input type="radio" name="f_etou" value="AND" checked>voir les fiches répondant à tous les critères demandés<br>
  <input type="radio" name="f_etou" value="OR">voir les fiches comportant au moins un de ces éléments<br><br>
  <input type="submit" name="envoi" value="Rechercher">
</form><br><br>
<?php
$pge         = isset($_GET['pge'])         ? $_GET['pge']         : 0;
$f_etou      = isset($_GET['f_etou'])      ? $_GET['f_etou']      : "AND";
$nom         = isset($_GET['nom'])         ? $_GET['nom']         : (isset($_POST['nom'])         ? $_POST['nom']         : "");
$description = isset($_GET['description']) ? $_GET['description'] : (isset($_POST['description']) ? $_POST['description'] : "");

$etou        = $f_etou;
//s'il y a eu saisie :
if($nom != "" || $description != "")
{
    //traitement des données du formulaire
    //construction du critère de sélection suivant les entrées fournies
    if ($nom != "" )
    {
        //!= signifie "différent de"
        $noms = split(" ",$nom);// on transforme la variable en tableau (array)
        $nb_noms = count($noms);// nb d'éléments dans le tableau
        $critere=" nom like '%". $noms[0] ."%'";// $noms[0]= premier élément du tableau
        $z=1;
        while($z<$nb_noms)
        {
            // on boucle pour fabriquer le critère avec tous les elts du tableau
            $critere.=" ". $etou ." nom like '%". $noms[$z] ."%'";
            $z++;
        }
        if ($description != "")
        {
            $description = split(" ",$description);
            $nb_description = count($description);
            $z=0;
            while($z<$nb_description)
            {
                $critere.=" ". $etou ." description like '%". $description[$z] ."%'";
                $z++;
            }
        }//fin du if prénom pas vide
    }//fin du if nom pas vide
    else
    {
        $description = split(" ",$description);
        $nb_description = count($description);
        $critere=" description like '%". $description[0] ."%'";
        $z = 1;
        while($z < $nb_description)
        {
            $critere.=" ". $etou ." description like '%". $description[$z] ."%'";
            $z++;
        }
    }// fin du else = si nom est vide

    // NOMBRE D'ENREGISTREMENTS REPONDANT A LA REQUETE sur jeux
    $requete = mysql_query("select * from jeux where ". $critere ."");
    $nbT = mysql_num_rows($requete);

    // DEFINITION DU MESSAGE A AFFICHER S'IL NY A PAS DE RESULTATS
    if ($nbT==0)
    {
?>
<div align="center">
<font color="#993366">Désolé, aucune fiche ne correspond à tous les critères indiqués. Vérifiez l'orthographe, diminuez le nombre de critères et relancez la recherche.</font>
</div>
<?php
    }
    else
    {
        // AFFICHAGE DES RESULTATS PAGE PAR PAGE
        if ($nbT>1)
        {
            $s = "s";
        } // utilisé pour éviter une faute d'orthographe dans la ligne en dessous...
?>
<p><Il y a <b><?php echo($nbT); ?></b> réponse<?php echo($s); ?></p>
<br>
<?php
        // on refait la requete mais en précisant les fiches à renvoyer
        $limit=10; // vous pouvez faire varier ce nombre, voire même l'intégrer dans votre formulaire pour que ce soient vos visiteurs qui choisissent
        $debut=$pge*$limit;
        $requete2 = mysql_query("select * from jeux where ". $critere ." limit ". $debut .", ". $limit ."");
?>
<table border="2">
  <tr>
    <td>Aperçu</td>
    <td>Lien</td>
    <td>Description</td>
    <td>Note</td>
    <td>Taille</td>
    <td>Noter!</td>
  </tr>
<?php
        while($row = mysql_fetch_array($requete2))
        {
            $nom_jeu     = stripslashes($row['nom']);
            $desc        = $row['description'];
            $mail        = $row['note'];
            $moyenne     = round($row['moyenne'], 2);
            $id          = $row['id'];
            $taille      = $row['taille'];
            $categorie   = $row['categorie'];
?>
  <tr>
    <td><a href="#" onClick="window.open('http://mazflo007.free.fr/jeux/swf.php?id=<?php echo($id); ?>&categorie=<?php echo($categorie); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=700, height=600');return(false);"><img src=http://mazflo007.free.fr/jeux/<?php echo($categorie); ?>/images/<?php echo($id); ?>.gif widht="100" height="100"></td>
    <td><center><a href="#" onClick="window.open('http://mazflo007.free.fr/jeux/swf.php?id=<?php echo($id); ?>&categorie=<?php echo($categorie); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=700, height=600');return(false);"><?php echo($nom_jeu); ?></a></center></td>
    <td><?php echo($desc); ?></td>
    <td><?php echo($taille); ?></td>
    <td><?php echo($moyenne); ?>/20</td>
    <td><a href="#"onClick="window.open('http://mazflo007.free.fr/jeux/note.php?id=<?php echo($id); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=100, height=100');return(false);"><div style="text-align: center">Noter le jeu</div></a></center></td>
  </tr>
<?php
        }// fin du while (tant qu'il y a une ligne dans le tableau de résultats renvoyé par $requete2)
?>
</table>
<?php
        /* On reconstruit dynamiquement les paramètres $nom et/ou $description */
        $param_desc = !empty($description) ? "&description=". implode(" ", $description) : null;
        $param_nom = !empty($nom) ? "&nom=". $nom : null;
        $nbpages = ceil($nbT/$limit); // ceil = plafond : pour arrondir à la valeur supérieure
        // affichage de la première page si nécessaire (si nb total de pages supérieur à 5)
        if($nbpages > 3 && $pge > 2)
        {
?>
<a href="?pge=0<?php echo($param_nom . $param_desc); ?>&f_etou=<?php echo($f_etou); ?>"><b>Début</b></a>&nbsp;
<?php
        }
        // AFFICHAGE DU LIEN PRECEDENT SI BESOIN EST (LA PREMIERE PAGES EST 0)
        if ($pge > 0)
        {
            $precedent = $pge - 1;
?>
<a href="?pge=<?php echo($precedent . $param_nom . $param_desc); ?>&f_etou=<?php echo($f_etou); ?>"><b><font color='#993366'><</font></b></a>&nbsp;
<?php
        }
        // AFFICHAGE DES NUMEROS DE PAGE
        $i = 0;
        $j = 1;
        if($nbT > $limit)
        {
            while($i < $nbpages)
            {
                //  pour limiter l'affichage du nombre de pages restantes
                if ($i > ($pge - 3) && $i < ($pge + 3))
                {
                    if($i != $pge)
                    {
?>
<a href="?pge=<?php echo($i . $param_nom . $param_desc); ?>&f_etou=<?php echo($f_etou); ?>"><?php echo($j); ?></a>&nbsp;
<?php
                    }
                    else
                    {
?>
<b><?php echo($j); ?></b>&nbsp;
<?php
                    }//met en gras le N° de la page en cours
                }//fin du if i>pge....
                $i++;
                $j++;
            }//fin du while i<nbpages
        }    //fin du if nbT>limit
        // AFFICHAGE DU LIEN SUIVANT SI BESOIN EST
        if($pge < ($nbpages - 1))
        {
            $suivant = ($pge + 1);
?>
<a href="?pge=<?php echo($suivant . $param_nom . $param_desc); ?>&f_etou=<?php echo($f_etou); ?>"><b>></b></a>&nbsp;
<?php
        }
        // affichage de la dernière page si nécessaire
        if($nbpages > 3 && $pge < ($nbpages - 3))
        {
            $fin=$nbpages-1;
?>
<a href="?pge=<?php echo($fin . $param_nom . $param_desc); ?>&f_etou=<?php echo($f_etou); ?>"><b>fin</b> (<?php echo($nbpages); ?>)</a>
<?php
        }

    }// fin du else affichage des résultats.
}// fin du si il y a eu saisie
else
{ // s'il n'y a pas eu saisie
?>
<p>Indiquez vos critères de choix</p>
<?php
}
?>
</body>
</html>

par mazflo007 » 20 nov. 2005, 17:43

oui je suis mais je ne voit pas de solution

par Cyrano » 20 nov. 2005, 17:41

Et maintenant, on a un autre problème: en voulant aller voir la page 2, ou n'importe quelle autre page, on retombe sur le formulaire: le nom et la description sont vide tant en $_GET qu'en $_POST.

Il y a donc un oubli quelque part... Et si on suit ton code, on tombe par exemple sur ceci:
$description = split(" ",$description);
Tu transformes une variable scalaire en tableau indexé. Mais c'est toujours la même variable qui te sert à alimenter les paramètres des liens vers les autres pages. Est-ce que tu suis bien jusque là et est-ce que tu vois une solution possible ?

par mazflo007 » 20 nov. 2005, 17:34

ok c'est fait

par Cyrano » 20 nov. 2005, 17:30

Bien, on avance, je te propose donc de regarder et de suivre la logique: pourquoi ne se passe-t-il rien ? parce que la condition du if() retourne FALSE : les variables sont vides toutes les deux.

Pourtant, tu as bien inscrit une ou plusieurs valeurs dans le formulaire. Mais, le formulaire est en méthode post. Or nos opérateurs ternaires de récupération vérifient la super-globale $_GET et non $_POST.

J'introduis donc maintenant la notion de elseif() dans l'opérateur ternaire. Modifie les lignes de récupération du nom et de la description par ceci:
$nom         = isset($_GET['nom'])         ? $_GET['nom']         : (isset($_POST['nom'])         ? $_POST['nom']         : "");
$description = isset($_GET['description']) ? $_GET['description'] : (isset($_POST['description']) ? $_POST['description'] : "");
Note bien que, selon l'explication donnée tout à l'heure, si la condition première retourne FALSE, on affecte la seconde valeur. Mais cette seconde valeur peut elle même conternir un autre opérateur ternaire. C'est ce que j'ai ajouté en vérifiant alors la super-globale $_POST.

par mazflo007 » 20 nov. 2005, 17:13

Merci pour le code mais il y a un probleme quand je fait rechercher il ne se passe rien
regarde http://mazflo007.free.fr/fc-phpmoteur2.php

par Cyrano » 20 nov. 2005, 17:01

Allez, proposition de correction :
<html>
<head>
<title> Excelabo : formulaires avancés</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta NAME="Author" CONTENT="Florence Cabon http://www.excelabo.net">
<meta http-equiv="Content-Language" content="fr">
</head>
<body>
<h1>Recherche de personnes inscrites</h1>
<?php
/// paramètres de connection à la base de données
require("connect.php");
$tous = mysql_query("SELECT * FROM jeux");
$nb_tous = mysql_num_rows($tous);
?>
<p>Ce moteur vous permet de rechercher parmi les <font color="#008080"><b><? echo($nb_tous); ?></b></font> entrées de la table jeux.</p>
<br>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
  <input type="text" name="nom" size="20">&nbsp;Nom<br>
  <input type="text" name="description" size="20">&nbsp;Description<br><br>
  <input type="radio" name="f_etou" value="AND" checked>voir les fiches répondant à tous les critères demandés<br>
  <input type="radio" name="f_etou" value="OR">voir les fiches comportant au moins un de ces éléments<br><br>
  <input type="submit" value="Rechercher">
</form><br><br>
<?php
$pge         = isset($_GET['pge'])         ? $_GET['pge']         : 0;
$f_etou      = isset($_GET['f_etou'])      ? $_GET['f_etou']      : "AND";
$nom         = isset($_GET['nom'])         ? $_GET['nom']         : "";
$description = isset($_GET['description']) ? $_GET['description'] : "";

$etou        = $f_etou;
//s'il y a eu saisie :
if($nom != "" || $description != "")
{
    //traitement des données du formulaire
    //construction du critère de sélection suivant les entrées fournies
    if ($nom != "" )
    {
        //!= signifie "différent de"
        $noms = split(" ",$nom);// on transforme la variable en tableau (array)
        $nb_noms = count($noms);// nb d'éléments dans le tableau
        $critere=" nom like '%". $noms[0] ."%'";// $noms[0]= premier élément du tableau
        $z=1;
        while($z<$nb_noms)
        {
            // on boucle pour fabriquer le critère avec tous les elts du tableau
            $critere.=" ". $etou ." nom like '%". $noms[$z] ."%'";
            $z++;
        }
        if ($description!="")
        {
            $description = split(" ",$description);
            $nb_description = count($description);
            $z=0;
            while($z<$nb_description)
            {
                $critere.=" ". $etou ." description like '%". $description[$z] ."%'";
                $z++;
            }
        }//fin du if prénom pas vide
    }//fin du if nom pas vide
    else
    {
        $description = split(" ",$description);
        $nb_description = count($description);
        $critere=" description like '%". $description[0] ."%'";
        $z = 1;
        while($z < $nb_description)
        {
            $critere.=" ". $etou ." description like '%". $description[$z] ."%'";
            $z++;
        }
    }// fin du else = si nom est vide

    // NOMBRE D'ENREGISTREMENTS REPONDANT A LA REQUETE sur jeux
    $requete = mysql_query("select * from jeux where ". $critere ."");
    $nbT = mysql_num_rows($requete);

    // DEFINITION DU MESSAGE A AFFICHER S'IL NY A PAS DE RESULTATS
    if ($nbT==0)
    {
?>
<div align="center">
<font color="#993366">Désolé, aucune fiche ne correspond à tous les critères indiqués. Vérifiez l'orthographe, diminuez le nombre de critères et relancez la recherche.</font>
</div>
<?php
    }
    else
    {
        // AFFICHAGE DES RESULTATS PAGE PAR PAGE
        if ($nbT>1)
        {
            $s = "s";
        } // utilisé pour éviter une faute d'orthographe dans la ligne en dessous...
?>
<p><Il y a <b><?php echo($nbT); ?></b> réponse<?php echo($s); ?></p>
<br>
<?php
        // on refait la requete mais en précisant les fiches à renvoyer
        $limit=10; // vous pouvez faire varier ce nombre, voire même l'intégrer dans votre formulaire pour que ce soient vos visiteurs qui choisissent
        $debut=$pge*$limit;
        $requete2 = mysql_query("select * from jeux where ". $critere ." limit ". $debut .", ". $limit ."");
?>
<table border="2">
  <tr>
    <td>Aperçu</td>
    <td>Lien</td>
    <td>Description</td>
    <td>Note</td>
    <td>Taille</td>
    <td>Noter!</td>
  </tr>
<?php
        while($row = mysql_fetch_array($requete2))
        {
            $nom_jeu     = stripslashes($row['nom']);
            $desc        = $row['description'];
            $mail        = $row['note'];
            $moyenne     = round($row['moyenne'], 2);
            $id          = $row['id'];
            $taille      = $row['taille'];
            $categorie   = $row['categorie'];
?>
  <tr>
    <td><a href="#" onClick="window.open('http://mazflo007.free.fr/jeux/swf.php?id=<?php echo($id); ?>&categorie=<?php echo($categorie); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=700, height=600');return(false);"><img src=http://mazflo007.free.fr/jeux/<?php echo($categorie); ?>/images/<?php echo($id); ?>.gif widht="100" height="100"></td>
    <td><center><a href="#" onClick="window.open('http://mazflo007.free.fr/jeux/swf.php?id=<?php echo($id); ?>&categorie=<?php echo($categorie); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=700, height=600');return(false);"><?php echo($nom_jeu); ?></a></center></td>
    <td><?php echo($desc); ?></td>
    <td><?php echo($taille); ?></td>
    <td><?php echo($moyenne); ?>/20</td>
    <td><a href="#"onClick="window.open('http://mazflo007.free.fr/jeux/note.php?id=<?php echo($id); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=100, height=100');return(false);"><div style="text-align: center">Noter le jeu</div></a></center></td>
  </tr>
<?php
        }// fin du while (tant qu'il y a une ligne dans le tableau de résultats renvoyé par $requete2)
?>
</table>
<?php
        $nbpages = ceil($nbT/$limit); // ceil = plafond : pour arrondir à la valeur supérieure
        // affichage de la première page si nécessaire (si nb total de pages supérieur à 5)
        if($nbpages > 3 && $pge > 2)
        {
?>
<a href="?pge=0&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b>Début</b></a>&nbsp;
<?php
        }
        // AFFICHAGE DU LIEN PRECEDENT SI BESOIN EST (LA PREMIERE PAGES EST 0)
        if ($pge > 0)
        {
            $precedent = $pge - 1;
?>
<a href="?pge=<?php echo($precedent); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b><fontcolor='#993366'><</font></b></a>&nbsp;
<?php
        }
        // AFFICHAGE DES NUMEROS DE PAGE
        $i = 0;
        $j = 1;
        if($nbT > $limit)
        {
            while($i < $nbpages)
            {
                //  pour limiter l'affichage du nombre de pages restantes
                if ($i > ($pge - 3) && $i < ($pge + 3))
                {
                    if($i != $pge)
                    {
?>
<a href="?pge=<?php echo($i); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><?php echo($j); ?></a>&nbsp;
<?php
                    }
                    else
                    {
?>
<b><?php echo($j); ?></b>&nbsp;
<?php
                    }//met en gras le N° de la page en cours
                }//fin du if i>pge....
                $i++;
                $j++;
            }//fin du while i<nbpages
        }    //fin du if nbT>limit
        // AFFICHAGE DU LIEN SUIVANT SI BESOIN EST
        if($pge < ($nbpages - 1))
        {
            $suivant = ($pge + 1);
?>
<a href="?pge=<?php echo($suivant); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b>></b></a>&nbsp;
<?php
        }
        // affichage de la dernière page si nécessaire
        if($nbpages > 3 && $pge < ($nbpages - 3))
        {
            $fin=$nbpages-1;
?>
<a href="?pge=<?php echo($fin); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b>fin</b> (<?php echo($nbpages); ?>)</a>
<?php
        }

    }// fin du else affichage des résultats.
}// fin du si il y a eu saisie
else
{ // s'il n'y a pas eu saisie
?>
<p>Indiquez vos critères de choix</p>
<?php
}
?>
</body>
</html>
Sous réserve, j'ai du renommer certaines variables pour cause de risque de conflit : à tester.

par Cyrano » 20 nov. 2005, 16:50

Tu n'est pas logique : tu as ajouté la récupération dans le else : que se passe-t-il dans le if qui précède là où sont appelées les variables puisqu'elles sont toujours indéfinies ?

par mazflo007 » 20 nov. 2005, 16:39

voici ce que donne le code
<html> 
<head> 
<title> Excelabo : formulaires avancés</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<meta NAME="Author" CONTENT="Florence Cabon http://www.excelabo.net"> 
<meta http-equiv="Content-Language" content="fr"> 
</head> 
<body> 
<h1>Recherche de personnes inscrites</h1> 
<?php 
/// paramètres de connection à la base de données 
require("connect.php"); 
$tous = mysql_query("SELECT * FROM jeux"); 
$nb_tous = mysql_num_rows($tous); 
?> 
<p>Ce moteur vous permet de rechercher parmi les <font color="#008080"><b><? echo($nb_tous); ?></b></font> entrées de la table jeux.</p> 
<br> 
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>"> 
  <input type="text" name="nom" size="20">&nbsp;Nom<br> 
  <input type="text" name="description" size="20">&nbsp;Description<br><br> 
  <input type="radio" name="f_etou" value="AND" checked>voir les fiches répondant à tous les critères demandés<br> 
  <input type="radio" name="f_etou" value="OR">voir les fiches comportant au moins un de ces éléments<br><br> 
  <input type="submit" value="Rechercher"> 
</form><br><br> 
<?php 
$etou = $f_etou; 
//s'il y a eu saisie : 
if($nom != "" || $description != "") 
{ 
    //traitement des données du formulaire 
    //construction du critère de sélection suivant les entrées fournies 
    if ($nom != "" ) 
    { 
        //!= signifie "différent de" 
        $noms = split(" ",$nom);// on transforme la variable en tableau (array) 
        $nb_noms = count($noms);// nb d'éléments dans le tableau 
        $critere=" nom like '%". $noms[0] ."%'";// $noms[0]= premier élément du tableau 
        $z=1; 
        while($z<$nb_noms) 
        { 
            // on boucle pour fabriquer le critère avec tous les elts du tableau 
            $critere.=" ". $etou ." nom like '%". $noms[$z] ."%'"; 
            $z++; 
        } 
        if ($description!="") 
        { 
            $description = split(" ",$description); 
            $nb_description = count($description); 
            $z=0; 
            while($z<$nb_description) 
            { 
                $critere.=" ". $etou ." description like '%". $description[$z] ."%'"; 
                $z++; 
            } 
        }//fin du if prénom pas vide 
    }//fin du if nom pas vide 
    else 
    { 
        $description = split(" ",$description); 
        $nb_description = count($description); 
        $critere=" description like '%". $description[0] ."%'"; 
        $z=1; 
        while($z<$nb_description) 
        { 
            $critere.=" ". $etou ." description like '%". $description[$z] ."%'"; 
            $z++; 
        } 
    }// fin du else = si nom est vide 

    // NOMBRE D'ENREGISTREMENTS REPONDANT A LA REQUETE sur jeux 
    $requete = mysql_query("select * from jeux where ". $critere .""); 
    $nbT = mysql_num_rows($requete); 

    // DEFINITION DU MESSAGE A AFFICHER S'IL NY A PAS DE RESULTATS 
    if ($nbT==0) 
    { 
?> 
<div align="center"> 
<font color="#993366">Désolé, aucune fiche ne correspond à tous les critères indiqués. Vérifiez l'orthographe, diminuez le nombre de critères et relancez la recherche.</font> 
</div> 
<?php 
    } 
    else 
    { 
        // AFFICHAGE DES RESULTATS PAGE PAR PAGE 
        if ($nbT>1) 
        { 
            $s = "s"; 
        } // utilisé pour éviter une faute d'orthographe dans la ligne en dessous... 
?> 
<p><Il y a <b><?php echo($nbT); ?></b> réponse<?php echo($s); ?></p> 
<br> 
<?php 
        // on refait la requete mais en précisant les fiches à renvoyer 
        $limit=10; // vous pouvez faire varier ce nombre, voire même l'intégrer dans votre formulaire pour que ce soient vos visiteurs qui choisissent 
        $debut=$pge*$limit; 
        $requete2 = mysql_query("select * from jeux where ". $critere ." limit ". $debut .", ". $limit .""); 
?> 
<table border="2"> 
  <tr> 
    <td>Aperçu</td> 
    <td>Lien</td> 
    <td>Description</td> 
    <td>Note</td> 
    <td>Taille</td> 
    <td>Noter!</td> 
  </tr> 
<?php 
        while($row = mysql_fetch_array($requete2)) 
        { 
            $nom=stripslashes($row[nom]); 
            $description=$row[description]; 
            $mail=$note[note]; 
?> 
  <tr> 
    <td><a href="#" onClick="window.open('http://mazflo007.free.fr/jeux/swf.php?id=<?php echo($row['id']); ?>&categorie=<?php echo($row['categorie']); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=700, height=600');return(false);"><img src=http://mazflo007.free.fr/jeux/<?php echo($row['categorie']); ?>/images/<?php echo($row['id']); ?>.gif widht="100" height="100"></td> 
    <td><center><a href="#" onClick="window.open('http://mazflo007.free.fr/jeux/swf.php?id=<?php echo($row['id']); ?>&categorie=<?php echo($row['categorie']); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=700, height=600');return(false);"><?php echo($row['nom']); ?></a></center></td> 
    <td><?php echo($row['description']); ?></td> 
    <td><?php echo($row['taille']); ?></td> 
    <td><?php echo(round($row['moyenne'], 2)); ?>/20</td> 
    <td><a href="#"onClick="window.open('http://mazflo007.free.fr/jeux/note.php?id=<?php echo($row['id']); ?>','_blank','toolbar=0, location=0, directories=0, status=0, scrollbars=0, resizable=0, copyhistory=0, menuBar=0, width=100, height=100');return(false);"><div style="text-align: center">Noter le jeu</div></a></center></td> 
  </tr> 
<?php 
        }// fin du while (tant qu'il y a une ligne dans le tableau de résultats renvoyé par $requete2) 
?> 
</table> 
<?php 
        $nbpages = ceil($nbT/$limit); // ceil = plafond : pour arrondir à la valeur supérieure 
        // affichage de la première page si nécessaire (si nb total de pages supérieur à 5) 
        if($nbpages > 3 && $pge > 2) 
        { 
?> 
<a href="?pge=0&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b>Début</b></a>&nbsp; 
<?php 
        } 
        // AFFICHAGE DU LIEN PRECEDENT SI BESOIN EST (LA PREMIERE PAGES EST 0) 
        if ($pge > 0) 
        { 
            $precedent = $pge - 1; 
?> 
<a href="?pge=<?php echo($precedent); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b><fontcolor='#993366'><</font></b></a>&nbsp; 
<?php 
        } 
        // AFFICHAGE DES NUMEROS DE PAGE 
        $i = 0; 
        $j = 1; 
        if($nbT > $limit) 
        { 
            while($i < $nbpages) 
            { 
                //  pour limiter l'affichage du nombre de pages restantes 
                if ($i > ($pge - 3) && $i < ($pge + 3)) 
                { 
                    if($i != $pge) 
                    { 
?> 
<a href="?pge=<?php echo($i); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><?php echo($j); ?></a>&nbsp; 
<?php 
                    } 
                    else 
                    { 
?> 
<b><?php echo($j); ?></b>&nbsp; 
<?php 
                    }//met en gras le N° de la page en cours 
                }//fin du if i>pge.... 
                $i++; 
                $j++; 
            }//fin du while i<nbpages 
        }    //fin du if nbT>limit 
        // AFFICHAGE DU LIEN SUIVANT SI BESOIN EST 
        if($pge < ($nbpages - 1)) 
        { 
            $suivant = ($pge + 1); 
?> 
<a href="?pge=<?php echo($suivant); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b>></b></a>&nbsp; 
<?php 
        } 
        // affichage de la dernière page si nécessaire 
        if($nbpages > 3 && $pge < ($nbpages - 3)) 
        { 
            $fin=$nbpages-1; 
?> 
<a href="?pge=<?php echo($fin); ?>&nom=<?php echo($nom); ?>&description=<?php echo($description); ?>&f_etou=<?php echo($f_etou); ?>"><b>fin</b> (<?php echo($nbpages); ?>)</a> 
<?php 
        } 

    }// fin du else affichage des résultats. 
}// fin du si il y a eu saisie 
else 
{ // s'il n'y a pas eu saisie 
$pge         = isset($_GET['pge'])         ? $_GET['pge']         : 0; 
$f_etou      = isset($_GET['f_etou'])      ? $_GET['f_etou']      : "AND"; 
$nom         = isset($_GET['nom'])         ? $_GET['nom']         : ""; 
$description = isset($_GET['description']) ? $_GET['description'] : ""; 

$etou        = $f_etou; 
?> 
<p>Indiquez vos critères de choix</p> 
<?php 
} 
?> 
</body> 
</html> 
Que faut-il encore modifier ?

par Cyrano » 20 nov. 2005, 16:22

Sur les quelques lignes que j'ai proposée, il y a une que je n'ai pas modifiée qui est déjà dans ton code:
$etou        = $f_etou; 
Quant à l'instruction que tu ne saisis pas, on appele ça un "Opérateur ternaire".

L'instruction :
$var = isset($_GET['var']) ? $_GET['var'] : "autre valeur";
Aurait pu s'écrire de la manière suivante pour un résultat strictement identique:
isset($_GET['var'])
{
    $var = $_GET['var'];
}
else
{
    $var = "autre valeur";
}
En d'autres termes, si la condition précédant le "?" retourne TRUE, alors on affecte à la variable la valeur suivant immédiatement le "?". Le ":" fait ici office de else et dans le cas où la condition testée retourne FALSE, c'est la valeur suivant ce ":" qui sera alors affectée à la variable $var.