Erreur de récupération de valeur dans plusieurs listes déroulantes
Stavestone
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour tout le monde,
Je souhaite créer un formulaire qui évalue des membres selon un thème donné (il y en a 20 en tout). Pour cela, j'ai crée une série de liste déroulante dans un while comme ci-dessous :
Et voici un extrait de code de la page "process_evaluation.php" :
Cependant, lorsque j'exécute le code, ça me marque comme erreur "undefined index"... Est-ce quelqu'un pourrait m'aiguiller ?
Je vous remercie par avance!
Je souhaite créer un formulaire qui évalue des membres selon un thème donné (il y en a 20 en tout). Pour cela, j'ai crée une série de liste déroulante dans un while comme ci-dessous :
<?php
<form method="POST" action="process_evaluation.php">
$reponse = $db->query('SELECT NomTheme from Themes');
while ($data = $reponse->fetch())
{
?>
<select name="<?php $data['NomTheme']; ?>">
<option value="">Choisir un niveau</option>
<option value="Bon niveau">Bon niveau</option>
<option value="Niveau moyen">Niveau moyen</option>
<option value="Mauvais niveau">Mauvais niveau</option>
</select>
}
</br><input type="submit" name="submit" value="Valider"/>
</form>
Et voici un extrait de code de la page "process_evaluation.php" :
if($_SERVER['REQUEST_METHOD']==="POST"){
$stmt = $db->query('SELECT NomTheme FROM Themes');
while ($data = $stmt->fetch())
{
echo "Evaluation : ";
echo ($_POST[''. $data['NomTheme']]);
}
Cependant, lorsque j'exécute le code, ça me marque comme erreur "undefined index"... Est-ce quelqu'un pourrait m'aiguiller ?
Je vous remercie par avance!
Configuration: Windows / Chrome 92.0.4515.131
A voir également:
- Erreur de récupération de valeur dans plusieurs listes déroulantes
- Liste déroulante de choix excel - Guide
- Listes déroulantes en cascade excel - Guide
- Convertisseur récupération de texte - Guide
- Comment recuperer whatsapp supprimé par erreur - Guide
- Iptv erreur de lecture - Forum TV & Vidéo
2 réponses
Bonjour,
Déjà, il serait bien d'activer l'affichage des erreurs PHP ainsi que celles de PDO.
Je t'invite à appliquer les conseils ( consignes...) présentes ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Ensuite,
Pour savoir ce que contient ta variable POST, fais en un var_dump
Déjà, il serait bien d'activer l'affichage des erreurs PHP ainsi que celles de PDO.
Je t'invite à appliquer les conseils ( consignes...) présentes ici :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Ensuite,
Pour savoir ce que contient ta variable POST, fais en un var_dump
if($_SERVER['REQUEST_METHOD']==="POST"){ var_dump($_POST); $stmt = $db->query('SELECT NomTheme FROM Themes'); while ($data = $stmt->fetch()) { $nomTheme = $data['NomTheme']; $eval = !empty($_POST[$nomTheme]) ? $_POST[$nomTheme] : ""; echo "<br>" . $nomTheme . " Evaluation : " . $eval; }
Voici le code source généré du formulaire (avec 3 thèmes) :
Les noms de mes listes déroulantes sont vides, mais je ne vois pas pourquoi.
Voici la structure de ma table, toujours avec 3 thèmes pour faire les tests (j'ai vérifié, il n'y a pas d'accent) :
<!DOCTYPE html> <html> <!-- sélectionner un membre à évaluer --> <form method="POST" action="process_evaluation.php"> <h3> Tactique : Anticipation itineraire </h3> <p> Etre capable d' interpreter les solutions, les sequences (+ ou - intenses) et les mousquetonnages dans un bloc ou une voie. </p> <select name=""> <option value="">Choisir un niveau</option> <option value="Bon niveau">Bon niveau</option> <option value="Niveau moyen">Niveau moyen</option> <option value="Mauvais niveau">Mauvais niveau</option> </select> <h3> Tactique : Rythme </h3> <p> Etre capable d' adapter le rythme d'escalade en fonction des differentes contraintes (profils, styles, sequences, etc.) dans un bloc ou une voie. </p> <select name=""> <option value="">Choisir un niveau</option> <option value="Bon niveau">Bon niveau</option> <option value="Niveau moyen">Niveau moyen</option> <option value="Mauvais niveau">Mauvais niveau</option> </select> <h3> Tactique : Memorisation </h3> <p> Etre capable de retenir de l'information (grace aux 5 sens), avec l’objectif de l’exploiter ulterieurement. </p> <select name=""> <option value="">Choisir un niveau</option> <option value="Bon niveau">Bon niveau</option> <option value="Niveau moyen">Niveau moyen</option> <option value="Mauvais niveau">Mauvais niveau</option> </select> </br><input type="submit" name="submit" value="Valider"/> </form> </html>
Les noms de mes listes déroulantes sont vides, mais je ne vois pas pourquoi.
Voici la structure de ma table, toujours avec 3 thèmes pour faire les tests (j'ai vérifié, il n'y a pas d'accent) :
DROP TABLE IF EXISTS `themes`; CREATE TABLE IF NOT EXISTS `themes` ( `IdTheme` int(11) NOT NULL, `NomTheme` varchar(147) NOT NULL, `FK_IdQualite` int(11) DEFAULT NULL, `Competences` varchar(500) DEFAULT NULL, PRIMARY KEY (`IdTheme`), KEY `IdQualite` (`FK_IdQualite`) ) INSERT INTO `themes` (`IdTheme`, `NomTheme`, `FK_IdQualite`, `Competences`) VALUES (1, 'Anticipation itineraire', 0, 'Etre capable d\' interpreter les solutions, les sequences (+ ou - intenses) et les mousquetonnages dans un bloc ou une voie.'), (2, 'Rythme', 0, 'Etre capable d\' adapter le rythme d\'escalade en fonction des differentes contraintes (profils, styles, sequences, etc.) dans un bloc ou une voie.'), (3, 'Memorisation', 0, 'Etre capable de retenir de l\'information (grace aux 5 sens), avec l’objectif de l’exploiter ulterieurement.');
Oui, justement dans ma réponse je disais que je ne comprenais pas pourquoi...
Finalement, j'ai changé le code de mon formulaire par ceci :
et ça fonctionne maintenant, même si je ne comprends toujours pas pourquoi mon code initial était faux. Merci d'avoir pris le temps de m'aider.
Finalement, j'ai changé le code de mon formulaire par ceci :
<?php $nameselected = "".$data['NomTheme']; echo '<select name="' . $nameselected . '"> <option value="Bon niveau">Bon niveau</option> <option value="Niveau moyen">Niveau moyen</option> <option value="Mauvais niveau">Mauvais niveau</option> </select>'; ?>
et ça fonctionne maintenant, même si je ne comprends toujours pas pourquoi mon code initial était faux. Merci d'avoir pris le temps de m'aider.
Et puis la structure de ta table..
J'espère qu'il n'y a pas d'accents dans tes nos de thèmes...