script PHP liste deroulante et base de données [Résolu 2 fois ;)] - PHP - Programmation
Marsh Posté le 25-04-2008 à 11:37:26
esteban72 a écrit : 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 ! |
Hors charte....
Avec un peu de réflexion, ton ami Google => tu fais un petit script que tu testes sur une autre page et aprés tu cherches où l'insérer....
Marsh Posté le 25-04-2008 à 12:37:40
Oui j'ai deja fait des essais avec des formulaires en methodes Get et post mais ca ne fonctionne pas. Le formulaire garde la valeurs fixé par defaut au lieu de prendre celle choisi dans la liste deroulante. J'aurai du le signaler
Pour commencé, j'ai juste fait avec une liste deroulante sur le departement. Mais ca bloque
Voici le code où je me suis arreté :
Citation : |
Voila,
J'ai fait un test en mettant des echos avant et apres le controle sur la variable
Citation : |
Donc voila ce que ca affiche au dessus de la liste deroulante :
- à l'ouverture de la page : 1722
Ce qui est normale, on arrive sur la page, avant le test, la variable n'a pas de valeur. on test eston lui attribu la valeur de 72. Donc apres le test on a 72 comme valeur.
- en choisissant le departement 28 ou 72 et en cliquand sur le bouton : 1722
Donc la variable n'a toujours pas de valeur quand on recharge la page.
Voila, j'espere que maintenant je rentre dans la charte
Marsh Posté le 25-04-2008 à 14:48:53
Je comprends pas grand chose à ton problème.... Essaye de faire un print_r($_GET) pour voir toutes les variables définies au chargement...
Marsh Posté le 25-04-2008 à 14:55:33
Il me renvoi : "Array ( )"
et apres avoir selectionner le departement 28 dans la liste : "Array ( [\"rdep\"] => 28 )"
Marsh Posté le 25-04-2008 à 14:56:21
Donc ton redp est défini
Marsh Posté le 25-04-2008 à 14:59:09
Et tu le récupères en faisant $_GET['rdep'] et non $_GET['numdep']
Marsh Posté le 25-04-2008 à 15:02:08
A quel niveau il faut que je remplace $_GET['numdep'] par $_GET['numdep'] ? Dans le formulaire ou dans tout le reste du code ?
Marsh Posté le 25-04-2008 à 15:06:30
esteban72 a écrit : A quel niveau il faut que je remplace $_GET['numdep'] par $_GET['numdep'] ? Dans le formulaire ou dans tout le reste du code ? |
Marsh Posté le 25-04-2008 à 15:17:30
J'ai remplacé "numdep" par "rdep"
dans les 2 requetes vers la base :
Citation : |
et
Citation : |
Là quand je selectionne le departement, ca me renvoi "aucun resultat"
Si en plus, je remplace dans le if isset
Citation : |
Là il affiche les parametres par defaut (donc departement 72) mais les infos change pas quand on choisi l'autre departement.
Marsh Posté le 25-04-2008 à 15:22:10
Forcément :
echo '<select name=\"rdep\">';
edit: Et au passage :
http://fr.php.net/mysql_real_escape_string
Marsh Posté le 25-04-2008 à 15:24:40
Euh desolé, mais je debute alors je vois pas ce qu'il y a d'evident comme erreur. Est ce que tu peux m'expliquer s'il te plait ?
Marsh Posté le 25-04-2008 à 15:28:49
sielfried a écrit : Forcément : edit: Et au passage : |
Bien vu , c'est pour ca qu'il affichait ca : "Array ( [\"rdep\"] => 28 )". Je comprenais pas...
@esteban72:
cette ligne est incorrect : echo '<select name=\"rdep\">'; (tu mélanges simple et double quotes)
=> echo "<select name=\"rdep\">"; ou echo '<select name="rdep">';
Explication : la valeur dans ton GET au lieu d'être rdep était \"rdep\"
Marsh Posté le 25-04-2008 à 15:33:18
esteban72 a écrit : Euh desolé, mais je debute alors je vois pas ce qu'il y a d'evident comme erreur. Est ce que tu peux m'expliquer s'il te plait ? |
Les \ servent à échapper les quotes (simples ou doubles) seulement en cas de confusion avec le caractère englobant la chaîne, comme dans 'salut c\'est moi' ou dans "il a dit \"un truc\"". Mais si t'englobes avec des quotes simples, pas besoin d'échapper les quotes doubles, et vice versa (non seulement pas besoin, mais surtout l'antislash sera pris tel quel).
Marsh Posté le 25-04-2008 à 15:33:46
Oki
Effectivement ca marche comme ca
Reste juste la valeur par defaut car quand on arrive sur la page recherche.php, il affiche "aucun resultat". Apres quand on choisi dans la liste deroulante c'est bon mais j'aimerai qu'il arrive des le debut sur departement 72.
Il est pas bon mon if (!isset($_GET['rdep'])) $_GET['rdep'] = 72;
Marsh Posté le 25-04-2008 à 15:45:53
Désolé, il restait un numdep dans le if (!isset($_GET['rdep'])) $_GET['rdep'] = 72; J'avais pas du sauvegarder
Je vous remercie deja pour avoir reglé mon probleme ! Vous etes top !
Marsh Posté le 29-04-2008 à 08:46:18
Bonjour,
La fonction marche bien, mais j'ai de nouveau un soucis que je n'arrive pas a regler.
La liste deroulante se rempli en fonction des informations dans la base. Donc a chaque fois qu'il trouve un departement, il l'ecrit dans la liste deroulante. Le probleme, c'est qu'il y a plusieurs photos qui ont le meme departement. Donc dans ma liste deroulante, je me retrouve avec n fois le meme departement
Je n'arrive pas a lui faire mettre la valeur de departement dans la liste uniquement si elle n'est pas deja presente.
Je vous remet le code du formulaire de la liste :
Citation : |
Marsh Posté le 29-04-2008 à 09:15:50
A vue d'oeil comme ca, ca n'a rien à voir avec ton formulaire mais ton script d'enregistrement. Fais-tu un INSERT ou un UPDATE ?
Marsh Posté le 29-04-2008 à 09:47:34
C'est la boucle "While" qui rempli la liste deroulante. Donc a chaque fois qu'il lit une ligne dans la table, il rempli la liste avec la valeur du departement. Donc si il lit plusieurs fois le meme departement, il ecrit plusieurs fois ce departement.
Quand tu parles de mon script d'enregistrement, tu parles de la façon dont je renseigne la base ? Parceque dans ce cas, je le fais a la main. Donc je pense pas qu'il puisse y avoir d'erreur.
Voila ce que donne la requete qui est faite pour remplir la base
Citation : |
Marsh Posté le 29-04-2008 à 09:53:14
SELECT DISTINCT numdep, dep FROM photos ...
Marsh Posté le 29-04-2008 à 10:00:18
Trop bon !
Un mot et ca change tout !
Merci beaucoup Sielfried !
Marsh Posté le 09-05-2008 à 08:33:41
Je vous remercie encore, grace a vous mon site est en ligne. Concept particulier mais c'est marrant : www.giratoire.fr
N'hesitez pas a m'envoyer vos photos si vous avez des giratoires particuliers par chez vous.
Et vous pouvez participer au girajeu pour gagner un petit cadeau chaque mois.
@ bientot
Marsh Posté le 25-04-2008 à 11:34:22
Bonjour,
J'ai un nouveau soucis, je vous l'explique dans mon derniere message.
Merci
[Ancien message]
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"
- 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 !
Message édité par esteban72 le 29-04-2008 à 10:00:52