2010-08-23 3 views
0

У меня есть следующее сообщение об ошибке:Undefined индекс PHP issue.Please помощь

Примечание: Undefined индекс: отправить в C: \ WAMP \ WWW \ регистрация \ register.php на линии 6

Может не кажется разобраться, что случилось ??? Вот код ::

<?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"; 
    } 
    } 

?> 

ответ

1

Чтобы избавиться от этой ошибки, он должен быть:

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

Однако ваш код уже в порядке.

То, что вы получаете, не является ошибкой, это предупреждение, вызванное наличием строгих предупреждений. PHP - это динамический язык, который обычно не требует определения переменных и ключей массива, и большинство документов и кода пропустят эту часть. Поэтому вам следует рассмотреть возможность отключения этой функции, поскольку она загромождает код и имеет несколько дополнительных преимуществ. Или переключитесь на статически скомпилированный язык (скажем, asp.net), который действительно выиграет от определенных переменных и статической типизации.

+4

Отключение E_NOTICE - это, как правило, плохая идея. – tamasd

2

Если нет параметра POST вообще, или если нет параметра имени submit то вы пытаетесь получить доступ к индексу массива, которая не существует, следовательно, предупреждение. Вы можете просто проверить, есть ли такой индекс/элемент в массиве _POST.

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

Он не проверяет значение (например, вас оригинальный сценарий, который проверяет, если значение _POST [ «Submit»] равно ложь, см type juggling), но само существование индекса/элемента должно хватить в этом случае.

см http://docs.php.net/isset

+0

Просто для полноты : «Не проверяет значение» не совсем верно. '$ V = NULL; isset ($ v) '=> false, но в этом случае это не имеет значения, элементами в _POST являются строки, возможно, пустые строки, но все еще строки. – VolkerK

0

Ваш $ _POST не существует при первой загрузке страницы. Измените свой чек на что-то вроде:

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

Потому что ты ничего не публикуйте пока, не будет никакого ключа «представить» в массиве $ _POST. Вот что вызывает предупреждение.

0

Для этих сообщений используйте if (isset ($ _ POST ['submit'])), вы явно не читали его код. Он поставил там не представить писать HTML форму еще использовать поле (назад восстанавливающий мне!)

Если он хочет, чтобы сохранить структуру как есть, она должна быть

if(empty($_POST['submit'])) 
Смежные вопросы