Forum de discussion et d'aide au php
Vous n'êtes pas identifié.
|
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. |
||
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.'"><<</A> ';
}
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.' - ';
}
}
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> - ";
}
}
}
$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 = ' <A HREF="'.$cible.'">>></A>';
}
else {
$lien='';
}
$barre .= $lien;
return $barre;
}
?>
<head>
Retirer car inutile pour cette demande
</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
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