<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"> Nom<br>
<input type="text" name="description" size="20"> 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>
<?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>
<?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>
<?php
}
else
{
?>
<b><?php echo($j); ?></b>
<?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>
<?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.$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.$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 ?$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"> Nom<br>
<input type="text" name="description" size="20"> 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>
<?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>
<?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>
<?php
}
else
{
?>
<b><?php echo($j); ?></b>
<?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>
<?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>