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   -
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 :

 
<?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:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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


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;
	 }



0
Stavestone
 
Merci pour votre réponse. Après avoir appliqué vos conseils, il s'avère que mes valeurs de listes déroulantes soient toutes vides (array var_dump vide). Pourtant, je sélectionne bien des valeurs avant d'envoyer le formulaire...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Stavestone
 
Fais voir le code source généré de ton formulaire
Et puis la structure de ta table..
J'espère qu'il n'y a pas d'accents dans tes nos de thèmes...
0
Stavestone
 
Voici le code source généré du formulaire (avec 3 thèmes) :

<!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.');
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Tu as vu que tes balises select l'attribut name est vide ...??!!
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
D'ailleurs, tu devrais te servir des ID de thèmes au lieu de leur nom.
0
Stavestone > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 :

      <?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.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > Stavestone
 
Par ce qu'il te manquait un echo
<select name="<?php echo $data['NomTheme']; ?>">
0