Page 1 sur 2

probleme affichage page par page

Posté : 29 août 2006, 13:25
par 001cod10
Salut à tous

La première page s'affiche correctement mais qd je clique sur 2 rien ne s'affiche
<?     
function  barre_navigation  ( $nb_total ,  
         $nb_affichage_par_page ,  
         $debut , 
         $nb_liens_dans_la_barre ) { 

     $barre  =  '' ; 
     
     // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT 
     if ( $_SERVER [ 'QUERY_STRING' ] ==  "" ) { 
         $query  =  $_SERVER [ 'PHP_SELF' ]. '?debut=' ; 
    } 
    else { 
         $tableau  =  explode  ( "debut=" ,  $_SERVER [ 'QUERY_STRING' ]); 
         $nb_element  =  count  ( $tableau ); 
        if ( $nb_element  ==  1 ) { 
             $query  =  $_SERVER [ 'PHP_SELF' ]. '?' . $_SERVER [ 'QUERY_STRING' ]. '&debut=' ; 
        } 
        else { 
            if ( $tableau [ 0 ] ==  "" ) { 
                 $query  =  $_SERVER [ 'PHP_SELF' ]. '?debut=' ; 
            } 
            else { 
                 $query  =  $_SERVER [ 'PHP_SELF' ]. '?' . $tableau [ 0 ]. 'debut=' ; 
            } 
        } 
    } 
     
     // on calcul le numéro de la page active 
     $page_active  =  floor (( $debut / $nb_affichage_par_page )+ 1 ); 
     // on calcul le nombre de pages total que va prendre notre affichage 
     $nb_pages_total  =  ceil ( $nb_total / $nb_affichage_par_page ); 
     
     // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin) 
    // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11 
     if ( $nb_liens_dans_la_barre % 2 == 0 ) { 
         $cpt_deb1  =  $page_active  - ( $nb_liens_dans_la_barre / 2 )+ 1 ; 
         $cpt_fin1  =  $page_active  + ( $nb_liens_dans_la_barre / 2 ); 
    } 
    else { 
         $cpt_deb1  =  $page_active  -  floor (( $nb_liens_dans_la_barre / 2 )); 
         $cpt_fin1  =  $page_active  +  floor (( $nb_liens_dans_la_barre / 2 )); 
    } 
     
    if ( $cpt_deb1  <=  1 ) { 
         $cpt_deb  =  1 ; 
         $cpt_fin  =  $nb_liens_dans_la_barre ; 
    } 
    elseif ( $cpt_deb1 > 1  &&  $cpt_fin1 < $nb_pages_total ) { 
         $cpt_deb  =  $cpt_deb1 ; 
         $cpt_fin  =  $cpt_fin1 ; 
    } 
    else { 
         $cpt_deb  = ( $nb_pages_total - $nb_liens_dans_la_barre )+ 1 ; 
         $cpt_fin  =  $nb_pages_total ; 
    } 

    if ( $nb_pages_total  <=  $nb_liens_dans_la_barre ) { 
         $cpt_deb = 1 ; 
         $cpt_fin = $nb_pages_total ; 
    } 
     
     // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page 
     if ( $cpt_deb  !=  1 ) { 
         $cible  =  $query .( 0 ); 
         $lien  =  '<A HREF="' . $cible . '"><<</A>&nbsp;&nbsp;' ; 
    } 
    else { 
         $lien = '' ; 
    } 
     $barre  .=  $lien ; 

     // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active 
     for ( $cpt  =  $cpt_deb ;  $cpt  <=  $cpt_fin ;  $cpt ++) { 
        if ( $cpt  ==  $page_active ) { 
            if ( $cpt  ==  $nb_pages_total ) { 
                 $barre  .=  $cpt ; 
            } 
            else { 
                 $barre  .=  $cpt . '&nbsp;-&nbsp;' ; 
            } 
        } 
        else { 
            if ( $cpt  ==  $cpt_fin ) { 
                 $barre  .=  "<A HREF='" . $query .(( $cpt - 1 )* $nb_affichage_par_page ); 
                 $barre  .=  "'>" . $cpt . "</A>" ; 
            } 
            else { 
                 
                 $barre  .=  "<A HREF='" . $query .(( $cpt - 1 )* $nb_affichage_par_page ); 
                 $barre  .=  "'>" . $cpt . "</A>&nbsp;-&nbsp;" ; 
            } 
        } 
    } 
     
     $fin  = ( $nb_total  - ( $nb_total  %  $nb_affichage_par_page )); 
    if (( $nb_total  %  $nb_affichage_par_page ) ==  0 ) { 
         $fin  =  $fin  -  $nb_affichage_par_page ; 
    } 

         // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation 
     if ( $cpt_fin  !=  $nb_pages_total ) { 
         $cible  =  $query . $fin ; 
         $lien  =  '&nbsp;&nbsp;<A HREF="' . $cible . '">>></A>' ; 
    } 
    else { 
         $lien = '' ; 
    } 
     $barre  .=  $lien ; 

    return  $barre ;     
} 
$BD_serveur      =  "localhost" ; 
$BD_utilisateur  =  "root" ; 
$BD_motDePasse   =  "" ; 
$BD_base         =  "base" ; 

$description   = isset( $_POST [ "description" ]) ?  $_POST [ "description" ] :  "" ;  
$typevent   = isset( $_POST [ "typevent" ]) ?  $_POST [ "typevent" ] :  "" ;  
$ville   = isset( $_POST [ "ville" ]) ?  $_POST [ "ville" ] :  "" ;  
$date   =  "" ; 

 @ mysql_pconnect ( $BD_serveur ,  $BD_utilisateur ,  $BD_motDePasse ) 
        or die( "Impossible de se connecter au serveur de bases de données." ); 
    @ mysql_select_db ( $BD_base ) 
        or die( "Impossible de se connecter à la base de données." ); 


// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages 
$sql   =  'SELECT count(*) FROM event' ; 

// on exécute cette requête 
$resultat  =  mysql_query ( $sql ) or die( 'Erreur SQL !<br />' . $sql . '<br />' . mysql_error ()); 

// on récupère le nombre d'éléments à afficher 
$nb_total  =  mysql_fetch_array ( $resultat ); 

// on teste si ce nombre de vaut pas 0 
if (( $nb_total  =  $nb_total [ 0 ]) ==  0 ) { 
    echo  'Aucune réponse trouvée' ; 
} 
else { 
    
     
     // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0 
     if (!isset( $_GET [ 'debut' ]))  $_GET [ 'debut' ] =  0 ; 
     
     $nb_affichage_par_page  =  3 ; 
     
     // Préparation de la requête avec le LIMIT 
     

$sql  =  "SELECT id,description,lieu,ville,prix,DATE_FORMAT(date, '%d-%m-%Y') as dateevent FROM event WHERE ville='$ville' AND ORDER BY ville ASC  
LIMIT " . $_GET [ 'debut ' ]. ", " . $nb_affichage_par_page "; 

//ORDER BY id ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; 

// on envoie la requête  
$req =  mysql_query ($sql) or die('Erreur SQL !<br>'.$sql.'<br>'. mysql_error ());   
if($req) { 
echo '<table border=" 0 " bgcolor="">'." n "; 
// on fait une boucle qui va faire un tour pour chaque enregistrement  
while($row =  mysql_fetch_array ($req))  { 
      
    
echo '<tr>'; 
echo '<td colspan=" 3 "><font face=" Verdana ,  Arial ,  Helvetica ,  sans - serif " color=" #000000" size="+3"><strong>Evènements à :</font><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+3"> '.$ville.'</strong></font></td>'; 
echo '</tr>' ; 

echo  '<tr>' ; 
echo  '<td></td>' ; 
echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Description :</font></b></td>' ; echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+2"><strong>' . $row [ "description" ]. '</strong></font></td>' ; 
    echo '</tr>' ; 
    echo  '<tr>' ; 
    echo  '<td></td>' ; 
    echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Lieu:    </font></b></td>' ; echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">' . $row [ "lieu" ]. '</font></td>' ;     
    echo '</tr>' ; 
        echo  '<tr>' ; 
        echo ' <td></td>' ; 
        echo  '<td></td>' ; 
    echo  '</tr>' ; 
    echo  '<tr>' ; 
        echo  '<td></td>' ; 
        echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Date :</font></b></td>' ; echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">' . $row [ "dateevent" ]. '</font></td>' ; 
    echo  '</tr>' ; 
    echo  '<tr>' ; 
        echo  '<td></td>' ; 
        echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Entrée:</font></b></td>' ; echo  '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">' . $row [ "prix" ]. ' Euros</font></td>' ; 
    echo  '<td></td>' ; 
 echo  '</tr>' ; 
}        
    echo  '</table>' . "\n" ; 
} 
  
     // on libère l'espace mémoire alloué pour cette requête  
     mysql_free_result  ( $req );  
      
    echo  '</table><br />' ; 
  
     // on affiche enfin notre barre 
     echo  '<span class="gras">' . barre_navigation ( $nb_total ,  $nb_affichage_par_page ,  $_GET [ 'debut' ],  2 ). '</span>' ; 
      
}  
else 
{ 
echo "pas d'évènement" ; 
}     
} 

// on libère l'espace mémoire alloué pour cette requête  
mysql_free_result  ( $resultat );  

// on ferme la connexion à la base de données.  
mysql_close  (); 
?> 

Posté : 29 août 2006, 13:42
par Cyrano
Tu as plusieurs erreurs :
La requête près de la ligne 185 a un problème et ne peut retourner qu'une erreur, observe-la soigneusement;

Ensuite, tu as en fin de page un "else" qui ne correspond à aucun "if" et une accolade fermante qui ne correspond à aucune accolade ouvrante.

problème d'affichage page par page

Posté : 29 août 2006, 14:02
par 001cod10
je viens d'enlever la partie
}
else
{
echo"pas d'évenement";
}

Pour ce qui est de la ligne 185 tu parles bien de cette partie

echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#0000FF" size="+1"><b>Lieu: </font></b></td>'; echo '<td><font face="Verdana, Arial, Helvetica, sans-serif" color="#000000" size="+1">'.$row["lieu"].'</font></td>';

si oui j'ai regardé mais je ne vois pas l'erreur.

Posté : 29 août 2006, 14:10
par Cyrano
non, j'ai parlé d'une requête (SQL, ça me semblait relativement évident), comme j'ai modifié certains détails en local, le numéro de ligne ne correspond plus, mais selon ton code affiché plus haut, c'est la ligne 153.

problème d'affichage page par page

Posté : 29 août 2006, 14:30
par 001cod10
j'ai regardé la requete comme tu me l'as demandé. J'ai enlevé WHERE ville='".$ville."' et les pages s'affichent correctement. J'avais mis cette partie pour que seuls les enregistrements qui concerne la ville choisie soient affichés.

Posté : 29 août 2006, 14:38
par Cyrano
As-tu au moins vu l'erreur qu'elle contenait ???? :shock: Enlever une partie de requête inutile, c'est très bien, mais là, je me demande si tu a fait un test au petit bonheur pour voir si ça marche ou si tu as analysé ta requête pour réaliser que cette clause n'avait pas lieu d'être :-k

Note bien que ça m'est égal, mais si tu hésites ou si tu ne sais carrément pas, dis-toi bien que poser une question ne pourra que t'aider à progresser ;)

problème d'affichage page par page

Posté : 29 août 2006, 14:42
par 001cod10
oui j'ai testé la requête et ça marché. Du moins les page s'affiche correctement en local. mais mon problème que je voulais faire un affichage par ville. Et je n'y arrive pas.

Posté : 29 août 2006, 14:48
par Cyrano
As-tu au moins vu l'erreur qu'elle contenait ????
oui j'ai testé la requête et ça marché.
Cherchez l'erreur :-k

Bon, pour obtenir ce que tu veux, il faut poser le problème comme ceci: "quelle question dois-je poser à MySQL pour avoir ce que je veux obtenir ?" : formule ça en français, on traduira en code après.

Et comme tout ça n'a aucun rapport avec le JavaScript, je déménage le sujet.

probleme affichage page par page

Posté : 29 août 2006, 15:01
par 001cod10
choix d'une ville
Recherche ville dans la base de données
Si trouver
Afficher les enregistrements
Sinon
pas d'enregistrement

Posté : 29 août 2006, 15:09
par Cyrano
Non, tu vas plus vite que la musique et tu formule l'algorithme de traitement : ce que je te propose, c'est de commencer par le commencement : tu veux obtenir certaines informations selon certains critères : c'est la façon de demander ça à MySQL qu'il faut que tu formules et on en fera une requête SQL convenable ensuite : la requête SQL, pas le PHP, ça, on pourra s'en occuper ensuite.

probleme affichage page par page

Posté : 29 août 2006, 15:26
par 001cod10
sélectionner description,lieu,ville,prix de la table (event) avec ville choisie et limiter l'affichage à 5 enregistrements. je ne sais pas si c'est ce que tu me demandes sinon ne sais plus quoi faire

Posté : 29 août 2006, 15:41
par Cyrano
Ben oui, donc si je me fie à cette description, tu n'as effectivement pas besoin d'une clause WHERE : en revanche, tu as une clause LIMIT.

Partons donc de là : tu veux un affichage par ville : ça par contre, ça colle pas avec ta requête puisque cette dernière va t'en retourner 5. Saisis-tu le problème autrement ?

probleme affichage page par page

Posté : 29 août 2006, 15:49
par 001cod10
non je ne vois pas quoi faire

Posté : 29 août 2006, 15:51
par Cyrano
Ben si la requête ne retourne finalement pas ce que tu veux, peut-être bien qu'il y aurait lieu de la reformuler, tu ne crois pas ?

Tu veux afficher une ville ou 5 villes ?

probleme affichage page par page

Posté : 29 août 2006, 15:55
par 001cod10
5 villes