Aller au contenu

Erreur pagination


Sujets conseillés

Posté

Bonjour à tous !

Voilà j'ai un moteur multicritères (3 exactement) et lorsque je le valide ça m'affiche bien le résultat dans une 1ère page, mais quand je clic sur suivant cela m'affiche le message d'erreur suivant :

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND MONTH(datefin)>= AND departementeven='' LIMIT 5, 5' at li

Le code est bien compliqué avec dream, mais je vais essayer de m'y retrouver et d'afficher ce qui correspondrait déjà à la requête !

$maxRows_Recordset2 = 5;
$pageNum_Recordset2 = 0;
if (isset($HTTP_GET_VARS['pageNum_Recordset2'])) {
$pageNum_Recordset2 = $HTTP_GET_VARS['pageNum_Recordset2'];
}
$startRow_Recordset2 = $pageNum_Recordset2 * $maxRows_Recordset2;

$query_Recordset2 = "SELECT evenement, villeeven, descriptif, datedebut, datefin ";
$query_Recordset2.= " FROM tb_evenements ";
$query_Recordset2.= " WHERE MONTH(datedebut)<=$num_mois AND MONTH(datefin)>=$num_mois ";
if(!empty($evenement2)) {// si un événement est séléctionné, on ne ramene que les enregistrements associés à celui-ci
$query_Recordset2.= " AND evenement='$evenement2' ";
}
// tu pourras aussi envisager un if similaire ici, si un jour tu veux faire une recherche sur tous les départements
$query_Recordset2.= " AND departementeven='$departement2' ";

$query_limit_Recordset2 = sprintf("%s LIMIT %d, %d", $query_Recordset2, $startRow_Recordset2, $maxRows_Recordset2);
$Recordset2 = mysql_query($query_limit_Recordset2, $connexion) or die(mysql_error());
// traitement du résultat déplacé dans la boucle while

if (isset($HTTP_GET_VARS['totalRows_Recordset2'])) {
$totalRows_Recordset2 = $HTTP_GET_VARS['totalRows_Recordset2'];
} else {
$all_Recordset2 = mysql_query($query_Recordset2);
$totalRows_Recordset2 = mysql_num_rows($all_Recordset2);
}
$totalPages_Recordset2 = ceil($totalRows_Recordset2/$maxRows_Recordset2)-1;

$queryString_Recordset2 = "";
if (!empty($HTTP_SERVER_VARS['QUERY_STRING'])) {
$params = explode("&", $HTTP_SERVER_VARS['QUERY_STRING']);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, "pageNum_Recordset2") == false &&
stristr($param, "totalRows_Recordset2") == false) {
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString_Recordset2 = "&" . implode("&", $newParams);
}
}
$queryString_Recordset2 = sprintf("&totalRows_Recordset2=%d%s", $totalRows_Recordset2, $queryString_Recordset2);

Ce que je ne comprend pas c'est que ça fonctionne bien à la 1ère page mais pas aux suivantes, bizarre !!! :wacko:

D'avance merci à ceux et/ou celles qui se pencheront sur ce problème

Posté

Bonjour,

A voir la requête, il semble que les variables $departement2 et $num_mois ne soient pas initialisées...

Comment récupères-tu ces variables ?

Dan

Posté

Re-salut Dan !

Mes variables sont récupérées ainsi :

$num_mois=$_POST['num_mois'];
$evenement2=$_POST['evenement2'];
$departement2=$_POST['departement2'];

Posté

$query_Recordset2.= " WHERE MONTH(datedebut)<=$num_mois AND MONTH(datefin)>=$num_mois ";

peut-être également parce lors du 1° appel à la page, ces variables sont connues et traitées mais qu'ensuite elles ne sont plus enregistrées ? pour ma part, je les "enregistre" dans des champs en hidden, de page en page...

Posté

Salut Georges !

J'ai pas tout saisi ! :wacko:

Si j'utilise hidden (dont je ne connais rien d'ailleurs !) est-ce qu'il faut que je modifie les champs concernés de ma bdd, ou je change seulement ma requête, ou les 2 ?

Une petite explication sur ce cher hidden ne me ferait pas de mal ! :blush:

Posté
Voilà j'ai un moteur multicritères (3 exactement) et lorsque je le valide ça m'affiche bien le résultat dans une 1ère page

si toutefois j'ai bien compris ton message initial :

pour que ton moteur fonctionne, tu utilises bien un formulaire... la première fois, les données sont bien reconnues et traitées.. mais pour que lors de la pagination la requête soit basée sur les mêmes données que lors de la 1° soumission du formulaire, il faut (c'est ce que je fais) les "rappeler" dans le formulaire via les champs mis en hidden :

<input type="hidden" name="datedebut" value="<? echo $datedebut;?>">
etc..

Posté

A Georges.

Ok merci, j'essaye et je te tiens au courant.

Posté

Bon j'ai fait les modif dans le formulaire, j'ai rajouté type="hidden" pour chaque champ, mais du coup j'ai récolté plus de messages d'erreur !

Notice: Undefined index: num_mois in c:\program files\easyphp1-8\www\gitesnormandie\evenementsdecouvertesresultat.php on line 5

Notice: Undefined index: evenement2 in c:\program files\easyphp1-8\www\gitesnormandie\evenementsdecouvertesresultat.php on line 6

Notice: Undefined index: departement2 in c:\program files\easyphp1-8\www\gitesnormandie\evenementsdecouvertesresultat.php on line 7

Erreur de syntaxe près de 'AND MONTH(datefin)>= AND departementeven='' LIMIT 5, 5' à la ligne 1

Le formulaire :

<form name="form1" method="post" action="evenementsdecouvertesresultat.php">
<p>Période
<select type="hidden" name="num_mois" id="select1">
<option value="1">Janvier</option>
<option value="2">Février</option>
<option value="3">Mars</option>
<option value="4">Avril
<option value="5">Mai</option>
<option value="6">Juin</option>
<option value="7">Juillet</option>
<option value="8">Août</option>
<option value="9">Septembre</option>
<option value="10">Octobre</option>
<option value="11">Novembre</option>
<option value="12">Décembre</option>
</select>
Département
<select type="hidden" name="departement2" id="departement2">
<?php
do {
?>
<option value="<?php echo $row_Recordset1['departementeven']?>"><?php echo $row_Recordset1['departementeven']?></option>
<?php
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
$rows = mysql_num_rows($Recordset1);
if($rows > 0) {
mysql_data_seek($Recordset1, 0);
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
}
?>
</select>
Thème
<select type="hidden" name="evenement2" id="select">
<option value="">Tous les événements</option>
<?php
while ($row_rs2evenement = mysql_fetch_assoc($rs2evenement)) {
?>
<option><?php echo $row_rs2evenement['evenement']?></option>
// le value n'est pas utile s'il a la meme valeur que le libellé
<?php
} // j'ai inversé le do-while en un while simple (s'il n'y a pas d'élément il ne rentre pas dedans)

?>
</select>
<input class="Bouton" type="submit" name="Submit2" value="Rechercher">
</p>
</form>
<?php if(isset($_POST['departement2'])){echo $_POST['departement2'];}
//la c'est juste pour voir si notre variable departement2 a ete definit. C'est $_POST['departement2'] qui te permet de faire le filtre dans ta base de données
?>
<p class="h1"> </p>
<p class="h1">Recherche découvertes</p>
<form action="decouvertesresultat.php" method="post" name="formdepart" id="formdepart">
<p> Calvados
<input name="departement[]" type="checkbox" id="calvadosdep" value="calvados">
Manche
<input name="departement[]" type="checkbox" id="manchedep" value="manche">
Orne
<input name="departement[]" type="checkbox" id="ornedep" value="orne">
</p>
<p>
<input class="Bouton" type="submit" name="Submit3" value="Rechercher">
</p>
</form>

[Edit captain_torche]Merci d'utiliser la balise codebox pour les codes longs

Posté

le but du jeu pour que les valeurs se propagent lors de la pagination est de stocker les valeurs de départ sélectionnées par l'internaute dans des champs cachés dont on teste ensuite la valeur.. tu as quelques lacunes que mon manque de pédagogie ne saurait combler : tes variables sont indéfinies car ton code ne transmet aucune valeur... un select n'a rien à voir avec un input et ne peut être en type="hidden"...

Posté

Bonjour,

Tu sembles ne pas avoir compris ce qui t'a été expliqué.

Tu NE PEUX PAS mettre un type="hidden" sur une balise select.

Mais par contre, si tu veux récupérer des variables sur ta page 1 et les transmettre à la page 2, il faut utiliser une balise supplémentaire de type "hidden" (cachée)

Donc tu mets par exemple:

<select type="hidden" name="page" value="<?php echo $page ?>" />

si tu veux transmettre la page courante...

Dan

Posté

Bonjour !

A Dan : Oui c'est la confusion totale :wacko: , désolée mais j'ai beaucoup de mal (et pas beaucoup de temps non plus malheureusement) à m'imprégner du code, mais j'essaye !

Donc je peux faire aussi à ta façon, et donc je devrais avoir ma page courante ($page) qui correspond à ma 1ère page de résultat, c'est bien ça ?

J'aurais d'autres questions à te poser sur tout ça, mais déjà savoir si j'ai bien suivi jusqu'ici avant !

A bientôt !

Posté (modifié)

Donc tu mets par exemple:
<select type="hidden" name="page" value="<?php echo $page ?>" />
si tu veux transmettre la page courante

je pense que là même Dan s'embrouille..

il s'agit plutôt de :

<input type="hidden" name="page" value="<?php echo $page ?>" />
si tu veux transmettre la page courante

Modifié par georges
Posté

Il faut croire que j'ai des mauvaises ondes qui se répercutent sur Dan !!! :whistling:

Mais bon je suis douée pour embrouiller les gens !

Donc je revois ma copie et je vous tiens au courant !

Posté

Bonjour à tous !

Bon j'ai opté pour la solution de Georges tout compte fait.

Mais et oui y a un "mais" (sinon c'est pas marrant ! :rolleyes: ), maintenant quand je fais suivant j'ai bien toute ma page qui s'affiche mais dans le tableau il n'y a rien, pourtant au niveau de la pagination il me transmet bien le nombre d'affichage par rapport au nombre d'enregistrements. Bizarre, non ?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...