Membres


Pas encore membre ?
inscrivez-vous ici

Connexion :
Login
Code
Mot de passe perdu ?
Liste des membres

aide pour liste déroulante et BDD

Aide pour liste déroulante et BDD


Aide pour liste déroulante et BDD     Posté le 25/04/2008 à 11:50
Kony
Membre
Kony
1 post
Inscrit le : 25/04/2008
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 ;)
</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:
 
Personne n'a encore répondu à cette question !
Vous n'est pas connecté en temps que membre, parceque j'en ai marre du spam, SEUL les membres peuvent poster des messages sur le forum.

Nous  -  Plan du site  -  Informations légale  -  Contact  -  © Graphiks.net