Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2008, 10h42   #1
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
Par défaut liste déroulante : récupérer la valeur POSTée et la modifier

bonjour
je sèche depuis plusieurs jours sur ce pb, et je n'ai pas trouvé une réponse compréhensible par moi dans les tuto.
je voudrais récupérer dans une liste déroulante les choix que j'ai placé dans une table et l'afficher dans le formulaire de saisie (ça c'est bon). mais ensuite je voudrais que dans le formulaire de modif je retrouve ce même menu avec comme valeur par défaut le choix qui a été fait dans le formulaire de saisie. et là j'arrive pas.
en fait j'y arrive bien si j'indique un à un les choix dans mon code (genre
Code :
<option value="choix 1" ...><option value="choix 2"...>
.
mais tant qu'à faire j'aimerai aller chercher les valeurs dans ma table sql.
j'espère que je suis un minimum compréhensible...
voilà mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
$recup_action=$_SESSION['recup_action']; //variable de session contenant la valeur à mettre par défaut       
    $sel='selected="selected"';
    $req = "SELECT intutile_action FROM action ";
    $result = mysql_query($req)
    or die ("Connection impossible");
    echo "<tr><td>Action :</td>
    <td><select name='action'>";
    while ($choix = mysql_fetch_array($result))
             {echo "<option value='$choix[1]'
                     if ($recup_action==$choix[1])
                     {echo $sel;}>$choix[1]</option>";}
je ne comprend pas comment faire pour à la fois récupérer les valeurs depuis la table et afficher par défaut celle qui a été choisie...
merci de m'aider si vous avez une idée.
d-l.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 11h00   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Bonjour

Il faut prendre les problèmes un par un. D'abord tu remplis ta liste à partir de ta base de données. Une fois que ce point là est ok (ce qui a l'air d'être le cas), tu t'occupes de vérifier si la variable a déjà été envoyée comme indiqué ici
Ce qui donne quelque chose comme ça :
Code :
1
2
3
4
5
6
7
echo "<select name='action'>";
while ($choix = mysql_fetch_array($result))
{
  $selected = (isset($_POST['action']) and $_POST['action'] == $choix[1])?'selected="selected"':''; 
  echo "<option value='$choix[1]' $selected >$choix[1]</option>";
}
echo "</select>";
Si tu veux davantage d'explications, n'hésites pas à demander
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 11h35   #3
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
merci Celira
donc je récupère bien toutes les valeurs de la liste déroulante, mais par défaut c'est la première qui est sélectionnée... (c'est un progrès jusque là je ne parvenait à présélectionner que la dernière). j'affiche à coté la variable de session (j'utilise plutôt ça que la méthode POST dans ce cas) pour bien vérifier.
il me semble bien que le soucis vient de l'option 'selected', mais je ne comprend pqs comment l'utiliser pour qu'elle m'affiche ce que je cherche...
d-l.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 11h42   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
ben tu remplaces le $_POST['action'] par la variable de session que tu veux tester...
l'option selected va placer la sélection sur l'option dans la quelle elle se trouve (chuis pas ure d'être claire là )
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 12h02   #5
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
oui sur le principe j'ai compris ça, mais pourquoi est-ce que ça marche sans problème quand j'indique une à une les valeurs de la liste, et que ça foire dès que je récupère ces valeurs depuis la table ? je dois faire une erreur de syntaxe quelque part qui fait que le code ne sait pas à quelque valeur appliquer l'option 'selected'.
j'ai l'impression que le soucis vient de là :
Code :
$_POST['action'] == $choix[1])?'selected="selected"'
en fait on demande est-ce que le $_POST['action'] est bien compris dans les valeurs du tableau $choix, ce qui est vrai donc il applique l'option 'selected' à toutes les valeurs de la liste déroulante, cad à aucune en particulier. est-ce que je me trompe complet ?
d-l.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 12h14   #6
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
Bon, une 'tite explication sur l'opérateur ternaire s'impose (ceci n'est pas une critique)
équivault à En d'autres termes :
Code :
$selected = (isset($_SESSION['recup_action']) and $_SESSION['recup_action'] == $choix[1])?'selected="selected"':'';
équivault à
Code :
1
2
3
4
if (isset($_SESSION['recup_action']) and $_SESSION['recup_action'] == $choix[1])
   $selected = 'selected="selected"';
else
   $selected = '';
Ce qui veut dire en français :
si la variable $_SESSION['recup_action'] existe et si elle est égale à $choix[1] (c'est à dire à la valeur de l'option en cours), alors on sélectionne cette ligne.

Est-ce plus clair comme ça ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 13h16   #7
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
oui, j'étais complètement à coté.
mais si c'est pas une erreur de syntaxe alors peut-être que je me plante dans mes variables.
ma table sql est composée d'un id_action (champ 1) et d'un intitule_action (champ 2).
la valeur postée vient de la table formulaire, mais a priori je n'ai pas besoin d'y faire référence puisque je passe par la fameuse variable de session.
je crée la variable $choix qui comprend dans un tableau les valeurs des intitule_action.
si la variable de session est égale à $choix on applique l'option selected.
bref, je ne comprend pas ce qui ne va pas !!!
d-l.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 13h38   #8
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 453
Points : 5 453
ça m'a l'air un peu embrouillé tout ça. On va essayer de cerner les problèmes possibles...

Tout d'abord, comment remplis-tu cette fameuse variable de session ?
Et pourquoi ne pas transmettre l'id_action, plutôt que l'intitule_action ? après tout un id est censé être unique...

Et ensuite, tu peux utiliser var_dump ou print_r pour connaitre les variables de se promènent sans être vues comme $_SESSION et $_POST. Il suffit d'ajouter dans le script
Code :
1
2
3
echo '<pre>';
var_dump($_SESSION, $_POST); 
echo '</pre>';
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2008, 15h02   #9
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
q : Tout d'abord, comment remplis-tu cette fameuse variable de session ?
r : j'ai un formulaire de saisie, puis un de consultation où j'affiche les données pour chaque fiche, c'est là que j'ai récupéré la variable $action pour la mettre dans la variable de session. c'est pas très propre, mais c'était pour simplifier, en ne testant que sur un seul formulaire au lieu de 2. mais j'ai essayé avec la méthode POST et ça donne les mêmes erreurs.

q : Et pourquoi ne pas transmettre l'id_action, plutôt que l'intitule_action ? après tout un id est censé être unique...
r : dans ma table action il n'y a que les différents choix possibles, cette table est indépendante de celle où s'incrémentent les saisies. donc les intitulés aussi sont uniques en ce sens qu'il n'y a qu'une seule occurence de chaque dans cette table.
d-l.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2008, 14h20   #10
Invité de passage
 
Inscription : mars 2008
Messages : 6
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 6
Points : 1
Points : 1
bon je remercie Celira d'avoir essayé de comprendre avec moi
mais comme j'ai une solution de rechange, je ne vais pas perdre plus de temps là-dessus.
encore merci
d-l.p est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h42.


 
 
 
 
Partenaires

Hébergement Web