IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Affichage valeur checked liste déroulante sur formulaire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut Affichage valeur checked liste déroulante sur formulaire
    Bonjour à tous,

    Mon formulaire contient une liste déroulante dynamique servant à renseigner le champ "colocataireTwin", issue de la concaténation des 2 champs "nom" et "prénom" de ma table 'olympiades'.
    Une fois le formulaire renseigné, le user peut y revenir en modification.
    Je souhaite donc qu'il retrouve affichée dans le select la valeur précédemment choisie et enregistrée en BDD.

    Or le code suivant m'affiche invariablement un seul et même nom/prénom du select, qui n'est absolument pas la valeur renseignée en base.

    Il y a un hic dans mon code mais j'ai beau chercher je n'arrive pas à comprendre où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <select name="colocataireTwin" id="choixColocataireTwin">
    <?php  
    	echo	"<option value=\"\">Choisir</option>";
    	require "connect.php";
    	$reponse = $bdd->query('SELECT * FROM olympiades ORDER BY nom');
    	$donnees = $reponse->fetch();
    	$valeurForm = $donnees['colocataireTwin'];
    	while ($donnees = $reponse->fetch()) { 
    		if($donnees['nom'].' '.$donnees['prenom'] == $valeurForm){
    		echo '<option value="'.$donnees['nom'].' '.$donnees['prenom'].'" selected="selected">'.$donnees['nom'].' '.$donnees['prenom'].'</option>'; 
    		} else {
    		echo '<option value="'.$donnees['nom'].' '.$donnees['prenom'].'">'.$donnees['nom'].' '.$donnees['prenom'].'</option>';	
    		}
    	} 
    ?> 
    </select>
    Merci par avance pour vos lumières.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- dans <option value, il faut mettre l'id (auto-incrémenté), car il est UNIQUE.

    2- 'SELECT * : NON, il faut mettre les colonnes nécessaires et suffisantes.

    3- il faut échapper les données à afficher avec htmlspecialchars().

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    'il retrouve affichée dans le select la valeur précédemment choisie et enregistrée en BDD
    Et c'est ou dans ton code qu'il y a ça ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Merci pour vos réponses.

    @jreaux62 :

    1- dans <option value, il faut mettre l'id (auto-incrémenté), car il est UNIQUE.
    Je ne sais pas où et comment insérer l'id dans <option value...

    2- 'SELECT * : NON, il faut mettre les colonnes nécessaires et suffisantes.
    Là oui je vois très bien.

    3- il faut échapper les données à afficher avec htmlspecialchars().
    Idem point 1, je ne vois pas comment faire ça...


    @sabotage :

    Pour moi le code qui devrait afficher la valeur renseignée en BDD est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if($donnees['nom'].' '.$donnees['prenom'] == $valeurForm){
    		echo '<option value="'.$donnees['nom'].' '.$donnees['prenom'].'" selected="selected">'.$donnees['nom'].' '.$donnees['prenom'].'</option>'; 
    		}
    Mais vu ta question je me trompe sans doute...
    D'où ma demande d'aide en fait.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Quelle est la structure de la table SQL "olympiades ?

  6. #6
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    J'ai 27 champs... Tu as besoin que je te liste tous les champs ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    MOI, je n'ai besoin de rien...

    Citation Envoyé par jreaux62 Voir le message
    ...il faut mettre les colonnes nécessaires et suffisantes...
    ... dont l'ID, auto-incrémenté DONC UNIQUE.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    le code qui devrait afficher la valeur renseignée en BDD
    Et elle vient d'ou la valeur renseignée en BDD ? Quelle partie de ton code la donne ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Encore un fois merci pour vos réponses (@jreaux62 je sais que tu n'as besoin de rien toi, bienheureux, tu as la connaissance que je n'ai pas
    Je ne sais pas si on se comprend totalement. En tous cas moi je suis un peu perdue, mais ça c'est parce que vous êtes des masters en php et moi looooiiin, bien loin de là

    Donc j'essaye de répondre à la question, mais si ça se trouve complètement à côté...

    A la saisie du formulaire le select affiche une liste de noms+prénoms, concaténation des champs "nom" et "prénom" de ma table.
    La valeur choisie est enregistrée en base dans le champ "colocataireTwin".
    C'est cette valeur que je veux donc réafficher dans mon select lorsqu'on revient sur le formulaire.

    Je sais qu'il y a un truc bancal dans mon code mais je n'arrive pas à pointer l'erreur.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je te le dis depuis le debut ce qui est bancal : tu n'as rien dans ce code qui va lire la valeur que tu cherches dans la BDD.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Oui j'ai bien compris, c'est justement là-dessus que j'ai besoin d'aide...

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Faut seulement écrire la requête et l'executer, tu sais faire ça non ?
    nous on n'a pas la structure de la base de données pour te le faire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par E. Nigma Voir le message
    J'ai 27 champs... Tu as besoin que je te liste tous les champs ?
    Jusqu'ici, tu en as montré... zéro.

    Fais un effort...

  14. #14
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Haaaaa jreaux62 mais je fais tous les efforts du monde

    Voici la structure de ma table "olympiades" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    id
    type
    nom
    prenom
    pole
    metier
    divers
    dateInscrit
    annule
    dateAnnule
    dateModifie
    remplace
    nomHotel
    categorieHotel
    typeChambre
    numChambreFictif
    numChambreReel
    genre
    19mars
    20mars
    21mars
    22mars
    23mars
    24mars
    colocataireTwin
    colocataireTriple
    commentaires
    Sincèrement sabotage ça doit sembler évident pour toi mais pour moi... J'apprends, j'apprends...

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bon.

    1- Il faut que tu prennes un papier et un crayon, car il faut revoir la CONCEPTION des tables, et leur fonctionnellement.

    table "olympiades"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    id
    ...
    nom
    prenom
    ...
    colocataireTwin
    colocataireTriple
    Les 4 champs nom, prenom, colocataireTwin (de la forme 'nom prenom') et colocataireTriple (de la forme 'nom prenom') n'ont RIEN à faire ici, car ce ne sont pas des informations liées à l'"olympiades", mais aux "locataires".

    2- -> il te faut une AUTRE TABLE "locataires" :
    • id_locataire
    • nom
    • prenom
    • ... (autres colonnes concernant le locataire : email, tél,......)


    3- Ainsi, dans la table "olympiades", il faut remplacer :
    • nom, prenom -> id_locataire (locataire principal)
    • colocataireTwin -> id_locataire2 (2ème locataire)
    • colocataireTriple -> id_locataire3 (3ème locataire)


    Il faut bien comprendre que les "id" (AUTO-INCREMENT) sont UNIQUES, et servent donc à identifier de façon certaine une ligne d'une table.
    Contrairement aux "Nom Prénom" (il existe des homonymes).

    4- Pour pouvoir récupérer les "nom prénom" des locataires, il faudra, dans la requête, faire une JOINTURE entre la table "olympiades" et la table "locataires" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $sql = "SELECT 
       OLY.id AS id_olympiade,
       LOC1.nom AS nom_locataire,
       LOC1.prenom AS prenom_locataire,
       LOC2.nom AS nom_locataire2,
       LOC2.prenom AS prenom_locataire2,
       LOC3.nom AS nom_locataire3,
       LOC3.prenom AS prenom_locataire3,
       FROM olympiades OLY
       INNER JOIN locataires LOC1
          ON OLY.id_locataire = LOC1.id_locataire
       LEFT JOIN locataires LOC2
          ON OLY.id_locataire2 = LOC2.id_locataire
       LEFT JOIN locataires LOC3
          ON OLY.id_locataire3 = LOC3.id_locataire
       ORDER BY nom";
    • OLY, LOC1, LOC2 et LOC3 sont des ALIAS des table (ça évite de recopier x fois olympiades ou locataires dans la requête)
    • LOC1, LOC2 et LOC3 : car on a ici 3 locataires (il faut différencier les 3 dans la requête)
    • INNER JOIN : car le 1er est obligatoire (oui?/non? Sinon, mettre LEFT JOIN)
    • LEFT JOIN : car on n'a pas forcément de locataire2 ni locataire3


    Évidemment, ça complique l'ECRITURE de la requête.
    Par contre, ça SIMPLIFIE énormément la LOGIQUE.

    5- De cette manière, ce ne seront plus les "nom prénom", mais l'id_locataire qu'on mettra dans les value du select.
    Pour le locataire2 (celui que tu avais appelé "colocataireTwin"), le select devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php  require "connect.php"; // A METTRE une fois pour toutes EN HAUT du script ?>
     
    	<select name="id_locataire2" id="choixColocataireTwin">
    		<option value="0">Choisir</option>
    <?php  // id_olympiade, nom et prénom du locataire2 (ColocataireTwin)
    	$sql_query = "SELECT 
    	   LOC2.id_locataire AS id_locataire2,
    	   LOC2.nom AS nom_locataire2,
    	   LOC2.prenom AS prenom_locataire2,
    	   FROM locataires LOC2
    	   ORDER BY nom";
    	$result = $bdd->query( $sql_query ); // execute la requête
     
    	while( $row = $result->fetch() ) // pour chaque resultat
    	{ 
    		$selected = ( !empty($id_locataire2_choisi) && $id_locataire2_choisi == $row['id_locataire2'] )? ' selected="selected"' : '';
    		echo '<option value="'.$row['id_locataire2'].'"'.$selected.'>'.$row['nom'].' '.$row['prenom'].'</option>'; 
    	} 
    	?> 
    	</select>
    Tu remarques ici :
    • qu'on ne fait plus appel à la table "olympiades", mais à la table "locataires" uniquement !
    • que dans le value on met $row['id_locataire2']


    N.B. $id_locataire2_choisi, c'est $id_locataire2 récupéré :
    • soit d'une requête préliminaire sur la table "olympiades", avec un id_olympiade donné (quand on MODIFIE une fiche "olympiade", par exemple)
    • soit ce qui est récupéré d'un précédent traitement du formulaire (via $id_locataire2_choisi = $_POST['id_locataire2'];)


    Bref, OUI, tu as encore beaucoup à apprendre...

  16. #16
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    WWoowwww !!!
    Merci pour ce long mail détaillé. J'adore apprendre alors ça tombe bien.
    Je me penche sur tout ce que tu m'indiques dès ce soir.

    Merci pour ton aide et bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/12/2015, 17h57
  2. Liste déroulante sur formulaire continu
    Par Lilou51 dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/06/2014, 13h57
  3. [AC-2007] Modification de valeur d'une liste déroulante sur formulaire
    Par cocoda dans le forum IHM
    Réponses: 4
    Dernier message: 11/10/2012, 17h16
  4. [AC-2003] Contenu zone de liste déroulante sur formulaire continu
    Par willytito dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/12/2011, 17h11
  5. contrôle liste déroulante sur formulaire
    Par papagei2 dans le forum IHM
    Réponses: 4
    Dernier message: 11/11/2008, 12h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo