Limahl19
Messages postés37Date d'inscriptionlundi 26 mars 2007StatutMembreDernière intervention 8 octobre 2008
-
26 août 2008 à 16:32
Limahl19
Messages postés37Date d'inscriptionlundi 26 mars 2007StatutMembreDernière intervention 8 octobre 2008
-
9 sept. 2008 à 15:09
Bonjour,
J'aimerai savoir s'il est possible de créer deux listes deroulantes dans un meme formulaire, dont la deuxieme se remplie en fonction de la premiere, a partir d'une seule table dans une base de données.
Dans cette table se trouvent la marque et le modele d'une voiture..... La premiere liste se remplirai avec les marques et la deuxieme se remplirait avec les modeles en fonction de la marque....
Tous les exemples, que j'ai trouvé sur le site, le font toujours avec deux tables...
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 27 août 2008 à 13:36
C'est exact !
ListeA renvoie un numero qui sert a créer l'array() pour la ListeB
Pour recuperer aussi "la marque de la voiture", il suffit d'ajouter au formulaire un input "hidden" :
Par ex. si dans ta BD, la marque est appelée "CATEGORIE", ajouter :
marque" value="<?php echo $val_A['CATEGORIE']; ?>>
Et tu la recupere ensuite avec :
$marque = $_POST['marque']
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 27 août 2008 à 14:19
Si tu lis bien l'article, tu verras :
<?php
// ...
$URLdest = 'dest.php';
// ...
<form name="monform" method="POST" action="<?php echo $URLdest;?>">
// ...
?>
"dest.php" est le fichier qui traitera le formulaire.
C'est dans ce fichier que tu recupères les données du formulaire et où tu fais la requete :
<?php
$table = 'MATABLE';$SQL 'SELECT * from '.$table.' WHERE NUM '. $_POST['listeB'];
$result = mysql_query($SQL) or die('Erreur SQL : '.$query.'
'.mysql_error());
$val = mysql_fetch_array($result);
// ensuite tu affiches les données
echo 'marque : '. $val['CATEGORIE'] .'
';
echo 'donnée : '. $val['DONNEE] .'
';
// ...
?>
Mais tu peux tres bien faire le traitement sur la meme page :
Il faut alors simplement ecrire :
(par defaut, le formulaire enoie le resultat sur la meme page)
<?php
// ...
<form name="monform" method="POST">
// ...
?>
Vous n’avez pas trouvé la réponse que vous recherchez ?
2- ListeB : $SQL_B = 'SELECT DISTINCT * ... ne fonctionnera pas
Si tu as plusieurs enregistrement avec des "marque" et "modele" identiques, tu ne peux pas récupérer un seul ID
Tu as donc 2 solutions (tout dépend si tu veux récupérer 1 seul enregistrement ou tous les enregistrements qui ont "marque" et "modele" identiques)
A- SOLUTION 1 : tu veux récupérer 1 seul enregistrement.
Il faut alors afficher "ID"-"modele" (par exemple)
Dans le script, modifie :
$SQL_B 'SELECT * FROM '. $table .' WHERE marque \''. $_POST['listeA'] .'\'';
...
echo $val_B['id'] .'- '. $val_B['modele'];
B- SOLUTION 2 : tu veux récupérer tous les enregistrements qui ont "marque" et "modele" identiques. (tu ne peux pas recuperer l'"id" tout de suite)
Modifie ton script comme ceci :
------------------------------------------------------------------------------
<?php
// connexion
include("_connexion.php");
// 1 table : MATABLE
$table = 'test2';
// les champs : NUM, marque, modele
// select DISTINCT marque pour eviter les doublons
$SQL_A = 'SELECT DISTINCT marque FROM '. $table. ' ORDER BY marque ASC';
$result_A = mysql_query($SQL_A);
// fichier de destination du formulaire
$URLdest = 'destv5.php';
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title></title>
</head>
Dans "destv5.php" (qui recoit le formulaire) :
------------------------------------------------------------------------------
<?php
// connexion
include("_connexion.php");
// 1 table : MATABLE
$table = 'test2';
// resultat du formulaire
$marque = $_POST['marque'];
$modele = $_POST['modele'];
// recuperation des fiches avec marque et modele identiques
$SQL 'SELECT * FROM '. $table .' WHERE marque '. $marque .' AND modele = '.$modele;
$result = mysql_query($SQL);
?>
...
<?php
// affichage des resultats
while ($val = mysql_fetch_array($result)) {
// ici, affichage avec ta mise en page (dans un tableau par exemple)
echo $val['modele'] .' - '. $val['marque'];
// ...
echo '
'; // passer a la ligne pour fiche suivante
}
?>
...
<?php mysql_close(); ?>
------------------------------------------------------------------------------
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 1 sept. 2008 à 12:43
Bonjour [auteur/LIMAHL19/1016414.aspx Limahl19],
je ne suis pas prof de programmation (mais j'ai été prof de dessin !), ni expert en php (j'ai commencé le PHP il y a moins d'un an !)
Mais ... :
1- la programmation m'intéresse (je fais aussi des sites web)
2- des explications simples et claires ainsi que des exemples détaillés premettent de mieux comprendre,
3- j'ai déjà rencontré les mêmes problèmes, et je me suis posé les mêmes questions !
4- j'aime bien les "casse-tête" !
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 1 sept. 2008 à 15:35
[auteur/LIMAHL19/1016414.aspx Limahl19],
c'est une nouvelle question :
clic sur "forum" : "Poser une question" pour ouvrir un nouveau post avec le titre adéquate.
Et regarde avant si la question n'a pas déjà été posée ...
jreaux62
Messages postés195Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention24 octobre 201132 3 sept. 2008 à 13:18
Bonjour,
2 solutions :
1- soit tu affiches directement ton champ input "autre choix" (à coté de la liste déroulante),
2- soit il te faut un script en langage client (javascript, ...) pour que, quand l'internaute clique (onclick ...) sur l'option "autre" de ta liste déroulante, l'input "autre choix" est créé (ou rendu visible).
La question subsidiaire étant : comment vas-tu gérer le texte écrit par l'internaute (qui peux écrire n'importe quoi dans ce champ) ?