[PHP] Problème de valeurs de checkbox

Fermé
aeropad Messages postés 1 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 7 mars 2007 - 7 mars 2007 à 09:33
bbar Messages postés 436 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 31 octobre 2008 - 7 mars 2007 à 17:34
Bonjour,

je rencontre un problème actuellement que je n'arrive pas à résoudre :

j'ai une page lsnews.php qui affiche la liste des news, sur cette page dans un formulaire l'on peut cocher différentes chexkbox (préalablement selectionner dans un table "cat") pour choisir les catégories des news que l'on affichera en cliquant sur un bouton ok

mais voila, la page lsnews affiche 10 résultats par page. Donc dès que l'on a effectuer son choix des catégories des news à afficher et que l'on clique sur Ok , les 10 premieres s'affichent correctement, cependant en cliquant sur le lien de la page 2 pour voir les 10 prochaines news, les valeurs des checkbox cochés ne sont plus transmises aux pages suivantes et donc on se retrouve avec une page blanche...

ce qui est bizarre c'est que le du chiffrage des pages est juste.

Comment peut-on se rendre sur la page avec les 10 prochains résultats tout en ayant que certaines catégories à afficher (choisi au tout début avec le formulaire) ????

Comment transmettres les catégories cochés au tout début sur les pages suivantes qui affichent le reste des résultats???

Merci d'avance pour votre aide

qq morceau de code :

La boucle qui récupère les différentes catégories pour les afficher avec un checkbox et le bouton ok qui permet d'afficher les news des catégories sélectionnées :

<form method="post" action="?page=lsnews&affichage">
while($donnees_cat = mysql_fetch_array($requete_cat))
{

?><td width="8%">
<table cellpadding="0" cellspacing="0" border="0" width="100%"><tr>
<td><input type="checkbox" class="checkbox" id="list" name="news[]" value="<? echo $donnees_cat['cat']; ?>" /></td>
</tr><tr><td height="2px"></td></tr></table></td>
<td width="92%" class="txt_cat" align="left"><img src="./img/cat/<? echo $donnees_cat['icone']; ?>" border="0" alt="cat" /> <? echo $donnees_cat['cat']; ?></td><?
}

<input type="submit" value="Afficher"></form>



on affiche les news des catégories selectionnées :

if (isset($_GET['affichage'])) //si on choisi des catégories spécifiques sinon on fait un affichage normal des news (toutes les catégories)
{

$sql = 'SELECT n.id, n.titre, n.cat, n.icone, n.pseudo, n.contenu, n.timestamp, c.cat, c.icone FROM news n LEFT JOIN cat c ON n.cat=c.cat';

if(!empty($_POST['news']))
{

 /* On complète la requête avec une clause de tri */
    $sql .= ' WHERE n.cat="'.$_POST['news'].'"';
	
	for ($i = 0, $c = count($_POST['news']); $i < $c; $i++) {
     $sql .= ' OR n.cat="' . $_POST['news'][$i] . '"';
    }
	
	$sql .= ' ORDER BY timestamp DESC LIMIT ' . $from . ', ' . $limit_par_page .'';
	
    $requete_liste_news = mysql_query($sql); ?>

while ($donnees = mysql_fetch_array($requete_liste_news)){
//affichage des news
}



Système de pagination :

-en haut de la page :


$limit_par_page = 5;
	
	if (isset($_GET['p']) AND !empty($_GET['p']))
	{
        $p = intval($_GET['p']);
	}
	else
	{
        $p = 1;
	}
	
	$from = ($p - 1) * $limit_par_page;



-en bas de la page :

 $sql2 = 'SELECT count(id) AS nbnews FROM news';
 $sql2 .= ' WHERE cat="'.$_POST['news'].'"';
	
	for ($i = 0, $c = count($_POST['news']); $i < $c; $i++) {
     $sql2 .= ' OR cat="' . $_POST['news'][$i] . '"';
    }
		
	$reqsql2 = mysql_query($sql2);
	$donnees2 = mysql_fetch_assoc($reqsql2);

	$nb_pages = ceil($donnees2['nbnews'] / $limit_par_page);
	
if ($donnees2['nbnews'] <= $limit_par_page)
{
	echo '';
}
else
{
	for ($i=1 ; $i<=$nb_pages ; $i++)
	{

        if ($i == $p)
        {
        	echo $i';
        }
        else
        {
        	echo '<a href="?page=lsnews&affichage&p='.$i.'">'.$i.'</a>';
		}
	}
	
}
A voir également:

1 réponse

bbar Messages postés 436 Date d'inscription mercredi 27 septembre 2006 Statut Membre Dernière intervention 31 octobre 2008 140
7 mars 2007 à 17:34
salut,
la partie de code suivante m'intrigue :
	for ($i = 0, $c = count($_POST['news']); $i < $c; $i++) {
     $sql .= ' OR n.cat="' . $_POST['news'][$i] . '"';

as tu vérifié le type de la variable $_POST['news'] ? Si tu n'a fait aucune modification dessus, il s'agit d'une chaine de caractère et le résultat de count($_POST['news']) sera 1. Du coup t'as qu'une seule itération dans ton for. Est-ce bien ce que tu voulais ? Si ce n'est pas le cas, il te vas falloir recomposer un tableau après récupération de ta variable $_POST['news'].
@+
0