Gabzoe Posté 18 Septembre 2006 Posté 18 Septembre 2006 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 !!! D'avance merci à ceux et/ou celles qui se pencheront sur ce problème
Dan Posté 18 Septembre 2006 Posté 18 Septembre 2006 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
Gabzoe Posté 18 Septembre 2006 Auteur Posté 18 Septembre 2006 Re-salut Dan ! Mes variables sont récupérées ainsi : $num_mois=$_POST['num_mois'];$evenement2=$_POST['evenement2'];$departement2=$_POST['departement2'];
georges Posté 18 Septembre 2006 Posté 18 Septembre 2006 $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...
Gabzoe Posté 18 Septembre 2006 Auteur Posté 18 Septembre 2006 Salut Georges ! J'ai pas tout saisi ! 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 !
georges Posté 18 Septembre 2006 Posté 18 Septembre 2006 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..
Gabzoe Posté 18 Septembre 2006 Auteur Posté 18 Septembre 2006 A Georges. Ok merci, j'essaye et je te tiens au courant.
Gabzoe Posté 18 Septembre 2006 Auteur Posté 18 Septembre 2006 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"> <?phpdo { ?> <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
georges Posté 18 Septembre 2006 Posté 18 Septembre 2006 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"...
Dan Posté 19 Septembre 2006 Posté 19 Septembre 2006 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
Gabzoe Posté 20 Septembre 2006 Auteur Posté 20 Septembre 2006 Bonjour ! A Dan : Oui c'est la confusion totale , 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 !
georges Posté 20 Septembre 2006 Posté 20 Septembre 2006 (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é 20 Septembre 2006 par georges
Gabzoe Posté 20 Septembre 2006 Auteur Posté 20 Septembre 2006 Il faut croire que j'ai des mauvaises ondes qui se répercutent sur Dan !!! Mais bon je suis douée pour embrouiller les gens ! Donc je revois ma copie et je vous tiens au courant !
Gabzoe Posté 22 Septembre 2006 Auteur Posté 22 Septembre 2006 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 ! ), 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 ?
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant