Undefined offset:

Résolu
tintin -  
 Utilisateur anonyme -
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. Utilisateur anonyme
     
    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
  2. tintin
     
    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
  3. Utilisateur anonyme
     
    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
  4. tintin
     
    Rebonjour,

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