Notice: Undefined variable: errors

le loup solitaire
Invité n'ayant pas de compte PHPfrance

24 avr. 2016, 11:04

bonjour,

je ne comprend pas pourquoi cette erreur, pouvez vous m'expliqué, je sais que ça veut dire "variable non défini", mais pourquoi dans le script.
<?php 

$reponses = array(
    'chx' => array(
        'reponse' => 'un',
        'mot' => 'po',
        'drag' => '___rtable',
         'image' => 'img/portable.gif'
    ) ,
    'chx_1' => array(
        'reponse' => 'le',
        'mot' => 'so',
        'drag' => '___l',
         'image' => 'img/sol.gif'
    ) ,
    'chx_2' => array(
        'reponse' => 'un',
        'mot' => 'peau',
        'drag' => 'dra___',
         'image' => 'img/drapeau.gif'
    ) ,
    'chx_3' => array(
        'reponse' => 'un',
        'mot' => 'teau',
        'drag' => 'pla___',
         'image' => 'img/plateau.gif'
    ) ,
    'chx_4' => array(
        'reponse' => 'des',
        'mot' => 'vau',
        'drag' => 'tra___x',
         'image' => 'img/panneau.gif'
    ) ,
    'chx_5' => array(
        'reponse' => 'de la',
        'mot' => 'sau',
        'drag' => '___ce',
         'image' => 'img/sauce.gif'
    ) ,
    'chx_6' => array(
        'reponse' => 'un',
        'mot' => 'seau',
        'drag' => '____',
         'image' => 'img/seau.gif'
    ) ,
    'chx_7' => array(
        'reponse' => 'du',
        'mot' => 'cho',
        'drag' => '___colat',
        'image' => 'img/chocolat.gif'
    ), 
    'chx_8' => array(
        'reponse' => 'une',
        'mot' => 'to',
        'drag' => '___mate',
         'image' => 'img/tomate.gif'
    ) ,
    'chx_9' => array(
        'reponse' => 'des',
        'mot' => 'chau',
        'drag' => '___ssures',
        'image' => 'img/chaussure.gif'
    ) 

);
 
  
foreach($reponses as $cle => $reponse)
    {
   
              if (isset($_POST['correction']))
        {
        $clic = $_POST[$cle];
	
        if (empty($clic) && empty($clic) !=  $reponse['mot'])
            {
			var_dump($clic);	
            $msg = '<p>veuillez remplir tous les champs</p>';
            echo $msg;
            }
          else
        if ($clic == $reponse['mot'])
            {
			 
            echo '<p style="margin-left:4em;">' . $reponse['mot'] . '</p><p style="margin-left:5em;">'. $reponse['drag'] . '</p><br />';

            }
          else
        if ($clic != $reponse['mot'])
            {
					$errors = array();
                    $errors[$cle] = htmlspecialchars($clic);
                    
                     echo '<article class="content_img"><figure><img src="'. $reponse['image'] .'" alt="" width:"75" height="75" /></figure><p style="color:red;margin-left:4em;"><del>' . $errors[$cle] . '</del><p>'.$reponse['mot'].'</p><p style="text-align:right;margin-left:5em;">'. $reponse['drag'] . '</p></article>';
				
          
                }
        }
    }
                echo'<br />';
         echo'<p style="display:inline-block;margin:2em 0 0 35%;padding:.5em;background:#54d0ce;font-size:1.2em;">Bonnes réponses :'.count($reponse['mot']).' - '.count($errors[$cle]).'/10</p>';
          echo'<br /><br />';

      ?>
merci d'avance

Mammouth du PHP | 688 Messages

24 avr. 2016, 11:53

il faut mettre la ligne
$errors = array();
à un endroit où elle sera toujours executé et pas seulement selon un if.

le loup solitaire
Invité n'ayant pas de compte PHPfrance

24 avr. 2016, 12:13

merci je n’ai plus d'erreur pour ça, mais par contre j'en ais une autre "undefined index:chx_9" pourquoi?

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

25 avr. 2016, 13:13

Bonjour,

Tout dépend de la ligne de l'erreur... A vue de nez, je dirais que c'est dans ta boucle quand tu fais appel à $clic = $_POST[$cle];
$cle est bien définie dans ton tableau, mais à aucun moment tu ne vérifies que l'index contenu dans $cle est bien présent dans $_POST... tu demandes à php de récupérer la valeur sans te soucier de savoir si elle existe... s'il ne la trouve pas, il affiche ce genre de message.

Et si c'est pas cette ligne là, il te suffit de contrôler ton code en fonction du message de php :)

Tu dois aussi avoir une erreur ici : empty($clic) && empty($clic) != $reponse['mot']
empty($clic) sera rarement égal à $reponse['mot'] ... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...