Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2580 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  message "Undefined offset"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

message "Undefined offset"

n°1008702
Lepwel
Posté le 10-03-2005 à 18:45:35  profilanswer
 

J'ai une page .PHP qui sert à inscrire une adresse courriel dans un fichier texte.  Pour ne pas inscrire une adresse déjà existante il y à une boucle While qui vérifie chaque adresse (le contenu du fichier texte étant mit dans un tableau) et à la fin il ajoute l'adresse.  Le problème c'est qu'à la fin le compteur s'est rendu jusqu'à une valeur dépassant la dernière ligne du tableau et à cause de la config de mon hébergeur j'obtiens toujours le message "Undefined offset : X " ( X étant le nombre qui suit la dernière ligne du tableau).
 
Voici un bout de mon code :
 
 
//ouverture du fichier en mode ajout
$fichier=fopen('maillist/users.txt','a');  
//transfert du fichier dans un tableau
$liste_users = file("maillist/users.txt" );  
         
    $i=0;
    $exist=0;
     
    //Verification si l'adresse email entree est deja presente
    //Si oui, on met le flag $exist égal a 1
    while($liste_users[$i] != "" )
    {    
     if(trim($liste_users[$i]) == trim($email))
     {
      $exist=1;
                 }  
     $i++;
    }
     
    //si l'adresse email est deja presente dans le fichier texte
    //on affiche un message d'erreur

    if($exist == 1)
    {
     $msg="<p>Erreur!! Vous êtes déjà dans la liste.<BR><BR>
         L'adresse <a href='mailto:$email'>$email</a> est déja dans notre base de données.</p>";
    }
    else //sinon on ecrit l'adresse dans le fichier texte
    {
     fwrite($fichier,"$email\n" );
     $msg="<p>L'adresse émail <a href='mailto:$_POST[email]'>$_POST[email]</a> a été  ajoutée.</p>";
    }
    echo $msg;
   }
   fclose($fichier);
  }
 }
 
 
 
Tout fonctionne bien mais j'ai toujours mon message "Undefined offset"...auriez-vous une idée (autre que demander à l'hébergeur de reconfigurer son php.ini !

mood
Publicité
Posté le 10-03-2005 à 18:45:35  profilanswer
 

n°1008703
KangOl
Profil : pointeur
Posté le 10-03-2005 à 18:47:01  profilanswer
 

a quelle lignes ??
 
ps : et les balises code c'est pas pour les chiens :fou:


---------------
Nos estans firs di nosse pitite patreye...
n°1008707
Profil sup​primé
Posté le 10-03-2005 à 18:59:07  answer
 

KangOl a écrit :

a quelle lignes ??
 
ps : et les balises code c'est pas pour les chiens :fou:


au while je pense, vu qu'à la fin du tableau passé, son prochain id ne peut exister
 
tu peux faire plus simple Lepwel : utilise in_array pour eviter ton while
 
et si tu veux garder ta boucle pour pas qu'elle plante, utilise foreach à la place de while, t'aura pas d'$id à gerer


Message édité par Profil supprimé le 10-03-2005 à 18:59:41
n°1008739
naceroth
Posté le 10-03-2005 à 19:27:11  profilanswer
 

Lepwel a écrit :

...
Tout fonctionne bien mais j'ai toujours mon message "Undefined offset"...auriez-vous une idée (autre que demander à l'hébergeur de reconfigurer son php.ini !


 
Ton code (enfin, la condition de séjour de la boucle while) ne veut strictement rien dire oui, un élément vide ("" ) n'est pas un élément non définit, donc quand $i devient plus grand que la taille du tableau, il couine, tu lui demandes une comparaison sur quelque chose qui n'existe pas.
 
En plus de in_array, tu peux aussi voir isset, count, ou tout ce qui concerne le parcours d'un tableau :)

n°1011692
Lepwel
Posté le 14-03-2005 à 03:32:11  profilanswer
 

J'ai remplacé ma boucle "while" par la fonction in_array...je n'obtiens donc plus d'erreur.  Mais ca ne fonctionne pas!  Voici mon code :
 

Code :
  1. if (in_array($email,$liste_users))
  2. {
  3.  $exist=1;
  4. }


 
Je veux vérifier si la valeur de la variable $email se trouve dans le tableau $liste_users mais ca ne fonctionne pas...en mettant une addresse déjà existante dans la variable $email il ne mets pas ma variable $exist à 1 et l'adresse est mise en double dans mon fichier texte.  
 
Je présume qu'il y a quelque chose que je n'ai pas bien compris dans le foncionnement de la fonction "in_array" ?  Quelqu'un peut m'aider?

n°1012348
naceroth
Posté le 14-03-2005 à 17:27:06  profilanswer
 

C'est plutôt la fonction file que tu as mal comprise à mon avis. N'oublie pas qu'elle conserve les retour-chariots en fin de ligne :)

n°1012397
Lepwel
Posté le 14-03-2005 à 18:07:11  profilanswer
 

Je ne vois pas pourquoi l'erreur serait dans ma fonction file puisque du temps ou j'avais une boucle while ma fonction marchait...c'est seulement depuis que j'ai remplacé le while par le in_array que je n'arrive plus a détecter les adresses déjà présentes dans mon fichier texte...

n°1012451
Lepwel
Posté le 14-03-2005 à 19:02:53  profilanswer
 

Je pense comprendre le truc du retour de chariots...j'ai refait mon code comme suit :
 
 
if (in_array($email+"\n", $liste_users))
     {
 $exist=1;
     }
 
 
 
Mais maintenant il met toujours la variable $exist à 1...il y a encore un détail que je ne saisi pas bien...

n°1012481
naceroth
Posté le 14-03-2005 à 19:28:44  profilanswer
 

Lepwel a écrit :

Je ne vois pas pourquoi l'erreur serait dans ma fonction file puisque du temps ou j'avais une boucle while ma fonction marchait...c'est seulement depuis que j'ai remplacé le while par le in_array que je n'arrive plus a détecter les adresses déjà présentes dans mon fichier texte...


 
Parce que ton code à base de while fait une comparaison sur le trim des variables, pas sur les variables elle-mêmes. Hors trim supprime entre autre les \n...
 
Deuxio, le + n'est pas le symbole de concaténation en php... (et ce n'est pas la bonne méthode, ça va foirer si ton dernier élément ne comporte pas un retour chariot par exemple)

n°1012482
Lepwel
Posté le 14-03-2005 à 19:29:09  profilanswer
 

Finalement tout fonctionne...il fallait seulement ajouter le \n comme ceci :
 
if (in_array("$email\n", $liste_users))
     {
 $exist=1;
     }
 
 
Merci pour vos conseils qui m'ont orientés dans mes recherches!

mood
Publicité
Posté le 14-03-2005 à 19:29:09  profilanswer
 

n°1012483
naceroth
Posté le 14-03-2005 à 19:29:54  profilanswer
 

C'est toujours pas fiable, je dis ça je dis rien hein :D

n°1012486
KangOl
Profil : pointeur
Posté le 14-03-2005 à 19:31:21  profilanswer
 

utilise trim pour supprimé les espaces en trop...


---------------
Nos estans firs di nosse pitite patreye...

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  message "Undefined offset"

 

Sujets relatifs
empecher l'apparition du message de suppression d'un ongletJ'arrive pas a afficher un message de confirmation
Message d'avertissement à la fermetureNotice : Undefined Offset ??? [Resolu]
[C] Formule pour trouver un offsetmessage box en php?
Problème de réception de messagemessage d'erreur bien etrange
message déjà lu [Résolu] 
Plus de sujets relatifs à : message "Undefined offset"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR