Recuperer choix d'une liste déroulante en PHP

Résolu/Fermé
pjnew - 20 févr. 2011 à 17:46
ConceptcaB Messages postés 16 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 23 février 2011 - 21 févr. 2011 à 11:12
Bonjour à tous,

Je sais que la question a déjà été posée et résolue mais malgré de nombreux essais, cela ne marche toujours pas dans mon cas particulier.
Merci de votre indulgence pour un petit débutant...
Voilà le problème :
Dans un premier fichier php, je crée une liste déroulante alimentée par la lecture d'une base de données. Un appui sur un bouton m'envoie sur un second fichier où j'affiche certains des champs.
Cela fonctionne.
Mon problème, je ne parviens pas à récupérer le choix fait dans la liste déroulante..

Voici mes fichiers

<?php

define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'test');
// Connexion à la base de données
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());
?>


<html>
<head></head>

<FORM action="cible.php">
Heure de debut: <input type="text" name="hh_deb" /><br />
<input type="submit" value="OK" />
</FORM><body>

<FORM name="psge" method="post">
<font color="#7D5FCD" size="4"><b>   Heures</b></font>  

<?php
$sql0="Select * from passage";
$result0 = mysql_query($sql0) or die("base inaccessible!");
?>

<SELECT name="choix" size="1">
<OPTION value="">Effectuer votre choix...</OPTION>
<?php
$i=0;
while ($user0 = mysql_fetch_assoc($result0))
{
?>
<OPTION
value="<?php echo $user0['id_rlv']; ?>">
<?php echo $user0['id_rlv']; ?>

</OPTION>
<?php
$i++;
}

?>
</SELECT><br /><br />

</FORM>
</body>

</html>


et le fichier cible.php

<?php
try
{

$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);

$req = $bdd->prepare('SELECT hh FROM rlv WHERE hh >= ?');
$req->execute(array($_GET['hh_deb']));

echo '<ul>';
while ($donnees = $req->fetch())
{
echo '<li>' . $donnees['hh'] </li>';
}
echo '</ul>';


if (isset($_POST['choix']))
{
$choix = $_POST['choix'];
}
else
echo "choix non trouvé";
$req->closeCursor();

}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>


Merci encore
A voir également:

3 réponses

tito 23, merci de ton aide

$req = $bdd->prepare('SELECT hh FROM rlv WHERE hh >= ?');
semble bien fonctionner :
je recupère le champs hh de la table rlv si sa valeur est supérieure ou égale à celle saisie dans le 1er formulaire ("hh_deb").
Pour autant, tu as raison, je vais réécrire le code en fondant les deux formulaires.
Merci encore
1
ConceptcaB Messages postés 16 Date d'inscription dimanche 20 février 2011 Statut Membre Dernière intervention 23 février 2011 3
21 févr. 2011 à 11:12
Effectivement, le fait d'avoir deux formulaires n'est pas bon.
retire la deuxième balise <form> et remplace la première par:
<FORM action="cible.php" name="psge" method="post">
en fusionant le tout :)
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
Modifié par tito23 le 20/02/2011 à 18:05
le <body> doit être avant ton premier formulaire.

Aussi il ne faut pas mélanger les varibles get et post dans ton fichier cible.php.
et modifier ça
while ($user0 = mysql_fetch_assoc($result0)) 
{ 
?> 
<OPTION 
value="<?php echo $user0['id_rlv']; ?>"> 
<?php echo $user0['id_rlv']; ?> 

</OPTION> 
<?php 
$i++; 
} 

par
while ($user0 = mysql_fetch_assoc($result0)) 
{ echo'<option value="'.$user0['id_rlv'].'">'.$user0['id_rlv'].'</option>';}

$req = $bdd->prepare('SELECT hh FROM rlv WHERE hh >= ?');
???
corriger par ceci
echo '<li>' . $donnees['hh'] .'</li>'; 

Bon travail.
0
Rebonjour

Merci beaucoup tito23 d'avoir pris le temps de t'occuper de mon petit problème.
Grâce à toi mon code est plus clair, mais mon problème n'est pas encore résolu...
Cela m'embête de te déranger (ou d'autres...) pour un problème aussi élémentaire.
Donc, je ne parviens pas à récupérer dans le fichier cible.php la valeur choisie dans la liste déroulante (en faisant un $choix = $_POST['choix']; avec <SELECT name="choix"> dans la définition du formulaire de la liste.
Est-ce que le problème ne viendrait pas de ce que j'accède au fichier cible.php par le bouton submit d'un autre formulaire. En effet, je récupère bien la valeur de la variable saisie dans ce formulaire.
NB
l'instruction print_r($_POST); placée en début de cible.php m'indique Array ( )
Merci encore
0
tito23 Messages postés 305 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 janvier 2013 4
21 févr. 2011 à 10:14
<FORM name="psge" method="post"> il te manque un action="cible.php"
Aussi, pourquoi utiliser deux form, l'une par Get et l'autre par POST?
Ce code
$req = $bdd->prepare('SELECT hh FROM rlv WHERE hh >= ?'); 
tu dois le vérifier.
0