[RESOLU] Liste déroulante dans un formulaire lié à une base

Eléphant du PHP | 64 Messages

05 sept. 2016, 19:07

Bonjour à tous,

J'essaie de faire évoluer mon formulaire en l’étoffant et bien entendu ça se complique un peu. C'est le but de la manœuvre.

Actuellement j'ai un formulaire tout simple qui est lié à une base de données. En cliquant sur envoie, Ca enregistre les informations dans la base. Là rien d'exceptionnel et ça fonctionne.

Afin de simplifier certaines saisies d'informations redondantes comme les pays, les villes, le genre des personnes, j'essaie de lier une table à une liste déroulante dans un formulaire.

Mon premier test a été de voir les les données de ma table s'affichaient et c'est le cas. Toutefois là où je bloque c'est pour la partie formulaire pour avoir une liste déroulante cliquable. Un truc tout simple. Mais tout ce que je trouve concerne des liste avec des sous liste et j'en passe.

Avez-vous un tutoriel à me suggérer qui serait à ma portée?

Merci à vous.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

06 sept. 2016, 12:11

Bonjour,

Je ne comprend pas bien ce que tu veux faire. Tu veux juste alimenter une liste déroulante à partir d'une liste de valeur existante en base de données ?
Si c'est le cas, tu peux effectivement utiliser les tutos sur les listes déroulantes liées et ignorer la partie qui parle du lien :)

En gros, il te suffit de définir ta liste avec un <select></select>, lui donner un nom avec l'attribut name (name="monSelect") et de faire une requête en base pour aller chercher les éléments à afficher dans cette liste. Tu fais une boucle avec un "while" ou un "for" dans laquelle pour chaque valeur, tu créer une balise <option></option> avec un attribut value (qui te permet de définir quelle valeur de monSelect le formulaire va envoyer si cette option est sélectionnée). Entre les balises <option> et </option> tu mets le texte qui doit être affiché à l'utilisateur (qui peut donc être différent de la valeur de l'option) et le tour est joué.

Au besoin, tu peux sélectionner l'une des options par défaut (par exemple en cas de modification) en ajoutant l'attribut selected dans l'option à activer par défaut. Tu peux faire ça avec un simple test du genre " if ($valeurOptionAffichée == $valeurEnregistrement) echo 'selected="selected"'; " à placer dans tes balises options.

Voilà, et si c'est pas ce que tu voulais faire, et ben tant pis, ça servira peut être à d'autres ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 64 Messages

10 sept. 2016, 12:42

Bonjour

Oui c'est exactement ce que j'essaie de faire. D'ailleur je me suis baseée sur votre tutoriel qui est ici faq-tutoriels/formulaires-listes-deroul ... t4562.html

Toutefois, j'ai eu un peu de mal pour le comprendre et le décortiquer. Je tente de faire très simple pour comprendre et assimiler.

Là je me bagarre avec le code pour adapter mais il faut du temps. J'espère y arriver.

Merci

Eléphant du PHP | 64 Messages

25 oct. 2016, 22:04

Bonjour à tous!

Après avoir fait une pause et avoir retravaillé mon code je pense ne pas être trop loin de ma liste de sélection. Toutefois il y a une erreur que je n'arrive pas à trouver.

Auriez-vous une piste pour m'aider à trouver mon erreur?

Voila ce que j'ai fait:

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <body > <form action="personnalite.php" method="post"> <label for="Sexe">Sexe :</label><select name="Sexe"> <?php // Connexion à la base de données include ('cnxBdd.php'); $sexe = $bdd -> query('select sexMin, id, snom from sexe order by sexMin ASC'); // Afficher les enregistrements while ($donnees = $sexe->fetch())?> <option value="<?php echo $donnees['id'];?>" <?php if(isset($_POST['snom'])) { if ($_POST['snom']==$donnees['id']){?> selected="selected" <?php } } ?>><?php echo $donnees['snom'];?></option> <?php $sexe->closeCursor(); ?> </select><br/><br/> <input type="submit" value="Envoyer"/> </form> </body> </html>
Ca m'affiche bien le forumlaire de choix mais je n'ai rien dans la liste de choix. Quand je fais mon test pour voir ce qu'il y a dans ma table les données sont bien là.

Je pense avoir un problème dans la partie affichage des informations de la table. Mais je coince.

Merci à vous.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 oct. 2016, 13:17

salut,

il y a quelque chose dans le code html généré ?

c'est pas simple à lire ton affaire tu peux faire plus clair
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<body >
<form action="personnalite.php" method="post">
<label for="Sexe">Sexe :</label><select name="Sexe">
<?php
// Connexion à la base de données
include('cnxBdd.php');

$sexe = $bdd->query('select id, snom from sexe order by sexMin ASC');

// Afficher les enregistrements
while ($donnees = $sexe->fetch()) {
    echo '<option value="',$donnees['id'],'"';
    if (!empty($_POST['Sexe']) && $_POST['Sexe'] == $donnees['id']) {
        echo ' selected="selected"';
    }
    echo '>', $donnees['snom'],'</option>';
}
$sexe->closeCursor();
?>
</select><br/><br/>
<input type="submit" value="Envoyer"/>
</form>
</body>
</html>
(et encore peu mieux faire ;) )
J'ai corrigé le problème sur la sélection automatique de la valeur déjà sectionnée à la soumission du formulaire.

A priori ta liste devrait être alimentée.

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 64 Messages

26 oct. 2016, 19:47

Bonsoir Moogli,

Oui le code affichait quel que chose. C'est à dire le le bouton de la liste de choix et le valider.

Pour l'apparence du code oui c'est vraie que quand je vois ce que vous arrivez à créer et ce que ça donne avec moi c'est pas folichon. Je crois voir que vous avez fait fait en sorte d'avoir une seule balise php alors que moi j'en ai fait plein. En effet ça simplifie.

J'espère arriver à cela avec la pratique.

Je vais de ce pas comparer les deux code pour voir où je me suis trompée.

Merci à vous!

EsthetiqueSurg
Invité n'ayant pas de compte PHPfrance

03 nov. 2016, 11:29

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Ceci est un titre</title>
    <META NAME="robots" CONTENT="index,follow">
    <meta name="description" content="Ceci est une description de mon site ">
	<meta name="Author" content="name"/>
Je mets dans mon site ces codes métas et codes d'encodage pour faciliter l'indexation de mon site chirurgie