Je reviens vers vous avec un souci d'utilisation des sessions.
J'ai une page qui contient deux blocs. Celui de gauche est composé d'un formulaire de recherche multicritère type agence immobilière avec le choix d'un type d'habitation (sous forme de checkbox), nombre de pièces (5 checkbox), budget(liste déroulante) et ville(liste déroulante), etc...
Au submit du formulaire, une liste de biens immobiliers s'affichent alors en liste dans le bloc de droite.
Si je souhaite avoir plus d'info sur un bien précis, je clique sur un lien présent sur chaque biens dans la liste et qui m'envoi sur la page contenant ses informations. Je peux ensuite retourner sur ma première page via un lien de retour, celle qui contient les deux blocs.
Mon problème intrevient à ce niveau là. En effet, les critères qui avaient été seléctionnés dans le formulaire ont disparus et la recherche ne correspond donc plus à celle que j'avais avant d'aller sur la fiche des informations du bien que j'avais choisi.
Je me suis donc porté vers les sessions pour pouvoir sauvegarder les données envoyées en POST par le formulaire au submit.
$_SESSION['frm_panier']['tri'] = $_POST['tri'];
$_SESSION['frm_panier']['maison'] = $_POST['maison'];
$_SESSION['frm_panier']['appart'] = $_POST['appart'];
$_SESSION['frm_panier']['1p'] = $_POST['1p'];
$_SESSION['frm_panier']['2p'] = $_POST['2p'];
$_SESSION['frm_panier']['3p'] = $_POST['3p'];
$_SESSION['frm_panier']['4p'] = $_POST['4p'];
$_SESSION['frm_panier']['5p'] = $_POST['5p'];
$_SESSION['frm_panier']['mini'] = $_POST['mini'];
$_SESSION['frm_panier']['maxi'] = $_POST['maxi'];
$_SESSION['frm_panier']['ville'] = $_POST['ville'];
$_SESSION['frm_panier']['ville_proche'] = $_POST['ville_proche'];
J'ai fait des echos de la valeur que prenait chacun des paramètres enregistrés dans la session sur les deux pages : celle de la recherche et celle du bien contenant les informations.Au submit du formulaire, les valeurs s'inscrivent bien sur la première page. Quand je clique sur le lien me menant sur la page des informations du biens, je récupère bien les mêmes valeurs.
Par contre, quand je retourne sur la première page, toutes les valeurs ont disparu.
Je comprend pas tout, donc si quelqu'un pouvait m'aiguiller vers une solution probable?
Je vous envoi le code de ma page de recherche en entier. C'est un peu long, je m'en excuse mais au moins vous aurez toutes les données
<?php session_start();
$idsession= session_id();
//unset($_SESSION['frm_panier']);
$_SESSION['frm_panier']['tri'] = $_POST['tri'];
$_SESSION['frm_panier']['maison'] = $_POST['maison'];
$_SESSION['frm_panier']['appart'] = $_POST['appart'];
$_SESSION['frm_panier']['1p'] = $_POST['1p'];
$_SESSION['frm_panier']['2p'] = $_POST['2p'];
$_SESSION['frm_panier']['3p'] = $_POST['3p'];
$_SESSION['frm_panier']['4p'] = $_POST['4p'];
$_SESSION['frm_panier']['5p'] = $_POST['5p'];
$_SESSION['frm_panier']['mini'] = $_POST['mini'];
$_SESSION['frm_panier']['maxi'] = $_POST['maxi'];
$_SESSION['frm_panier']['ville'] = $_POST['ville'];
$_SESSION['frm_panier']['ville_proche'] = $_POST['ville_proche'];
echo 'tri :'.$_SESSION['frm_panier']['tri'].'<br/>';
echo 'maison :'.$_SESSION['frm_panier']['maison'].'<br/>';
echo 'appart :'.$_SESSION['frm_panier']['appart'].'<br/>';
echo '1p :'.$_SESSION['frm_panier']['1p'].'<br/>';
echo '2p :'.$_SESSION['frm_panier']['2p'].'<br/>';
echo '3p :'.$_SESSION['frm_panier']['3p'].'<br/>';
echo '4p :'.$_SESSION['frm_panier']['4p'].'<br/>';
echo '5p :'.$_SESSION['frm_panier']['5p'].'<br/>';
echo 'mini :'.$_SESSION['frm_panier']['mini'].'<br/>';
echo 'maxi :'.$_SESSION['frm_panier']['maxi'].'<br/>';
echo 'ville :'.$_SESSION['frm_panier']['ville'].'<br/>';
echo 'ville proche :'.$_SESSION['frm_panier']['ville_proche'].'<br/>';
if(($_SESSION['frm_panier']['tri']!='') && ($_SESSION['frm_panier']['tri'] == 1)) {
$tri = " ORDER BY nom_ville ASC";
} elseif (($_SESSION['frm_panier']['tri']!='') && ($_SESSION['frm_panier']['tri'] == 2)) {
$tri = " ORDER BY prix_bien ASC";
}
mysql_select_db($database_conn_rocher, $conn_rocher);
$query_rs_selection2 = "SELECT COUNT(bien_id) FROM tbl_panier WHERE id_session= '".$idsession."'";
$rs_selection2 = mysql_query($query_rs_selection2, $conn_rocher) or die(mysql_error());
$row_rs_selection2 = mysql_fetch_assoc($rs_selection2);
$query_rs_ville="SELECT DISTINCT ville_bien, id_ville, nom_ville FROM tbl_bien, tbl_ville WHERE tbl_bien.ville_bien=tbl_ville.id_ville AND mode_bien=1 ORDER BY nom_ville ASC ";
$rs_ville = mysql_query($query_rs_ville, $conn_rocher) or die(mysql_error());
$query_rs_prix="SELECT tranche_prix FROM tbl_prix_achat ORDER BY id_prix ASC ";
$rs_prix = mysql_query($query_rs_prix, $conn_rocher) or die(mysql_error());
$query_rs_prix2="SELECT tranche_prix FROM tbl_prix_achat ORDER BY id_prix DESC ";
$rs_prix2 = mysql_query($query_rs_prix2, $conn_rocher) or die(mysql_error());
//Prise en compte du type de biens
if (($_SESSION['frm_panier']['maison']!='') && ($_SESSION['frm_panier']['appart']!='')) {
$type = " AND type_bien <= 3 ";
} elseif (($_SESSION['frm_panier']['maison']!='') && ($_SESSION['frm_panier']['appart']!='')) {
$type = " AND type_bien <= 2 ";
} elseif ($_SESSION['frm_panier']['maison']!='') {
$type = " AND type_bien = 1 ";
} elseif ($_SESSION['frm_panier']['appart']!='') {
$type = " AND type_bien = 2 ";
}
//Prise en compte du nombre de pièces
if (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND nb_piece <= 1 ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND nb_piece <= 4 ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece <= 2 OR nb_piece >= 4) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece <= 3 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece >= 3) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND nb_piece >= 2 ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='')) {
$piece = " AND nb_piece <= 3 ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND (nb_piece <= 2 OR nb_piece = 4) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece <= 2 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece = 3 OR nb_piece = 4) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece = 3 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece >= 4) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND (nb_piece = 2 OR nb_piece = 3 OR nb_piece = 4) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 2 OR nb_piece >= 4) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 2 OR nb_piece = 3 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND nb_piece >= 3 ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['2p']!='')) {
$piece = " AND nb_piece <= 2 ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['3p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece = 3) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece = 4) ";
} elseif (($_SESSION['frm_panier']['1p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 1 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['3p']!='')) {
$piece = " AND (nb_piece = 2 OR nb_piece = 3) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND (nb_piece = 2 OR nb_piece = 4) ";
} elseif (($_SESSION['frm_panier']['2p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 2 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['4p']!='')) {
$piece = " AND (nb_piece = 3 OR nb_piece = 4) ";
} elseif (($_SESSION['frm_panier']['3p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND (nb_piece = 3 OR nb_piece >= 5) ";
} elseif (($_SESSION['frm_panier']['4p']!='') && ($_SESSION['frm_panier']['5p']!='')) {
$piece = " AND nb_piece >= 4 ";
} elseif ($_SESSION['frm_panier']['1p']!='') {
$piece = " AND nb_piece = 1 ";
} elseif ($_SESSION['frm_panier']['2p']!='') {
$piece = " AND nb_piece = 2 ";
} elseif ($_SESSION['frm_panier']['3p']!='') {
$piece = " AND nb_piece = 3 ";
} elseif ($_SESSION['frm_panier']['4p']!='') {
$piece = " AND nb_piece = 4 ";
} elseif ($_SESSION['frm_panier']['5p']!='') {
$piece = " AND nb_piece >= 5 ";
}
// Prise en compte du budget
if (($_SESSION['frm_panier']['maxi']) == '1000000+') {
if ($_SESSION['frm_panier']['mini']!='') {
$budget = " AND prix_bien >=".$_SESSION['frm_panier']['mini'];
}
} else {
if (($_SESSION['frm_panier']['mini']!='') && ($_SESSION['frm_panier']['maxi']!='')) {
$budget = " AND prix_bien >=".$_SESSION['frm_panier']['mini']." AND prix_bien <=".$_SESSION['frm_panier']['maxi'];
} elseif ($_SESSION['frm_panier']['mini']!='') {
$budget = " AND prix_bien >=".$_SESSION['frm_panier']['mini'];
} elseif ($_SESSION['frm_panier']['maxi']!='') {
$budget = " AND prix_bien <=".$_SESSION['frm_panier']['maxi'];
}
}
if ($_SESSION['frm_panier']['ville_proche']!='') {
if (($_SESSION['frm_panier']['ville']!='') && ($_SESSION['frm_panier']['ville'] != 'toutes')) {
// sélection des villes proches de la ville choisie
$query_rs_ville_proche = "SELECT ville_bien, ville_proche1, ville_proche2, ville_proche3, ville_proche4, ville_proche5 FROM tbl_bien WHERE ville_bien='".$_SESSION['frm_panier']['ville']."'";
$rs_ville_proche = mysql_query($query_rs_ville_proche, $conn_rocher) or die(mysql_error());
$row_rs_ville_proche = mysql_fetch_assoc($rs_ville_proche);
$ville1 = " AND (ville_bien = '".$_SESSION['frm_panier']['ville']."'";
if ($row_rs_ville_proche['ville_proche1'] != '') {
$ville2 = " OR ville_bien = ".$row_rs_ville_proche['ville_proche1'];}
if ($row_rs_ville_proche['ville_proche2'] != '') {
$ville3 = " OR ville_bien = ".$row_rs_ville_proche['ville_proche2'];}
if ($row_rs_ville_proche['ville_proche3'] != '') {
$ville4 = " OR ville_bien = ".$row_rs_ville_proche['ville_proche3'];}
if ($row_rs_ville_proche['ville_proche4'] != '') {
$ville5 = " OR ville_bien = ".$row_rs_ville_proche['ville_proche4'];}
if ($row_rs_ville_proche['ville_proche5'] != '') {
$ville6 = " OR ville_bien = ".$row_rs_ville_proche['ville_proche5'];}
$ville = $ville1.$ville2.$ville3.$ville4.$ville5.$ville6.") ";
}
} else {
if (($_SESSION['frm_panier']['ville']!='') && ($_SESSION['frm_panier']['ville'] != 'toutes')) {
$ville = " AND ville_bien = '".$_SESSION['frm_panier']['ville']."'";
}
}
$query_rs_resultat = "SELECT * FROM tbl_bien, tbl_ville WHERE tbl_bien.ville_bien=tbl_ville.id_ville AND mode_bien=1".$type.$piece.$budget.$ville.$tri;
$rs_resultat = mysql_query($query_rs_resultat) or die(mysql_error());
$query_rs_compte = "SELECT COUNT(id_bien) FROM tbl_bien, tbl_ville WHERE tbl_bien.ville_bien=tbl_ville.id_ville AND mode_bien=1".$type.$piece.$budget.$ville;
$rs_compte = mysql_query($query_rs_compte or die(mysql_error());
$compte = mysql_fetch_assoc($rs_compte);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<script type="text/javascript" src="swfobject.js"></script>
<style>
div#menu2 {
background:url(Images/fond/menu-actif.jpg) center no-repeat;
}
div#menu2 a {
color:#FFFFFF;
}
</style>
</head>
<body>
<div id="global">
<div id="logo">
</div>
<div id="cadre">
<div id="bandeau">
<?php include ('menu.php'); ?>
</div>
<div id="contenu">
<div id="gauche">
<div id="recherche">
<p class="titre1">MODIFIER LA RECHERCHE EN COURS</p>
<table class="recherche">
<form id="frm_recherche" name="frm_recherche" method="POST" action="achat-immobilier.php">
<tr>
<td><img src="Images/fond/puce-orange.jpg"/></td>
<td><input type="radio" name="tri" id="tri" value="1" <?php if ($_SESSION['frm_panier']['tri'] == 1) { echo 'checked="checked"';} ?>/> Trier les résultats par Ville</td>
</tr>
<tr>
<td><img src="Images/fond/puce-orange.jpg"/></td>
<td><input type="radio" name="tri" id="tri" value="2" <?php if ($_SESSION['frm_panier']['tri'] == 2) { echo 'checked="checked"';} ?>/> Trier les résultats par Prix</td>
</tr>
<tr>
<td colspan="2">
<p class="sous-titre1">ACHAT DE :</p>
</td>
</tr>
<tr>
<td><img src="Images/fond/puce-grise.jpg"/></td>
<td>
<input type="checkbox" name="maison" id="maison" value="1" <?php if ($_SESSION['frm_panier']['maison'] == 1) { echo 'checked="checked"';} ?>/> Maison
<input type="checkbox" name="appart" id="appart" value="2"<?php if ($_SESSION['frm_panier']['appart'] == 2) { echo 'checked="checked"';} ?>/> Appartement
</td>
</tr>
<tr>
<td><img src="Images/fond/puce-grise.jpg"/></td>
<td>Nb pièces <input type="checkbox" name="1p" id="1p" value="1"<?php if ($_SESSION['frm_panier']['1p'] == 1) { echo 'checked="checked"';} ?>/> 1
<input type="checkbox" name="2p" id="2p" value="2"<?php if ($_SESSION['frm_panier']['2p'] == 2) { echo 'checked="checked"';} ?>/> 2
<input type="checkbox" name="3p" id="3p" value="3"<?php if ($_SESSION['frm_panier']['3p'] == 3) { echo 'checked="checked"';} ?>/> 3
<input type="checkbox" name="4p" id="4p" value="4"<?php if ($_SESSION['frm_panier']['4p'] == 4) { echo 'checked="checked"';} ?>/> 4
<input type="checkbox" name="5p" id="5p" value="5"<?php if ($_SESSION['frm_panier']['5p'] == 5) { echo 'checked="checked"';} ?>/> 5+
</td>
</tr>
<tr>
<td><img src="Images/fond/puce-grise.jpg"/></td>
<td>Prix Mini <select name="mini" id="mini">
<?php
echo '
<option value="0"';
if ($_SESSION['frm_panier']['mini'] == 0) { echo 'selected="selected"';} echo '>0</option>';
while ($row_rs_prix= mysql_fetch_assoc($rs_prix)) {
echo '
<option value="'.$row_rs_prix['tranche_prix'].'"';
if ($_SESSION['frm_panier']['mini'] == $row_rs_prix['tranche_prix']) {
echo 'selected="selected"';} echo '>'.$row_rs_prix['tranche_prix'].'</option>';
} ?>
</select>
Maxi <select name="maxi" id="maxi">
<?php
while ($row_rs_prix2= mysql_fetch_assoc($rs_prix2)) {
echo '
<option value="'.$row_rs_prix2['tranche_prix'].'"';
if ($_SESSION['frm_panier']['maxi'] == $row_rs_prix2['tranche_prix']) {
echo 'selected="selected"';} echo '>'.$row_rs_prix2['tranche_prix'].'</option>';
} ?>
</select>
</td>
</tr>
<tr>
<td><img src="Images/fond/puce-grise.jpg"/></td>
<td>Choisissez une ville</td>
</tr>
<tr>
<td colspan="2"><select name="ville" id="ville">
<option value="toutes">Toutes les villes</option>
<?php while ($row_rs_ville = mysql_fetch_assoc($rs_ville)) { echo '
<option value="'.$row_rs_ville['id_ville'].'"';
if ($_SESSION['frm_panier']['ville'] == $row_rs_ville['id_ville']) { echo 'selected="selected"';} echo '
>'.$row_rs_ville['nom_ville'].'</option>' ;}?>
</select>
</td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name="ville_proche" id="ville_proche" value="1" <?php if ($_SESSION['frm_panier']['ville_proche'] == 1) { echo 'checked="checked"';} ?>/> Inclure les villes proches</td>
</tr>
<tr>
<td colspan="2" class="envoi"><label>
<input type="submit" name="Submit" class="bouton "value="Modifier" />
</label></td>
</tr>
</form>
</table>
<div id="selection1"><p>Votre sélection contient <b><?php echo $row_rs_selection2['COUNT(bien_id)']; ?></b> biens immobiliers </p><?php if ($row_rs_selection2['COUNT(bien_id)'] == 0) { echo 'pour le moment.';} else { echo '<a href="selection-bien-immobilier.php">>>> Voir votre sélection <<<</a>';}?></div>
</div>
</div>
<div id="droite">
<div id="ariane">
<a href="index.php">Accueil</a> >> <a href="recherche-achat-immobilier.php">Recherche - Achats</a> >> Résultat: <?php echo $compte['COUNT(id_bien)'].' bien(s) correspondant à votre recherche'; ?>
</div>
<div id="resultat">
<?php while ($row_rs_resultat = mysql_fetch_assoc($rs_resultat)) {
echo '
<table class="resultat" height="218" width="552" background="Images/fond/cadre-resultat.jpg">
<tr>
<td class="photo" rowspan="3"><a href="bien-immobilier-fiche.php?num_fiche='.$row_rs_resultat['id_bien'].'"><img src="'; if($row_rs_resultat['url_photo1'] == '') {echo 'Images/photos/sans-photo.jpg';} else { echo $row_rs_resultat['url_photo1'];} echo '" class="img" height="200" width="267" title="'.$row_rs_resultat['titre_photo1'].'"/></a></td>
<td class="texte" height="35" align="center" colspan="2" width="255"><b><font color="#FFFFFF">'.$row_rs_resultat['nom_ville'].' - '.$row_rs_resultat['departement'].'</font></b></td>
</tr>
<tr>
<td class="texte" height="135" colspan="2">';
$texte = $row_rs_resultat['description_bien'];
// Le nombre maximal de charactères...
$chr = "350";
// Le nombre de charactères dans le texte...
$len = strlen($texte);
// Si le nombre de charactères est plus grand que X... (X représente le nombre maximal) =]
if ($len > $chr) {
// Séléction des X caractères... (X représente le nombre maximal) =]
//$texte = substr($texte, 0, $chr)."...";
$texte = substr($texte, 0, $chr);
$position_espace = strrpos($texte, " ");
$texte = substr($texte, 0, $position_espace);
$texte = $texte."...";
echo $texte;
} else {
echo $texte;
};
echo '</td>
</tr>
<tr>
<td class="texte" height="25" valign="top" width="130"><b>'.$row_rs_resultat['prix_bien'].' € FAI</b></td>
<td class="info" valign="top" align="right" width="125"><a href="bien-immobilier-fiche.php?num_fiche='.$row_rs_resultat['id_bien'].'">Fiche complète</a></td>
</tr>
</table>
' ;} ?>
</div>
</div>
</div>
</div>
</div>
</body>
</html>