Problème affichage sql sur plusieurs pages

zenso -  
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous !

J'ai un soucis avec mon affichage sql sur plusieurs pages qui fonctionne très bien sur mon site Free mais ne fonctionne pas sur mon nouvel hébergeur (OVH) alors qu'il s'agit d'exactement les mêmes pages et la même BDD.
Il m'affiche bien mes 5 premiers résultats, les liens existent bien en dessous des résultats par contre dès que je clique sur l'un d'entre eux, les résultats restent toujours les 5 premiers alors que l'url affiche :
"http://www.***.com/***.php?limite=5&PHPSESSID=b5c5eb49fec3bb893999b23214ef8a77" lors de la première visite du site par le navigateur ou bien "http://www.***.com/***.php?limite=5" par la suite.
En début de chaque page j'ai un :

<?php
session_start();
?>


Voici mon code qui me pose maintenant soucis : :oops:

mysql_free_result($result);


$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;

function affichePages($nombre,$page,$total) {
        $nbpages=ceil($total/$nombre);// 5 est le résultat par page
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        while($numeroPages <= $nbpages) {
        echo '<span class="numPage"><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></span>';
		echo '<style type="text/css">.numPage a{color:blue;font-weight:bold;margin:5px;}</style>';
		echo '<style type="text/css">.numPage a:hover{background-color:gray;}</style>';
        $limite = $limite + 5;// 5 est le résultat par page
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
            if($compteurPages == 10) {
            $compteurPages = 1;
            }
        }
        
}
echo "<center>";
if($limite != 0) {
	echo '<span class="enLigne"><a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a></span>';
	echo '<style type="text/css">.enLigne a{color:blue;display:inline;padding:10px;}</style>';
	
}
affichePages($nombre,$page,$total);
if($limitesuivante < $total) {
	echo '<span class="enLigne"><a href="'.$page.'?limite='.$limitesuivante.'">Page Suivante</a></span>';
	echo '<style type="text/css">.enLigne a{color:blue;display:inline; padding:10px;}</style>';
}
echo "</center>";



Quelqu'un aurait-il une réponse pour moi s'il vous plaît, vous l'aurez certainement compris, je suis débutant ! :D

14 réponses

avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 509
 
Ça reviendrait à la même chose, $limite sera défini, donc la condition ne sera pas vraie, mais $limite vaudra quand même 0.

Voilà comment faire :
$limite = isset($_GET['limite']) ? (int) $_GET['limite'] : 0;
1
nob51 Messages postés 47 Statut Membre 5
 
Peut-être par ce que l'hébergeur en question ne supporte pas ta version de MySQL car il a peut-être un version moins récente que toi.
Cordialement.
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 509
 
Salut.

OVH (comme beaucoup d'autres hébergeurs) est en PHP4 par défaut.
Pense à le mettre en PHP5.
https://docs.ovh.com/fr/

Ensuite, tu nous montres la partie du code pour la pagination ; si j'ai bien compris le problème, c'est au niveau de l'affichage des résultats ...
0
zenso
 
Salut nob51 et avion-f16

J'ai donc vérifié ce que vous me disiez tous les deux et malheureusement ça ne vient pas de là !
Voici mon code pour l'affichage des résultats :

$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

$nombre = 12;  // on va afficher 5 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois 
               // on met limite à 0.
    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

$select = 'SELECT count(*) FROM film';

$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );

$row = mysql_fetch_row($result);

$total = $row[0];

// requête SQL qui ne prend que le nombre d'enregistrements nécessaire à l'affichage.

$select = 'select * from film limit '.$limite.','.$nombre;

$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );

// si on a récupéré un résultat on l'affiche.
if($total) {
	
	while($row = mysql_fetch_array($result))
					{
						echo "<div id='annon'>";
							echo "<div id='annonH'>";
							echo "<center>&nbsp; &nbsp; &nbsp; N&#176; :".$row['nofilm'];
							echo "&nbsp; &nbsp; &nbsp; &nbsp; Titre :".$row['titre'];
							echo "</center>";
							echo "</div>"; // fin annonH
							echo "<div id='annonB'>";
							echo "<center>&nbsp; &nbsp; &nbsp;Année :".$row['annee'];
							echo "&nbsp; &nbsp; &nbsp; &nbsp;<a href=\" reserv02.php?nofilm='".$row['nofilm']."'&titre='".$row['titre']."'&annee='".$row['annee']."'&nogenre='".$row['nogenre']."'&affiche='".$row['affiche']."' \">Réserver</a></center>";
							echo "</div>"; //fin annonB
						echo "</div>"; //fin annon						
					}


Nob51, comme tu peux le voir sur ce code, j'ai changé mon $nombre=5 en $nombre =12 pour voir si ça m'affiche le reste de mes données, le résultat est positif. Il y a en effet 12 enregistrements dans ma BDD.

Avion-f16, la version php de mon htaccess était par defaut SetEnv PHP_VER 5 chez OVH.

Merci pour vos idées qui font toujours avancer !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 509
 
Le problème, il est là :
if (!isset($limite)) $limite = 0;
Étant donné qu'avant cette ligne, la variable $limite n'est pas définie, la condition sera vraie donc $limite sera toujours défini à 0.
$_GET['limite'] n'est pas $limite.
0
zenso
 
Donc tu me conseilles de mettre $limite=0; avant et de laisser le reste tel quel ?

Si c'est le cas, ça ne marche pas !
0
zenso
 
Youpi !

Avion f16, tu mérites bien ton pseudo, voire plus encore ! Merci, tu m'as enlevé une grosse épine du pied. Quel soulagement ! Par contre, je ne comprends pas alors pourquoi, sur mon site free ce code marche !?!?!?

Encore merci pour ce coup de main !
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 509
 
Sans doute parce que l'option PHP register_globals est activée.
Cette fonction applique la fonction extract() sur les variablesEGPCS (Environment, GET, POST, Cookie, Server). Cette option est obsolète depuis PHP 5.3.0. Grâce (enfin, "à cause" car c'est mal) à cette fonction, $_GET['limite'] était donc écrit dans $limite sans que tu le demandes.
0
zenso
 
Dis-moi Avion f-16, je vais encore t'embéter un peu :

j'ai un code qui ressemble à ça :

$sql="select * from film where titre like \"%$tab[0]%\" ";   

for($i=1 ; $i<$nb; $i++)
        {
        $sql.="UNION select * from film where titre like \"%$tab[$i]%\" ";   // on boucle pour integrer tous les mots dans la requête
        }


Comment faire pour ordonner les résultats d'une même colonne ? Je m'explique :
A partir d'un champs "annee" posté par un formulaire de recherche, j'aimerais que le résultat de la requête soit ordonné de la manière suivante :

_ les films de l'année $annee;
_ les films dont l'année commence comme $annee
$debannee = substr($annee, 0, 2);

_ le reste des autres films (order by $annee DESC)

Je sais que je suis hors sujet avec cette question mais je ne trouve aucun forum qui propose un tri différent mais sur la même colonne.

Merci par avance de ton aide !
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 509
 
Tu peux le faire simplement avec 3 requêtes :
Voilà un exemple :
https://gist.github.com/anonymous/decc935b3eaf9adc0a2f
0
zenso
 
Mon soucis est que, comme tu peux le voir, j'ai déjà un
where titre like \"%$tab[0]%\"
dans ma requête et en plus j'ai une boucle qui intègre l'ensemble des mots de la recherche placés dans un tableau $tab.
0
zenso
 
Le but étant de faire mon propre moteur de recherche avec un formulaire à 3 champs : $titre (avec plusieurs mots à l'intérieur), $genrefilm (avec menu déroulant) et $annee. Donc trois critères de recherche avec un tri sur la colonne annee.

Comment tu présenterais ça toi ?
0
zenso
 
Je vais essayer de repartir du script que tu m'as fais mais comment avoir le nombre de lignes du templates final et comment l'afficher ?

Merci d'avoir pris du temps pour faire ce script Avion f-16 !
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 509
 
« comment avoir le nombre de lignes du templates final et comment l'afficher ? »
??
0