【问题标题】:Notice: Undefined index: ZZZZZZWTF? [duplicate]注意:未定义索引:ZZZZZZWTF? [复制]
【发布时间】:2011-10-30 06:14:13
【问题描述】:

可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”

突然间我的 php 代码出现了:

注意:未定义索引:在第 36 行的 C:\xampp\htdocs\globalautoparts\register.php 中提交

注意:未定义索引:第 40 行 C:\xampp\htdocs\globalautoparts\register.php 中的全名

注意:未定义索引:第 41 行 C:\xampp\htdocs\globalautoparts\register.php 中的用户名

注意:未定义索引:第 42 行 C:\xampp\htdocs\globalautoparts\register.php 中的密码

注意:未定义索引:第 43 行 C:\xampp\htdocs\globalautoparts\register.php 中的重复密码

注意:未定义索引:第 45 行 C:\xampp\htdocs\globalautoparts\register.php 中的电子邮件

在注册页面上。

如何解决?

这是我的代码:

<!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-->

【问题讨论】:

  • 添加一些@(),更重要的是阅读mysql_real_escape_string(),因为strip_tags在这里还不够。

标签: php


【解决方案1】:

按照其他人的建议,你可以

更改错误报告级别

通过在脚本顶部运行此代码:error_reporting(E_ALL ^ E_NOTICE)

或者,在使用这些变量之前实际检查这些变量是否已发布可能是一个更好的主意。

快速而肮脏的解决方法是这样做:

@$_POST['submit']

@ 符号将抑制任何错误并返回 false 代替字符串。现在这种做法普遍受到反对。

如果您想要更简洁的方法,我会这样做:

<?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']);

那么您将永远不会遇到缺少索引的错误,并且您可以将默认值设置为您喜欢的任何值。

祝你好运

【讨论】:

  • 很好的答案,改变error_reporting是丑陋的,缓慢的,基本上是危险的;简而言之 - 错误是有原因的:)
  • 非常感谢,您的帮助:)
  • victor - 没问题,编码愉快。 Russ - 谢谢,同意
【解决方案2】:

有人升级了您的服务器/应用程序的错误报告,以包含E_NOTICE 错误。

您可以使用禁用此功能

error_reporting(E_ALL ^ E_NOTICE);

或通过在使用数组索引之前检查它们来改进您的应用程序

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

【讨论】:

  • 谢谢你最好的:)
【解决方案3】:

嗯,这些可能一直都在生成,但您的错误报告设置最近可能已更改为包含通知。 PHP 只是通知您正在设置的变量等于另一个未定义的变量。当$_POST['submit']还没有被填写时,当你尝试使用它时,你会收到一个来自PHP的通知错误。您可以在尝试使用它们之前检查这些变量是否已设置,或者只是告诉 PHP 不要向您显示注意错误:

ini_set('error_reporting', E_ALL ^ E_NOTICE);

【讨论】:

  • @Phil:谢谢,没注意到。
  • 这是一个很好的解决方法;但请认真“永远不要”在实时服务器上执行此操作。这些消息旨在提供信息,因此您的实时站点不会折叠;他们告诉/提示您要解决的问题。如果您总是从这里收到错误,请不要修复错误显示;修复错误!!
【解决方案4】:

您应该为 if ($submit) 块之外的表单数据设置默认值 并在 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 ...
}

【讨论】:

  • $submit 也会抛出未定义的错误。应该使用isset($submit)
猜你喜欢
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 2016-04-28
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多