Undefined variable

Résolu
Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   -  
arthezius Messages postés 3756 Statut Membre -
Bonjour,

Je rencontre ces deux erreurs en local que je n'arrives pas à résoudre. Pouvez-vous m'aider svp ?
Pourtant quand je lance le script sur mon site il ne m'envoie pas d'erreur...

Notice: Undefined variable: pass2 in C:\Program Files\EasyPHP-5.3.6.0\www\header.php on line 2
if($pass2 !=1){$resultat="S'incrire à notre newsletter";}

Notice: Undefined variable: email in C:\Program Files\EasyPHP-5.3.6.0\www\header.php on line 4
if (strlen($email) >=1){
Voici mon code :
<?php
if($pass2 !=1){$resultat="S'incrire à notre newsletter";}
$test = 1;
if (strlen($email) >=1){
$email = str_replace("|","",$email);
if (ereg(".+(@.+)(\.[[:alpha:]]{2}([[:alpha:]]?))$",$email)){} else {$test = 0;$resultat = "<span class=MiniRouge>Erreur ! Adresse email invalide !</span>";$pass2=1;}
$fp = fopen("result.lst","r");
while (!feof($fp)){$ligne = fgets($fp,4096);$email2 = explode("|",$ligne);}
fclose($fp);
for($x=0;$x <= sizeof($email2)-1;$x++){
if ($email2[$x] == $email){$test=0;$resultat = "<span class=MiniRouge>Erreur ! Votre adresse email est déjà enregistrée</span>";$pass2=1;}}
if($test== 1 ){
$fp = fopen("result.lst","a");fputs($fp,"$email|");fclose($fp);
$resultat = "Votre inscription a bien été validé";$pass2=1;}}
?>

9 réponses

  1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    c'est tout simplement que tes variables n'existent pas.

    met un

    if(!isset($pass2)||!isset($email))
    {
    die("les variables ne sont pas definies")
    }

    et ton problème est réglé :)
    0
  2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Hihi avec ce code que tu m'as donné il m'informe que mes variables ne sont pas définies :D... page blanche :p
    Sinon comment définir les variables ? :$
    0
    1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      ben tu ne définie pas tes variable, à quoi correspondent $pass et $email ?

      si tu ne l'indique pas, PHP ne le devine pas ;)
      0
  3. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Désolé, je suis NUL en php :$ C'est pourquoi je pose des questions idiotes :p

    En fait ce script enregistre dans un fichier les adresses email pour faire une sorte de newsletter.

    Tu as déjà tout mon code à l'exception de celui-ci :
    <form method="post" action="index.php?pass2=$pass2">
    <input name="email" type="text">
    <input type="submit" name="submit" value=" OK ">
    <br>
    <? echo($resultat) ?>
    </form>
    0
    1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      alors dans ton code PHP, il te manque ça :

      $pass2 = $_GET['pass2'];
      $email= $_POST['email'];

      par contre, tu devrais vérifier ton URL : index.php?pass2=$pass2

      là, tu assigne la valeur '$pass2' à ta variable $pass2

      ça fonctionne comme ça : ?pass2=valeur

      remplace juste valeur par la valeur textuelle ou numérique que tu souhaite :)
      0
  4. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Il m'envoie deux erreurs sur les deux lignes que tu m'as donné.
    Undefined index: pass2
    Undefined index: email
    C'est normal ?<?php 
    $pass2= $_GET['pass2']; 
    $email= $_POST['email'];  
    if($pass2 !=1){$resultat="S'incrire à notre newsletter";} 
    $test = 1; 
    if (strlen($email) >=1){ 
    $email = str_replace("|","",$email); 
    if (ereg(".+(@.+)(\.[[:alpha:]]{2}([[:alpha:]]?))$",$email)){} else {$test = 0;$resultat = "<span class=MiniRouge>Erreur ! Adresse email invalide !</span>";$pass2=1;} 
    $fp = fopen("result.lst","r"); 
    while (!feof($fp)){$ligne = fgets($fp,4096);$email2 = explode("|",$ligne);} 
    fclose($fp); 
    for($x=0;$x <= sizeof($email2)-1;$x++){ 
    if ($email2[$x] == $email){$test=0;$resultat = "<span class=MiniRouge>Erreur ! Votre adresse email est déjà enregistrée</span>";$pass2=1;}} 
    if($test== 1 ){ 
    $fp = fopen("result.lst","a");fputs($fp,"$email|");fclose($fp); 
    $resultat = "Votre inscription a bien été validé";$pass2=1;}} 
    ?> 
    <form method="post" action="index.php?pass2=100"><input name="email" type="text"> 
    <input type="submit" name="submit" value=" OK "><br><? echo($resultat) ?></form>

    J'ai aussi changé comme ça :
    index.php?pass2=1
    0
    1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      tu as bien lancé depuis ton formulaire ?
      0
    2. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      Oui :s en local, il m'envoie ces deux erreur... j'ai même fais Ctrl+F5 pour rafraichir mais pareil :s
      C'est grave docteur ? :|
      0
    3. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      je sais pas, je regarde ça demain en rentrant des cours, là j'suis creuvé :/

      tu as bon ton formulaire dans une page à part ?
      0
    4. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
       
      oui le code est dans une page seule (header.php) que j'exécute toute seule dans mon navigateur pour tester (en local)
      Aucune page n'est appelée depuis celle-ci !

      Merci pour ton aide Templier Nocturne
      0
    5. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      donc, si j'ai bien compris, tu lance header.php, et header.php redirige vers index.php ?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    non non, là j'ai exécuter dans le navigateur seulement le header pour voir l'erreur !
    Et ce matin en fait, quand j'ai enlevé les
    <?php
    et remplacé par
    <?
    ça a fonctionné :s
    Je n'ai rien compris à ça...!!!
    C'est le "<?php" qui me faisait toute cette merde :s
    0
    1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      tu as bien donné l'intégralité de ta page index.php ?
      0
  7. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Non, rien avoir avec l'index tout le code que je t'ai envoyé Templier Nocturne, je ne travail pour l'instant que sur la page header.php
    Le code complet que j'ai posté plus haut n'est qu'au fichier header.php :s

    Penses tu que c'est normal que <?php fasse erreur et que <? résoude le problème ?
    0
  8. arthezius Messages postés 3756 Statut Membre 475
     
    Ton formulaire:
    <form method="post" action="index.php?pass2=$pass2"> 
    <input name="email" type="text"> 
    <input type="submit" name="submit" value="OK "> 
    <br> 
    <? echo($resultat) ?> 
    </form>

    Quand tu envoi ton formulaire (en cliquant sur le bouton Ok) tu es redirigé vers la page index.php?pass2=1

    Autrement dit, sur la page index.php, tu as le script PHP qui te permet de traiter ton formulaire. Tu as donc sur cette page le script suivant:

    <?php  
    $pass2= $_GET['pass2'];  
    $email= $_POST['email'];   
    if($pass2 !=1){$resultat="S'incrire à notre newsletter";}  
    $test = 1;  
    if (strlen($email) >=1){  
    $email = str_replace("|","",$email);  
    if (ereg(".+(@.+)(\.[[:alpha:]]{2}([[:alpha:]]?))$",$email)){} else {$test = 0;$resultat = "<span class=MiniRouge>Erreur ! Adresse email invalide !</span>";$pass2=1;}  
    $fp = fopen("result.lst","r");  
    while (!feof($fp)){$ligne = fgets($fp,4096);$email2 = explode("|",$ligne);}  
    fclose($fp);  
    for($x=0;$x <= sizeof($email2)-1;$x++){  
    if ($email2[$x] == $email){$test=0;$resultat = "<span class=MiniRouge>Erreur ! Votre adresse email est déjà enregistrée</span>";$pass2=1;}}  
    if($test== 1 ){  
    $fp = fopen("result.lst","a");fputs($fp,"$email|");fclose($fp);  
    $resultat = "Votre inscription a bien été validé";$pass2=1;}}  
    ?>  
    <form method="post" action="index.php?pass2=100"> 
    <input name="email" type="text">  
    <input type="submit" name="submit" value="OK "><br><? echo($resultat) ?></form>


    Le script de traitement est donc sur la même page que le formulaire.
    Il te faut donc ajouter une condition qui vérifie si le formulaire est bien envoyé ou non.
    Dans le cas contraire, le script PHP est exécuté à chaque affichage de la page ce qui n'est pas le but.

    <?php
    if(isset($_POST['submit']) && $_POST['submit']=='Ok')
    {
    // Le script PHP
    }
    ?>
    Note: Je me suis permis de supprimer les espaces en trop sur le bouton submit et de fermer la balise (avec />)
    <input type="submit" name="submit" value="OK" />


    Ta page donne donc (avec les correctifs):
    <?php 
    if(isset($_POST['submit']) && $_POST['submit']=='Ok') 
     { 
     $pass2= $_GET['pass2'];  
     $email= $_POST['email'];   
     if($pass2 !=1) 
      { 
      $resultat="S'incrire à notre newsletter"; 
      } 
     $test = 1;  
     if (strlen($email) >=1) 
      {  
      $email = str_replace("|","",$email);  
      if (ereg(".+(@.+)(\.[[:alpha:]]{2}([[:alpha:]]?))$",$email)) 
       {} 
      else{ 
       $test = 0; 
       $resultat = "<span class=MiniRouge>Erreur ! Adresse email invalide !</span>"; 
       $pass2=1; 
       }  
      $fp = fopen("result.lst","r");  
      while (!feof($fp)) 
       { 
       $ligne = fgets($fp,4096);$email2 = explode("|",$ligne); 
       } 
      fclose($fp);  
      for($x=0;$x <= sizeof($email2)-1;$x++) 
       {  
       if ($email2[$x] == $email) 
        { 
        $test=0; 
        $resultat = "<span class=MiniRouge>Erreur ! Votre adresse email est déjà enregistrée</span>"; 
        $pass2=1; 
        } 
       } 
      if($test== 1 ) 
       { 
       $fp = fopen("result.lst","a"); 
       fputs($fp,"$email|"); 
       fclose($fp);  
       $resultat = "Votre inscription a bien été validé"; 
       $pass2=1; 
       } 
      } 
     } 
    ?>  
    <form method="post" action="index.php?pass2=100"> 
    <input name="email" type="text" />  
    <input type="submit" name="submit" value="OK" /> 
    </form> 
    <?php 
    if(isset($resultat)) echo '<br>'.$resultat; 
    ?>

    J'ai également rendu ton code plus lisible en ajoutant d'avantage de saut de ligne ainsi que des tabulations.
    Voilà qui devrait mieux fonctionner.

    Edit: si tu travail sur un fichier header.php, il faut que tu modifie l'url en fonction sur la balise <form>
    « La recherche commence là où s'arrête la connaissance. »
    0
  9. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Je ne sais pas comment te remercier arthezius et toi aussi Templier nocturne.
    Je met ce script en place une fois à la maison et vous préviendrai du fonctionnement ^^

    Merci encore à tous les deux !
    0
    1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      en disant simplement "merci", ça fait toujours plaisir à recevoir :)
      0
  10. Sinistrus Messages postés 1010 Date d'inscription   Statut Membre Dernière intervention   17
     
    Merci ^^ il fonctionne à merveille, en local ou en ligne !
    Encore merci à tous les deux !
    0
    1. Templier Nocturne Messages postés 9989 Statut Membre 1 107
       
      pas de problème ;)

      pas contre, met le message en "résolu" STP :)
      0
    2. arthezius Messages postés 3756 Statut Membre 475
       
      Pas de souci :)
      Effectivement, oublie pas de modifier le statu en résolu (en haut).
      0