Sessions
Posté : 11 avr. 2013, 06:41
Bonjour à tous,
Voilà, je suis en train de développé une nouvelle version d'un site web,
Auparavant j'avais mon formulaire de recherche sur une page indépendante au traitement, donc 2 pages.
J'ai voulu inclure le formulaire de recherche dans la page de traitement mais sans succès.
Donc avant, research-form.php, formulaire banal mais avec :
et puis search-result, la page de traitement.
Indépendant cela fonctionne correctement.
Voilà le code de la page :
(research-form.php correspond au formulaire de recherche inclu dans la page.)
page search-result.php (traitement + formulaire).
Merci beaucoup, je suis vraiment désespéré j'ai demandé sur pas mal de forum mais pas de solution qui marche :
On m'a proposé,
Mais ça n'a pas changé la donne...
Voilà, je suis en train de développé une nouvelle version d'un site web,
Auparavant j'avais mon formulaire de recherche sur une page indépendante au traitement, donc 2 pages.
J'ai voulu inclure le formulaire de recherche dans la page de traitement mais sans succès.
Donc avant, research-form.php, formulaire banal mais avec :
$_SESSION['recherche'] = array(); en plus. et puis search-result, la page de traitement.
Indépendant cela fonctionne correctement.
Voilà le code de la page :
(research-form.php correspond au formulaire de recherche inclu dans la page.)
page search-result.php (traitement + formulaire).
<?php
session_start();
$_SESSION['recherche'] = array();
?>
<!-- Top -->
<?php
include 'includes/top.php';
?>
<!-- Fin du Top -->
<!-- Formulaire de recherche -->
<?php
include 'blocs/research-form.php';
?>
<!-- Fin du formulaire de recherche -->
<?
if(empty($_SESSION['recherche'])){
// gestion du where
$where = array();
$filter = function($p) use (&$where) {
if ((isset($_POST[$p]) && strlen($_POST[$p]))) {
$where[] = "$p = '".mysql_real_escape_string($_POST[$p])."'";
$_SESSION['recherche'][$p] = $_POST[$p];
}
};
$filter('type');
$filter('bien');
$filter('habimm');
$filter('type2');
$filter('loc');
$prix_min_convert = str_replace(' ', '', $_POST['budget_min']);
$prix_min = (isset($prix_min_convert) && ctype_digit($prix_min_convert)) ? $prix_min_convert : 0;
$prix_max_convert = str_replace(' ', '', $_POST['budget_max']);
$prix_max = (isset($prix_max_convert) && ctype_digit($prix_max_convert)) ? $prix_max_convert : 999999999;
$_SESSION['recherche']['budget_min'] = $prix_min;
$_SESSION['recherche']['budget_max'] = $prix_max;
/// on crée une variable $requete pour faciliter l'écriture de la requête SQL.
$ville = htmlspecialchars($_POST['ville']);
echo $ville;
$where[] = "(prix BETWEEN $prix_min AND $prix_max) AND `list_villes`.`ville` LIKE '%$ville%' AND `list_villes`.`id` LIKE `list_biens`.`idville`";
$sql_where = ' WHERE '.implode(' AND ', $where);
$_SESSION['recherche']['sql_where'] = $sql_where;
// gestion du tri
if ($_POST['tri'] == true) {
$order_by = (isset($_POST['tri']) && ($_POST['tri'] === 'DESC')) ? 'DESC' : 'ASC';
$sql_order_by = "ORDER BY prix $order_by";
$_SESSION['recherche']['tri'] = $order_by;
$_SESSION['recherche']['sql_order_by'] = $sql_order_by;
}
else {
$sql_order_by = "ORDER BY `list_biens`.`id` DESC";
$_SESSION['recherche']['sql_order_by'] = $sql_order_by;
}
}
else {
// on récupère les morceaux de sql assemblés précédemment
$sql_where = $_SESSION['recherche']['sql_where'];
$sql_order_by = $_SESSION['recherche']['sql_order_by'];
}
$target_page = "search-result.php";
echo "SELECT * FROM `list_biens`,`list_villes` $sql_where $sql_order_by";
$result = mysql_query ("SELECT * FROM `list_biens`,`list_villes` $sql_where $sql_order_by $sql_limit") or die(mysql_errno().' :: '.mysql_error());
if ($anno==' ') {
echo'<i>Aucun résultat pour cette recherche.</i>';
exit();
}
// on compte le nombre total d'enregistrements renvoyés par la requête filtrée
$sql = 'SELECT COUNT(*) AS nbOfRec FROM `list_biens`, `list_villes` '.$sql_where;
$qry = mysql_query($sql) or die(mysql_errno().' :: '.mysql_error());
$nb_records = mysql_result($qry, 0, 0);
echo' <b>'.$nb_records.' bien(s) correspondent à vos critères.
<a href="form_recherche.php" style="color:#ff40a0;text-decoration:none;">Faire une nouvelle recherche.</a></b>';
// on vérifie si la page demandée est dans les limites fixées par la pagination
$nb_items_per_page = 5;
$nb_pages = ceil($nb_records / $nb_items_per_page);
$asked_page = (isset($_GET['page']) && ctype_digit($_GET['page']) && ($_GET['page']))
? (int) $_GET['page']
: 1;
if ($nb_records === 0) {
$asked_page = 1;
}
else
if ($asked_page > $nb_pages) {
// si la page demandée est supérieure au nombre total de pages alors
// page demandée = dernière page
$asked_page = $nb_pages;
}
// on détermine la clause LIMIT du sql à partir des données de pagination
if ($asked_page < 0) {
$asked_page = 1;
}
$offset = ($asked_page - 1) * $nb_items_per_page;
if ($offset < 0) {
$offset = 0;
}
$length = $nb_items_per_page;
$sql_limit = "LIMIT $offset, $length";
// on extrait les données à afficher
$sql = "SELECT * FROM `list_biens`, `list_villes` $sql_where $sql_order_by $sql_limit";
$data = mysql_query($sql) or die(mysql_error());
// PAGINATION //
// je suppose que ton index affiche 10 pages
$index_range = 4;
// détermination des bornes à afficher
if ($nb_pages <= $index_range) {
$index_start = 1;
$index_end = $nb_pages;
}
else
if ($asked_page === 1) {
$index_start = 1;
$index_end = $index_range;
}
else {
$index_start = $asked_page;
$index_end = (($index_start + $index_range) > $nb_pages) ? $nb_pages : ($index_start + $index_range);
}
// affichage des liens spéciaux : Premier Précedent Suivant Dernier
$show_first = ($index_start > 1);
$show_prev = ($asked_page > 1);
$show_next = ($asked_page < $nb_pages);
$show_last = ($index_end < $nb_pages);
// génération des la pagination
$paginate = array();
$paginate[] = '<div class="paginate">';
// lien Précédent
if ($show_prev) {
$paginate[] = '<font size="5"><b><a href="'.$target_page.'?page='.($asked_page - 1).'" style="color:#ff40a0;text-decoration:none;">Page précédente <<</font></b></a> ';
}
// affichage des numéros des pages
for ($i = $index_start; $i <= $index_end; ++$i) {
$paginate[] = ($i === $asked_page)
? '<span class="current"><font color="#ff40a0" size="5"><b>'.$i.'</b></font></span> '
: '<font size="5"><b><a href="'.$target_page.'?page='.$i.'" style="color:#000000;text-decoration:none;">'.$i.'</font></b></a> ';
}
// lien Suivant
if ($show_next) {
$paginate[] = ' <font size="5" color="#ff40a0"><b><a href="'.$target_page.'?page='.($asked_page + 1).'" style="color:#ff40a0;text-decoration:none;">Page suivante >></font></b></a>';
}
$paginate[] = '</div>';
?>
Le problème, si je lance la recherche, par exemple 122 biens trouvé, sur la 2ème page etc... (pagination) il va me sortir 142 biens soient tout les biens (session annulé).Merci beaucoup, je suis vraiment désespéré j'ai demandé sur pas mal de forum mais pas de solution qui marche :
On m'a proposé,
Code : Tout sélectionner
//ça c'est juste la première fois qu'on arrive sur la page
if(empty($_SESSION['recherche'])){
$_SESSION['recherche']=array();
}
//puis plus bas,
if(sizeof($_SESSION['recherches'])==0){
//affecte ton where
}