Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 25-04-2008 06:38:07

Kony
Membre
Date d'inscription: 25-04-2008
Messages: 1

script PHP - listes deroulantes et BDD

Bonjour,

J'aimerai ajouter a mon site en cours de developpement une partie permettant de trier les resultats afficher a l'aide de listes deroulantes.

Voici les champs dans la base de donnée "giratoire" de la table  "photos" :

id           url                                  zoom                            ville             dep        numdep   annee   photographe   type 
1   ../photos/lemans01.jpg    ../photos/zoom/lemans01.jpg      LE MANS      Sarthes        72       2002     M.XXXXXX     mixte
2   ../photos/chartres02.jpg  ../photos/zoom/chartres02.jpg    CHARTRES   Eure et Loir    28       2006     M. YYYYYY   Vegetal

Actuellement, il y a deja une fonction en php qui permet d'afficher page par page les photos et les infos contenue dans la base de données avec une barre numeroté de 1 à "nombre de ligne dans la base". J'aimerai concerver cette fonction pour l'affichage. Ce script fonctionne parfaitement donc ce n'est pas la peine de s'atarder dessus, mais vu que ce que je souhaite ajouter doit l'utiliser pour l'affichage vous en aurez besoin pour m'aider.
Voici le code de cette fonction :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php

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.'">&lt;&lt;</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.'">&gt;&gt;</A>';
   }
   else {
      $lien='';
   }
   $barre .= $lien;

   return $barre;   

?>

<head>
Retirer car inutile pour cette demande wink
</head>

<body>
<?php

// on se connecte à notre base  (je travaille en local avec wamp2 donc localhost et root sans mdp)
$base = mysql_connect ('localhost', 'root', ''); 
mysql_select_db ('giratoire', $base); 

// 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 photos'; 

// 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 = 1;
   
// Préparation de la requête avec le LIMIT 
$sql = 'SELECT * FROM photos ORDER BY ID ASC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page; 

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


// on va scanner tous les tuples un par un 
while ($data = mysql_fetch_array($req)) { 
// on affiches les résultats dans la <table>

echo '<table width="95%" border="0" align="center" cellpadding="0" cellspacing="5"><tr><tdcolspan="2"><a href=" ' , htmlentities(trim($data['zoom'])) , ' " target="_blank"><div align="center"><img src="' , htmlentities(trim($data['url'])) , '"></a></div></td></tr>';

echo '<tr><td width="50%"><div align="right">Ville : </div></td><td width="50%"><div align="left"> ' , htmlentities(trim($data['ville'])) , '</div></td></tr>';

echo '<tr><td width="50%"><div align="right">Département : </div></td><td width="50%"><div align="left"> ' , htmlentities(trim($data['dep'])) , ' - ' , htmlentities(trim($data['numdep'])) ,'</div></td></tr>';

echo '<tr><td width="50%"><div align="right">Photographe : </div></td><td width="50%"><div align="left"> ' , htmlentities(trim($data['photographe'])) , '</div></td></tr>';

echo '<tr><td width="50%"><div align="right">Année : </div></td><td width="50%"><div align="left"> ' , htmlentities(trim($data['annee'])) , '</div></td></tr>';




// 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'], 3).'</span>'; 

// 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 (); 
echo '</table><br />'; 
?>

Voila ! Donc avec ca, ca nous affiche une page avec une photo et en dessous les infos de ville, departement, photographe...

Ce que je ne sais pas faire et où j'ai besoin de votre aide c'est pour :

- ajouter des listes deroulantes avec les champs de la table "photos"
[*]une liste deroulante pour "ville"
[*]une liste deroulante pour "departement" (avec le "numero departement" entre parenthese)
[*]une liste deroulante pour "photographe"
[*]une liste deroulante pour "type"

- toutes les listes sont sur la meme page.

- les listes deroulantes sont rempli a partir des infos de la base. C'est a dire, par exemple, qu'un departement qui n'est pas present dans la base de donnée ne sera pas affiché dans la liste deroulante.

- lorsqu'on choisi un critére dans une liste deroulante, automatiquement, les resultats affichés sont recalculés et affichés (avec le menu page par page - fonction ecrite plus haut)

Voila, j'espere avoir etait assez clair. Je debute en PHP est je n'arrive pas a faire ca wink Si une bonne âme veux bien m'ecrire le code de cette page je le venerai jusqu'a la fin des temps ! :ouch:

Hors ligne