2011-08-19 4 views
1

Можно создать дубликат:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”Примечание: Неопределенный индекс: ZZZZZZWTF?

Внезапно код мой PHP придумал:

Notice: Undefined индекс: отправить в C: \ XAMPP \ HTDOCS \ globalautoparts \ register.php в строке 36

Примечание: неопределенный индекс: полное имя в C: \ xampp \ htdocs \ globalautoparts \ register.php в строке 40

Примечание: Undefined индекс: имя пользователя в C: \ XAMPP \ HTDOCS \ globalautoparts \ register.php на линии 41

Примечание: Undefined индекс: пароль в C: \ XAMPP \ HTDOCS \ globalautoparts \ register.php на линия 42

Примечание: Undefined индекс: repeatpassword в C: \ XAMPP \ HTDOCS \ globalautoparts \ register.php на линии 43

Примечание: Undefined индекс: электронная почта в C: \ XAMPP \ HTDOCS \ globalautoparts \ зарегистрироваться. php on line 45

о регистрации ионная страница.

Как это исправить?

Это мой код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <meta name="author" content="Luka Cvrk (solucija.com)" /> 
    <meta name="keywords" content="conceptnova, concept, framework, web, content, corporate, business" /> 
    <meta name="description" content="Conceptnova" /> 
    <link rel="stylesheet" href="css/main.css" type="text/css" media="screen, projection" /> 
    <title>Global Autoparts | Home</title> 
</head> 
<body> 
    <div id="wrap"> 
     <div id="header_top"> 
     <h1 id="logo"><a href="#" title="Conceptnova"><img src="images/logo.gif" align="left" /></a></h1> 
     <h1 id="logo"></h1> 
     <ul> 
       <li><a href="index.php">home</a></li> 
       <li><a href="aboutus.php">about us</a></li> 
       <li><a href="services.php">services</a></li> 
       <li><a href="portfolio.php">portfolio</a></li> 
       <li><a href="contact.php">contact</a></li> 
      </ul> 
      <div id="slogan"> 
       <p></p> 
      </div> 
     </div> 
     <div id="header_bottom"> 
      <h2>Think outside of the box!</h2> 
      <p>Registering with Global Auto Parts means you have access to super-fast online orders and total user customization, so you wont have to wait in a line again!</p> 
     </div> 
     <div id="maincontent"> 
      <div id="left"> 
       <h2><a href="#">Register to become apart of the global community!</a></h2> 
       <p><?php 
echo "<h1>Registration Page.</h1>"; 
$submit = $_POST['submit']; 


//form data 
$fullname = strip_tags($_POST['fullname']); 
$username = strtolower(strip_tags($_POST['username'])); 
$password = strip_tags($_POST['password']); 
$repeatpassword = strip_tags($_POST['repeatpassword']); 
$date = date("Y-m-d"); 
$email = $_POST['email']; 

if ($submit) 
{ 

    //open database 
    $connect = mysql_connect("localhost","root",""); 
       mysql_select_db("phplogin"); //select database 

    $namecheck = mysql_query("SELECT username FROM users WHERE username='$username'"); 
    $count = mysql_num_rows($namecheck); 

    if ($count!=0) 

    { 
     die("Username already taken! Go <a href='register.php'>back</a> to try again?"); 

    } 

    // check for existence 
    if($fullname&&$username&&$password&&$repeatpassword) 
    { 


     if ($password==$repeatpassword) 
     { 

       //check char length of username and fullname 
       if (strlen($username)>25||strlen($fullname)>25) 
       { 
       echo "Length of username or fullname is too long!"; 


       } 

       else{ 
       //check password length 
       if (strlen($password)>25||strlen($password)<6) 
       { 
       echo "Password must be between 6 and 25 characters"; 
       } 
       else{ 
       //register the user! 

       // encrypt password 
     $password = md5($password); 
     $repeatpassword = md5($repeatpassword); 


        //generate random number for activation process 
        $random = rand(23456789,98765432); 
       $queryreg = mysql_query(" 

       INSERT INTO users VALUES ('','$fullname','$username','$password','$email','$date','$random','0') 

       "); 

       $lastid = mysql_insert_id(); 


       //send activation email 
       ini_set("SMTP",$server); 
       $to = $email; 
       $subject = "Activate your account!"; 
       $headers = "From: Global Auto Parts"; 
       $server = "localhost"; 





       $body = " 

       Hello $fullname,\n\n 

       You need to activate your account with the link below: 

       http://localhost/globalautoparts/activate.php?=$lastid&code=$random \n\n 


       Thanks. 

       "; 

       //function to send mail 
       mail($to, $subject, $body, $headers); 

       die("You have been registered! Check your email to activate your account!"); 
       } 


       } 
     } 
     else 
     echo "Your passwords do not match!"; 

    } 
    else 
     echo "Please fill in <b>all</a> fields!"; 




} 

?> 

<html> 
<p> 
<form action='register.php' method='POST'> 
     <table> 
      <tr> 
       <td> 
       Your full name: 
       </td> 
       <td> 
       <input type='text' name='fullname' value='<?php echo $fullname; ?>'> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       Choose a username: 
       </td> 
       <td> 
       <input type='text' name='username' value='<?php echo $username; ?>'> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       Choose a password: 
       </td> 
       <td> 
       <input type='password' name='password'> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       Repeat your password: 
       </td> 
       <td> 
       <input type='password' name='repeatpassword'> 
       </td> 
      </tr> 
      <tr> 
       <td> 
       Email: 
       </td> 
       <td> 
       <input type='text' name='email'> 
       </td> 
      </tr> 
     </table> 
     <br /> 
     <p> 
     <input type='submit' name='submit' value='Register'> 
</form> 
</p> 
      </div> 
      <div id="right"> 
       <div id="searchform"> 
        <form method="post" action="#"> 
         <p><input type="text" name="search" class="search" value="Search Keywords" /><input type="submit" value="GO" class="submit" /></p> 
        </form> 
       </div> 
       <p> 

       <html> 

<form action='login.php' method='POST'> 

    Username: <input type='text' name='username'><br /><br /> 
    Password: &nbsp;<input type='password' name='password'><br /><br /> 
    Click <a href='register.php'>here</a> to register. <input type='Submit' value='Login' id="login"> 

</form> <p> 




















       </p> 
       <br /> 

      </div> 
     </div> 
     <div id="footer"> 
      <p>&copy; Copyright 2011 <a href="#">Global Autoparts</a>&nbsp;&nbsp;Design: Victor Gatto </p> 
     </div> 
    </div> 
</body> 

</html> 
<!--REGBOX--> 
+0

Добавьте '@()' и что более важно читать на 'mysql_real_escape_string()', как 'strip_tags' не вполне достаточно здесь. – mario

ответ

7

Как предложил другие ребята, вы могли бы

Изменение уровня отчетов об ошибках

Запустив этот код в верхней части вашего скрипта: error_reporting(E_ALL^E_NOTICE)

Или, может быть, лучше всего проверить, действительно ли эти переменные были опубликованы до их использования.

Быстрый и грязный исправить это, чтобы сделать это:

@$_POST['submit'] 

Знак @ подавляет любые ошибки и вернуть ложь вместо строки. Теперь эта практика, как правило, неодобрительно.

Если вы хотите более чистый метод, я хотел бы сделать это:

<?php 
$post = array('fullname'=>'','username'=>'','password'=>'','repeatpassword'=>''); 

if($_POST) $post = array_merge($post, $_POST); 

$fullname = strip_tags($post['fullname']); 
$username = strtolower(strip_tags($post['username'])); 
$password = strip_tags($post['password']); 
$repeatpassword = strip_tags($post['repeatpassword']); 

Тогда вы никогда не будете иметь ошибку об отсутствующих индексах, и вы можете установить значения по умолчанию, что вы любите.

Успехов

+1

Очень хороший ответ, изменение error_reporting является уродливым, медленным и в основном опасным; В двух словах - ошибки есть по какой-то причине :) –

+0

спасибо большое, ты помог :) –

+0

victor - без проблем, счастливая кодировка. Русь - спасибо, согласился – Jason

5

Кто-то поднял отчетов об ошибках на вашем сервере/приложения включают E_NOTICE ошибки.

Вы можете отключить эту функцию с помощью

error_reporting(E_ALL^E_NOTICE); 

или улучшить приложение путем проверки индексов массива перед использованием их

$submit = isset($_POST['submit']) ? $_POST['submit'] : null; 
+0

спасибо кучи ваш лучший :) –

1

Ну, те, наверное, всегда были сформированы, но ваши настройки отчетов об ошибках возможно, получили изменения, включив в них уведомления в последнее время. PHP просто уведомляет вас о том, что вы устанавливаете переменную равной другой переменной, которая не определена. Когда $_POST['submit'] еще не заполнено, вы получите сообщение об ошибке от PHP при попытке использовать его. Вы можете проверить, если эти переменные установлены, прежде чем использовать их или просто сказать PHP не показывать Вы заметили ошибки:

ini_set('error_reporting', E_ALL^E_NOTICE); 
+0

'ini_set()', а не "init" – Phil

+0

@Phil: Спасибо, не заметил этого. – animuson

+1

Это хорошая работа; но серьезно, пожалуйста, «НИКОГДА НИКОГДА НИКОГДА» не делайте этого на живом сервере. Эти сообщения предназначены для того, чтобы быть информативными, чтобы ваш живой сайт не складывался; что они говорят/подсказывают вам, что исправить. Если вы всегда получаете сообщение об ошибке, не устанавливайте отображение ошибок; исправить ошибку! –

0

вы должны сделать значение по умолчанию для данных формы вне если ($ представить) блок и получить данные формы внутри блока if, чтобы избежать ошибки/уведомления о строгой политике php.

// default form data 
$fullname = ''; 
$username = ''; 
$password = ''; 
$repeatpassword = ''; 
$email = ''; 
$date = date("Y-m-d"); 

if ($submit) 
{ 
    //form data 
    $fullname = strip_tags($_POST['fullname']); 
    $username = strtolower(strip_tags($_POST['username'])); 
    $password = strip_tags($_POST['password']); 
    $repeatpassword = strip_tags($_POST['repeatpassword']); 
    $email = $_POST['email']; 

    // your code ... 
} 

+0

'$ submit' также выдаст неопределенную ошибку ..' isset ($ submit) 'должен использоваться –

Смежные вопросы