2010-08-23 7 views
0

je l'erreur suivante:Undefined Index PHP issue.Please aide

Notice: Undefined index: soumettre dans C: \ wamp \ www \ registration \ register.php sur la ligne 6

ne semble pas prête pour savoir ce qui est mal ??? Voici le code ::

<?php 
    //Create registration form (register.php) 
    include "../includes/db_connect.php"; 

    if(!$_POST['submit']) ///Line 6 
    { 
    ?> 
    <html> 
    <head><link rel="stylesheet" href="style.css"></head> 

    <div class="divider"> 
    <strong>Register</strong><br/><br/> 
    <form method="post" action="register.php"> 

    <div class="formElm"> 
    <label for="first">First Name</label> 
    <input id="first" type="text" name="first"> 
    </div> 

    <div class="formElm"> 
    <label for="last">Last Name</label> 
    <input id="last" type="text" name="last"> 
    </div> 

    <div class="formElm"> 
    <label for="username">Desired Username</label> 
    <input id="username" type="text" name="username"> 
    </div> 

    <div class="formElm"> 
    <label for="password">Password</label> 
    <input id="password" type="password" name="password"> 
    </div> 

    <div class="formElm"> 
    <label for="pass_conf">Confirm Password</label> 
    <input id="pass_conf" type="password" name="pass_conf"> 
    </div> 

    <div class="formElm"> 
    <label for="email">Email</label> 
    <input id="email" type="text" name="email"> 
    </div> 

    <div class="formElm"> 
    <label for="about">About</label> 
    <textarea id="about" cols="30" rows="5" name="about">Tell us about yourself</textarea> 
    </div> 

    <input type="submit" name="submit" value="Register"> 
    </form> 

    or <a href="index.php">Login</a> 
    </div> 
    </html> 
    <?php 
    } 
    else 
    { 
    $first = protect($_POST['first']); 
    $last = protect($_POST['last']); 
    $username = protect($_POST['username']); 
    $password = protect($_POST['password']); 
    $pass_conf = protect($_POST['pass_conf']); 
    $email = protect($_POST['email']); 
    $about = protect($_POST['about']); 
    $errors = array(); 
    $regex = "/^[a-z0-9]+([_\.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\.[a-z]{2,}$/i"; 
    if(!preg_match($regex, $email)) 
    { 
     $errors[] = "E-mail is not in [email protected] format!"; 
    } 

    if(!$first || !$last || !$username || !$password || !$pass_conf || !$email || !$about) 
    { 
     $errors[] = "You did not fill out the required fields"; 
    } 

    $sql = "SELECT * FROM `users` WHERE `username`='{$username}'"; 
    $query = mysql_query($sql) or die(mysql_error()); 

    if(mysql_num_rows($query) == 1) 
    { 
     $errors[] = "Username already taken, please try another"; 
    } 
    if(count($errors) > 0) 
    { 
     echo "The following errors occured with your registration"; 
     echo "<font color=\"red\">"; 
     foreach($errors AS $error) 
     { 
     echo "<p>" . $error . "\n"; 
     } 
     echo "</font>"; 
     echo "<a href=\"javascript:history.go(-1)\">Try again</a>"; 
     //we use javascript to go back rather than reloading the page 
     // so the user doesn't have to type in all that info again. 
    } 
    else 
    { 
     $sql = "INSERT into `users`(`first`,`last`,`username`,`password`,`email`,`about`) 
     VALUES ('$first','$last','$username','".md5($password)."','$email','$about');"; 

    $query = mysql_query($sql) or die(mysql_error()); 
    echo "Thank You for registering {$first}! Your username is {$username}"; 
    echo "<a href=\"index.php\"> Click here </a> to Login"; 
    } 
    } 

?> 

Répondre

1

Pour se débarrasser de cette erreur, il devrait être:

if(!isset($_POST['submit'])) 

Cependant, votre code est déjà OK.

Ce que vous obtenez n'est pas une erreur, c'est un avertissement, qui est causé par la mise en place d'avertissements stricts. PHP est un langage dynamique qui ne nécessite généralement pas de définir des variables et des clés de tableau, et la plupart de la documentation et du code vont ignorer cette partie. Vous devriez donc envisager de désactiver cette fonctionnalité, car elle encombre le code et a peu d'avantages supplémentaires. Ou, passez à un langage compilé statiquement (disons asp.net) qui va vraiment bénéficier des variables définies et du typage statique.

+4

La désactivation de E_NOTICE est généralement une mauvaise idée. – tamasd

2

S'il n'y a pas de paramètre POST du tout ou s'il n'y a aucun paramètre nommé submit vous essayez d'accéder à un index de tableau qui n'existe pas, d'où l'avertissement. Vous pouvez simplement tester s'il existe un tel index/élément dans le tableau _POST.

if(isset($_POST['submit'])) 

Il ne vérifie pas la valeur (comme vous script original, qui teste si la valeur de _POST [ « submit »] est false, voir type juggling), mais la simple existence de l'indice/élément devrait suffire dans ce cas.

voir http://docs.php.net/isset

+0

Juste pour être complet : "Il ne vérifie pas la valeur" n'est pas complètement vrai. '$ v = null; isset ($ v) '=> false, mais cela n'a pas d'importance dans ce cas, les éléments dans _POST sont des chaînes, peut-être des chaînes vides mais toujours des chaînes. – VolkerK

0

Votre $ _POST n'existe pas lorsque vous chargez votre page pour la première fois. Changez votre chèque à quelque chose comme:

if(!isset($_POST["submit"])) 

Parce que vous ne publiez pas encore rien, il n'y aura pas de clé « soumettre » dans votre tableau de $ _POST. C'est ce qui provoque l'avertissement.

0

Pour ceux qui postent, utilisez if (isset ($ _ POST ['submit'])), vous n'avez clairement pas lu son code. Il a mis est qu'il n'y a pas de soumettre écrire le formulaire HTML utilisez bien les champs (redressant en arrière pour moi!)

S'il veut garder tout comme la structure, il devrait être

if(empty($_POST['submit']))