Page 1 sur 1

Difference fonctionnement de mon site une fois hebergé

Posté : 03 mai 2007, 12:16
par dread
Bonjour à tous.
Je me suis enfin décidé à mettre mon site en ligne afin d'opérer une période de test et détecter les problèmes.
Et on peut dire que je ne suis pas déçu!!
Au passage, j'heberge mon site chez infomaniak.
Le problème le plus flagrant est le dernier.
Imaginez une page annuaire de camping qui affiche 8 enregistrements par page avec un système de pagination pour naviguer entre les pages.
Les enregistrements sont afficher aléatoirement et cet ordre est enregistré en session pour eviter que le random ne soit un problème lorsque l'on navigue entre les pages ou que l'on décide de voir le détail de la fiche d'un camping puis que l'on retourne sur la page annuaire.
Deux filtres sont proposés afin de trier les enregistrements par ville et/ou par étoiles.
Mon problème intervient à l'utilisation de ces filtres.
Par exemple je décide de filtrer mes campings par étoile et je choisi " 2 étoile". Je devrais donc voir apparaitre uniquement mes campings 2 étoiles (chose qui fonctionnait en local sous WAMP5 php myadmin).
Le résultat de ce filtre avec mon site hébergé est le suivant:
Les campings 2 étoiles apparaissent en premier mais on peut voir à la suite le reste de mes enregistrements quand aucun filtre n'est appliqué. Comme si on avait fait une impression écran de ma première page avec les 8 enregistrements et qu'une fois le filtre appliqué, on est collé les campings correspondants au filtre par dessus cette première image sans la dissimuler.
J'espère bien m'expliquer.
Est-ce que le problème pourrait venir des sessions? ou alors d'une fonction pas prise en charge par infomaniak?

Je vous envoi le code de ma page ou du moins les requetes qui générent d'une part mes listes de filtres par ville et étoile, puis la requete qui va sélectionner les infos à afficher dans la page:
mysql_select_db($database_conn_develop, $conn_develop);
	if ((($_GET['etoile']) != '') && (($_GET['etoile']) != 'toutes')){
	$query_rs_ville = "SELECT DISTINCT ville_etab FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND 	type_etab='camping' AND nb_etoile_camping='".$_GET['etoile']."' AND active=1 ORDER BY ville_etab ASC";
} else {
$query_rs_ville = "SELECT DISTINCT ville_etab FROM tbl_etab WHERE type_etab='camping' AND active=1 ORDER BY ville_etab ASC";
}
$rs_ville = mysql_query($query_rs_ville, $conn_develop) or die(mysql_error());
$row_rs_ville = mysql_fetch_assoc($rs_ville);


mysql_select_db($database_conn_develop, $conn_develop);
if ((($_GET['ville']) != '') && (($_GET['ville']) != 'toutes')){
$query_rs_etoile = "SELECT DISTINCT nb_etoile_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='".$_GET['ville']."' AND active=1 ORDER BY nb_etoile_camping ASC";
} else {
$query_rs_etoile = "SELECT DISTINCT nb_etoile_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND active=1 ORDER BY nb_etoile_camping ASC";
}
$rs_etoile = mysql_query($query_rs_etoile, $conn_develop) or die(mysql_error());
$row_rs_etoile = mysql_fetch_assoc($rs_etoile);

if ((!isset($_SESSION['liste_camping'])) ||
	(($_SESSION['ville']) != ($_GET['ville'])) ||
	(($_SESSION['etoile']) != ($_GET['etoile']))){

	mysql_select_db($database_conn_develop, $conn_develop);


	if (($_GET['ville']) == ''){ $_GET['ville'] = 'toutes';}
	if (($_GET['etoile']) == ''){ $_GET['etoile'] = 'toutes';}

	if ((($_GET['ville'])!='toutes') && (($_GET['etoile'])=='toutes')){
		$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, active, url_photo4, titre_photo4, date_ouverture, nb_etoile_camping, 										id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='".$_GET['ville']."' AND active=1 order by rand()";
	}
	else{
		if ((($_GET['etoile'])!='toutes') && (($_GET['ville'])=='toutes')){
			$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, active, url_photo4, titre_photo4, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND nb_etoile_camping='".$_GET['etoile']."' AND active=1 order by rand()";
		}
		else{
			if (($_GET['ville']=='toutes') && ($_GET['etoile']=='toutes')){
				$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, active, url_photo4, titre_photo4, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND active=1 order by rand()";
			}
			else{
				$query_rs_camping = "SELECT nom_etab, cp_etab, ville_etab, active, url_photo4, titre_photo4, date_ouverture, nb_etoile_camping, id_camping FROM tbl_etab, tbl_camping WHERE tbl_etab.etab_id=tbl_camping.id_etab AND ville_etab='".$_GET['ville']."' AND nb_etoile_camping='".$_GET['etoile']."' AND active=1 order by rand()";
			}
		}
	}
	$_SESSION['ville'] = $_GET['ville'];
	$_SESSION['etoile'] = $_GET['etoile'];

	$resultat = mysql_query($query_rs_camping);

	$i=0;
	while($row_rs_camping = mysql_fetch_array($resultat)) {

		$liste_camping[$i]['url_photo4'] = $row_rs_camping['url_photo4'];
		$liste_camping[$i]['titre_photo4'] = $row_rs_camping['titre_photo4'];
		$liste_camping[$i]['id_camping'] = $row_rs_camping['id_camping'];
		$liste_camping[$i]['nom_etab'] =	$row_rs_camping['nom_etab'];
		$liste_camping[$i]['cp_etab'] = $row_rs_camping['cp_etab'];
		$liste_camping[$i]['ville_etab'] = $row_rs_camping['ville_etab'];
		$liste_camping[$i]['date_ouverture'] = $row_rs_camping['date_ouverture'];
		$liste_camping[$i]['nb_etoile_camping'] = $row_rs_camping['nb_etoile_camping'];	
		$i = $i + 1;
	}
	$_SESSION['liste_camping'] = $liste_camping;
	$nb_entrees = count($liste_camping);
	$entrees_par_page = 8; 
	$total_pages = ceil($nb_entrees/$entrees_par_page);
}
else{

$liste_camping = $_SESSION['liste_camping'];
$nb_entrees = count($liste_camping);
$entrees_par_page = 8; 
$total_pages = ceil($nb_entrees/$entrees_par_page);
}
et le code de ma page qui renvoit les informations:
<div id="contenu">
	<?php 
	for($i=$start;$i<$page_courante*$entrees_par_page;$i++){ if ($liste_camping[$i]['id_camping'] != '') {
 ?>
	        <table class="tableau" height="110px" width="461px" border="0" cellspacing="0" cellpadding="0" background="Images/annuaire/vignette-annuaire.gif">
	        
	        <tr>
	          <td class="photo" rowspan="4" height="97px" width="140px" ><img src="<?php echo $liste_camping[$i]['url_photo4']; ?>" alt="<?php echo $liste_camping[$i]['titre_photo4']; ?>" title="<?php echo $liste_camping[$i]['titre_photo4']; ?>"/></td>
        <td class="nom" colspan="2" width="315px" height="30px"><a href="fiche-camping.php?num_camping=<?php echo $liste_camping[$i]['id_camping']; ?>"><?php echo $liste_camping[$i]['nom_etab']; ?></a></td>
      </tr>
	        <tr>
	          <td width="315px" height="24px" colspan="2"><span class="Style1"><?php echo $liste_camping[$i]['cp_etab']; ?> <?php echo $liste_camping[$i]['ville_etab']; ?></span></td>
      </tr>
	        <tr>
	          <td colspan="2" width="315px" height="18px" valign="top"><span class="Style1"><?php echo $liste_camping[$i]['date_ouverture']; ?></span></td>
      </tr>
	        <tr>
	          <td width="150px" height="25px" valign="top"><span class="Style1"><?php if (($liste_camping[$i]['nb_etoile_camping']) != '0'){ echo '<img src="Images/etoile/etoile'.$liste_camping[$i]['nb_etoile_camping'].'.gif"  alt="Camping '.$liste_camping[$i]['nb_etoile_camping'].' étoiles"></img>';}; ?></span></td>
        <td class="fiche" width="165px" height="25px" valign="top"><a href="fiche-camping.php?num_camping=<?php echo $liste_camping[$i]['id_camping']; ?>">Fiche complète</a></td>
      </tr>
        </table>
		<?php }
		 }?>
	      
   
 </div>
  
  <div id="filtre">
   <table class="tri" border="0" cellspacing="0" cellpadding="1" valign="top">
  <tr>
    
    <form id="frm_ville" name="frm_ville" method="GET" action="annuaire-camping.php">
	<td class="ville" width="390px" >Villes
            <select name="ville" id="ville" onchange="submit()">
              <?php
	if ($_GET['ville'] == 'toutes') {
        echo '<option value="toutes" selected="selected">Toutes les villes</option>';
    } else {
        echo '<option value="toutes">Toutes les villes</option>';
	} 
	
do {  

if ($_GET['ville'] == $row_rs_ville['ville_etab']) {
        echo '<option value="'.$row_rs_ville['ville_etab'].'" selected="selected">'.$row_rs_ville['ville_etab'].'</option>';
    } else {
        echo '<option value="'.$row_rs_ville['ville_etab'].'">'.$row_rs_ville['ville_etab'].'</option>';
	} 

} while ($row_rs_ville = mysql_fetch_assoc($rs_ville));

?>

       </select></td>
	   
    <td class="etoile" width="245px">Etoiles
    
	<!--<form id="frm_etoile" name="frm_etoile" method="GET" action="annuaire-campingtest.php">-->
	<select name="etoile" id="etoile" onchange="submit()">
      <?php
	  
	  if ($_GET['etoile'] == 'toutes') {
        echo '<option value="toutes" selected="selected">Toutes les étoiles</option>';
    } else {
        echo '<option value="toutes">Toutes les étoiles</option>';
	} 
	
do {  

	if ($_GET['etoile'] == $row_rs_etoile['nb_etoile_camping']) {
        echo '<option value="'.$row_rs_etoile['nb_etoile_camping'].'" selected="selected">'.$row_rs_etoile['nb_etoile_camping'].'</option>';
    } else {
        echo '<option value="'.$row_rs_etoile['nb_etoile_camping'].'">'.$row_rs_etoile['nb_etoile_camping'].'</option>';
	} 

} while ($row_rs_etoile = mysql_fetch_assoc($rs_etoile));
  
?>
			</select>
			
	   </td></form>
	   <td valign="top" align="right" width="355px"><?php
   echo pagination($total_pages,$page_courante);
 	?></td>
      </tr>
</table>

</div>
J'avoue que je débute en php et que je ne vois pas vraiment d'où vient le problème et qu'un peu d'aide ne serait pas de refus.

Posté : 03 mai 2007, 15:12
par dread
histoire d'être plus explicite, je vous fournis un lien qui mène directement à la page ou se pose mon problème: http://www.e-vendee.fr/annuaire-camping ... s&etoile=2
J'ai fait un echo de la requete principal $query_rs_camping ainsi que les deux echo des valeurs prises par les sessions lorsque l'on utilise les filtres.
On remarque que la requete prend bien les bons états en fonction des filtres utilisés comme le prouve d'ailleurs les echo des $_session['ville'] et $_session['etoile'].
Donc si quelqu'un à un avis sur la question, merci de me le faire partager.

Posté : 03 mai 2007, 15:20
par Ryle
Etonnant que tu n'ais pas eu le problème en local.. à priori ton soucis vient du fait que lorsque tu récupères les résultats correspondant à ta recherche et que tu les mets dans $liste_camping[], tu ne vide pas ce tableau au préalable.

Du coup, si une première recherche te ramène 8 enregistrements et la seconde t'en renvoi 2, tu vas écraser les 2 premiers avec les résultats, mais tu ne supprimes pas les 6 autres du tableau.

Ajoute cette ligne :
...
    $_SESSION['ville'] = $_GET['ville']; 
    $_SESSION['etoile'] = $_GET['etoile']; 
    $resultat = mysql_query($query_rs_camping); 

    $liste_camping = array(); // ceci devrait remettre ton tableau à zéro avant de le remplir à nouveau :)

    $i=0; 
    while($row_rs_camping = mysql_fetch_array($resultat)) { 
...

Posté : 03 mai 2007, 15:29
par dread
A priori ta solution semble fonctionner.
Je te laisse vérifier par toi même avec le lien dans le précédent post.
Je sais vraiment pas comment te remercier.
Merci beaucoup pour ton aide.
Je crois que j'ai vraiment des lacunes en php mais j'essaie de m'améliorer.
Merci encore. @ +.