可能重复:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”
我正在尝试在数据库(MySQL)中注册用户的注册表单。
代码应该注册:
代码在保存到表之前,检查用户名或密码是否已经存在,如果他们这样做,则回显错误消息,如果没有,则保存到数据库。
但是,在页面加载时,我遇到了这些错误:
Notice: Undefined index: Name in C:\xampp\htdocs\Task2\registration.php on line 216
Notice: Undefined index: Surname in C:\xampp\htdocs\Task2\registration.php on line 217
Notice: Undefined index: Username in C:\xampp\htdocs\Task2\registration.php on line 219
Notice: Undefined index: Email in C:\xampp\htdocs\Task2\registration.php on line 221
Notice: Undefined index: C_Email in C:\xampp\htdocs\Task2\registration.php on line 222
Notice: Undefined index: password in C:\xampp\htdocs\Task2\registration.php on line 224
Notice: Undefined index: c_password in C:\xampp\htdocs\Task2\registration.php on line 225
Notice: Undefined index: SecQ in C:\xampp\htdocs\Task2\registration.php on line 227
Notice: Undefined index: SecA in C:\xampp\htdocs\Task2\registration.php on line 228
Notice: Undefined variable: mysql_connect in C:\xampp\htdocs\Task2\registration.php on line 231
Fatal error: Function name must be a string in C:\xampp\htdocs\Task2\registration.php on line 231
这是代码:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Registration</title>
<style type="text/css" title="Amaya theme">
body {
font-size: 12pt;
font-family: Helvetica, Arial, sans-serif;
font-weight: normal;
font-style: normal;
color: black;
background-color: white;
line-height: 1.2em;
margin-left: 4em;
margin-right: 2em;
}
/* paragraphs */
p {
padding: 0;
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
/* headings */
h1 {
font-size: 180%;
font-weight: bold;
font-style: normal;
font-variant: small-caps;
text-align: left;
padding: 0;
margin-top: 1.7em;
margin-bottom: 1.7em;
}
h2 {
font-size: 150%;
font-weight: bold;
font-style: normal;
padding: 0;
margin-top: 1.5em;
margin-bottom: 1.1em;
}
h3 {
font-size: 130%;
font-weight: bold;
font-style: normal;
padding: 0;
margin-top: 1.3em;
margin-bottom: 1.1em;
}
h4 {
font-size: 110%;
font-weight: bold;
font-style: normal;
padding: 0;
margin-top: 1.1em;
margin-bottom: 1.1em;
}
h5 {
font-size: 100%;
font-weight: bold;
font-style: italic;
padding: 0;
margin-top: 1em;
margin-bottom: 1em;
}
h6 {
font-size: 100%;
font-weight: normal;
font-style: italic;
padding: 0;
margin-top: 1em;
margin-bottom: 1em;
}
/* divisions */
div {
padding: 0;
margin-top: 0em;
margin-bottom: 0em;
}
/* lists */
ul, ol {
padding: 0 0 0 3em;
margin-top: 1em;
margin-bottom: 1em;
}
ul ul, ol ol, ul ol, ol ul {
margin-top: 1em;
margin-bottom: 1em;
}
li {
padding: 0;
margin-top: 1em;
margin-bottom: 1em;
text-align: left;
}
li p {
margin-top: 1em;
margin-bottom: 1em;
}
dl {
padding: 0;
margin-top: 1em;
margin-bottom: 1em;
margin-left: 1em;
}
dl dl {
margin-top: 0em;
margin-bottom: 0em;
}
dt {
padding: 0;
font-weight: bold;
margin-top: .3em;
margin-bottom: .3em;
}
dd {
padding: 0;
margin-top: .3em;
margin-left: 3em;
margin-bottom: .3em;
}
dl p {
margin-top: .3em;
margin-bottom: .3em;
}
/* inline */
strong {
font-weight: bold;
}
em {
font-style: italic;
}
code {
font-family: Courier New, Courier, monospace;
}
ins {
background-color: yellow;
text-decoration: underline;
}
del {
text-decoration: line-through;
}
a[href] {
color: blue;
text-decoration: underline;
}
</style>
</head>
<body>
<h4><span style="font-family: Arial,Helvetica,sans-serif">Name</span></h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Name'/></p>
<h4 style="font-family: Arial,Helvetica,sans-serif">Surname</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Surname'/></p>
<h4 style="font-family: Arial,Helvetica,sans-serif">Username</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Username' /></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />
<h4 style="font-family: Arial,Helvetica,sans-serif">Email</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Email' /></p>
<h4 style="font-family: Arial,Helvetica,sans-serif">Confirm Email</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='C_Email' /></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />
<h4 style="font-family: Arial,Helvetica,sans-serif">Password</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='password' /></p>
<h4 style="font-family: Arial,Helvetica,sans-serif">Confirm Password</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='c_password'/></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />
<h4 style="font-family: Arial,Helvetica,sans-serif">Security Question</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='SecQ' /></p>
<h4 style="font-family: Arial,Helvetica,sans-serif">Security Answer</h4>
<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='SecA'/></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />
<hr style="font-family: Arial,Helvetica,sans-serif" />
<p><span
style="font-family: Arial,Helvetica,sans-serif"><button>Submit</button></span></p>
</body>
</html>
<?php
$Name = $_POST['Name'];
$Surname = $_POST['Surname'];
$Username = $_POST['Username'];
$Email = $_POST['Email'];
$C_Email = $_POST['C_Email'];
$Password = $_POST['password'];
$C_Password = $_POST['c_password'];
$SecQ = $_POST['SecQ'];
$SecA = $_POST['SecA'];
$mysql_connect ('localhost', 'admin', 'storefile1234');
mysql_select_db ("storefile");
$check_username = mysql_query("SELECT FROM users WHERE username = '$Username'");
$check_email = mysql_query("SELECT FROM users WHERE email = '$Email'");
if ($Name == null || $Surname== null || $Username == null || $Password == null || $C_Password == null || $Email == null || $C_Email == null || $SecQ == null || $SecA == null ) {
echo "Missing details. Please enter all fields.";
} else {
if(mysql_num_rows($check_username) != 0 && mysql_num_rows($check_email) != 0)
{
echo "Username/Email already exists";
}
if ($Email == $C_Email && $Password == $C_Password) {
$query = "INSERT INTO users (Username, Name,Surname, Password, Email, SecQ, SecA) VALUES ('NULL', ".$Username."', ".$Name."', ".$Surname."', ".$Password."', ".$SecQ."', ".$SecA."', ".$Email.')"';
mysql_query($query) or die ('Error registering.');
echo "Greetings, ".$Name.", you have been registered. ";
} else {
echo "Error registering your account. Please try again.";
}
}
?>
任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:4)
在从$_POST
中提取值之前,您应该检查它们是否存在。您可以使用isset
函数(http://php.net/manual/en/function.isset.php)
答案 1 :(得分:1)
您收到错误是因为您尝试阅读尚未设置的帖子变量,只会在表单提交时设置。将您的PHP代码包装在
的底部 if ($_SERVER['REQUEST_METHOD'] === 'POST') { ... }
此外,您的代码适合SQL注入。至少在post vars上使用mysql_real_escape_string
,然后在SQL查询中使用它们。 mysql_real_escape_string
对于制作网站来说不够好,但是应该在课堂上给你加分。
答案 2 :(得分:0)
您是如何加载此页面的?是否在POST上加载任何内容?如果不是,那么$ name = $ _POST ['Name'];分配在POST上没有任何“名称”。
答案 3 :(得分:0)
首先,
mysql_connect()不应该附带$;它不是变量,而是预定义的函数。删除$以正确连接到数据库。
为什么在本文档的顶部有XML标记?这是HTML / PHP - HTML文档类型就足够了。
从第215行开始,更新:
if (isset($_POST)) {
$Name = $_POST['Name'];
$Surname = $_POST['Surname'];
$Username = $_POST['Username'];
$Email = $_POST['Email'];
$C_Email = $_POST['C_Email'];
$Password = $_POST['password'];
$C_Password = $_POST['c_password'];
$SecQ = $_POST['SecQ'];
$SecA = $_POST['SecA'];
}
POST变量来自您的表单,您必须检查它们是否存在,否则PHP会给您一个NOTICE错误。您可以通过放置error_reporting(0)来禁用这些通知;位于文档顶部。为了开发目的,最好将它们保持可见。
您应该只在提交表单的条件下与数据库交互(插入,检查)。如果不这样做,PHP将在没有用户输入的情况下运行所有这些操作。最好使用IF语句,如下所示:
if (isset($_POST['submit']) {
// blah blah
// check if user exists, check if fields are blank
// insert the user if all of this stuff checks out..
} else {
// just display the form
}