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"> 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>
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 :
[php]$description = implode(" ", $description);[/php]
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:
[php]<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>[/php]