Undefined offset:

Résolu
Bonjour,


Bonjour,

Suite à une récupération d'un formulaire par le code ci-dessous
<?php
$Form = @$_POST['listOfItems'];
$tableau = explode(";", $Form);
$occurences = count($tableau);
for ($i = 0 ; $i < count($tableau); $i++)
{
$arrayChaine=explode("|",$tableau[$i]);
$quest[2*$i] = $arrayChaine[$i];
$rep[2*$i+1] = $arrayChaine[$i+1];
}

?>
J'obtiens le message d'erreur suivant
Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Site\save.php on line 9
Notice: Undefined offset: 2 in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Site\save.php on line 8
Notice: Undefined offset: 3 in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Site\save.php on line 9
Notice: Undefined offset: 3 in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Site\save.php on line 8
Notice: Undefined offset: 4 in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Site\save.php on line 9
Notice: Undefined offset: 4 in C:\Program Files (x86)\EasyPHP-5.3.8.0\www\Site\save.php on line 8

Je pense que mon erreur vient des 2 lignes suivantes mais je ne comprends pas pourquoi.
J'ajoute qu'un affichage de $Form me donne quest1|rep2;quest3|rep4;quest2|rep5;quest4|rep1

J'ajoute que je veux récupérer dans des variables les contenus de chaque question et de chaque réponse.

Merci d'avance aux contributeurs.

4 réponses

  1. Bonjour

    Ça me semble logique.
    À chaque boucle, quand tu exploses $tableau[$i], tu récupères un tableau à deux éléments, d'indices 0 et 1.

    Donc
    $quest[2*$i] = $arrayChaine[0]; 
    $rep[2*$i+1] = $arrayChaine[1]; 
    
    0
    1. Bonjour,

      Etant assez débutant en php, je pensais que ma variable $i s'incrémentant, j'aurais
      $quest0 = ma 1ère question,
      $rep1 = ma 1ère réponse,
      
      $quest2 = ma 2ème question,
      $rep3 = ma 2ème réponse,
      
      $quest4 = ma 3ème question,
      $rep5 = ma 3ème réponse,
      
      etc.


      C'est en fait ce que je souhaiterais obtenir.
      Mais dans ce cas, comment faire ?
      Encore merci.
      0
      1. C'est bien ce que tu obtiendras (sauf que tu as oublié les [] )
        Mais par contre, à chaque boucle, tu fais $arrayChaine=explode("|",$tableau[$i]);.
        $arrayChaine est donc re-créé à chaque fois. Comme il y a deux éléments, ces éléments ont les indices 0 et 1. Mais je ne parle ici que des indices de $arrayChaine ; pour $quest et $rep, ça se passe bien comme tu le dis. Et la correction, je te l'ai donnée dans mon message précédent.

        Mais quel est l'intérêt de n'utiliser que les indices pairs dans $quest et les indices impairs dans $rep ?
        Ça ne te semblerait pas plus logique d'avoir le même indice pour la question et la réponse qui va avec ?
        Ça donnerait :
        $quest=array();
        $rep=array();
        for ($i = 0 ; $i < count($tableau); $i++) 
        { 
          $arrayChaine=explode("|",$tableau[$i]); 
          $quest[] = $arrayChaine[0];  // sans indice, on ajoute à la fin du tableau
          $rep[] = $arrayChaine[1]; 
        } 
        
        0
        1. Rebonjour,

          Merci à tous les contributeurs et particulièrement à le père.
          Ca fonctionne.
          0
          1. Merci, mais je ne suis pas contributeur au sens que ce mot a dans CCM ;-)
            0