在数据库上插入记录时未定义的索引
Posted
技术标签:
【中文标题】在数据库上插入记录时未定义的索引【英文标题】:Undefined index in inserting records on DB 【发布时间】:2012-02-18 14:45:01 【问题描述】:我正在开发一个系统,我想检查是否存在记录。如果存在记录,则它不会记录数据,而是返回到表单。如果数据不存在,则继续将数据记录到数据库中。
html 表单:
<form name="studentform" onSubmit="return validate_form ( );" action="queries/insert.php" method="post">
Student Number: <input type="text" name="studentnumber"/>
College:
<select name="college" id=a></select>
Course:
<select name="course" id=b></select>
<input type="radio" name="status" value="regular" />Regular
<input type="radio" name="status" value="irregular" />Irregular
<br><br>
<hr>
<br>
Name:
<input type="text" name="lname">
<input type="text" name="fname">
<input type="text" name="mname">
Address:
<input type="text" name="address" />
<br><br>
Gender:
<select name="gender">
<option value="">---</option>
<option value="Male">Male</option>
<option value="Female">Female</option>
</select>
<input type="submit" value="Submit">
</form>
PHP 形式:
$query = ("SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'");
$result=mysql_query($query);
if($result)
if(mysql_num_rows($result) >= 1)
echo "<script type='text/javascript'>alert('User already exist'); location.href = '../admin_home.php';</script>";
else
$sql="INSERT INTO students (studentnumber, college, course, status, lname, fname, mname, address, gender)
VALUES
('$_POST[studentnumber]','$_POST[college]','$_POST[course]','$_POST[status]','$_POST[lname]','$_POST[fname]','$_POST[mname]','$_POST[address]','$_POST[gender]')";
if (!mysql_query($sql,$con))
die('Error: ' . mysql_error());
echo "<script type='text/javascript'>alert('Record Successfully Added'); location.href = '../admin_home.php';</script>";
我不知道为什么,但我总是得到未定义的索引错误。也许我在某个地方做错了什么。谢谢!!
【问题讨论】:
首先 - 阅读“SQL 注入” - 你的代码不安全。 错误的行号会有所帮助 写入完整错误 注意:未定义索引:第 11 行 C:\xampp\htdocs\SIS\WEW\queries\insert.php 中的学生编号这是错误,第 11 行将是“$query = (” SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'");" PHP: "Notice: Undefined variable" and "Notice: Undefined index"的可能重复 【参考方案1】:“未定义索引”指的是您的数组(可能是 $_POST),它应该是一个通知,而不是一个错误。你能发布确切的消息吗?
同时,将第一行换成
$query = "SELECT studentnumber FROM students where studentnumber = '".mysql_real_escape_string($_POST['studentnumber'])."'";
此外,打印出查询以确保它看起来像您期望的那样有助于调试:
print $query."<br />"; // obviously
[edit]当您现在发布错误消息时,它变得更加简单 - $_POST['studentnumber'] 不存在。检查您的表格。
调试发布结果的一个好方法是使用代码
print '<pre>';
print_r($_POST);
print '</pre>';
【讨论】:
我建议使用准备好的语句。 同意。我想我只是把它放在这里作为对其他人的提醒。【参考方案2】:试试这个:
if( isset($_POST['submit']) )
$student_num = mysql_real_escape_string( $_POST['studentnumber'] );
// Set all the require form fields here with mysql_real_escape_string() fun
if( !empty($student_num) )
// Your Query Here
else
echo 'Value not Set in Student Number Field!';
编辑:首先检查isset($_POST['submit'])
之后的所有字段,以便确认所有值是否正确获取
获取所有必需的值后开始查询
【讨论】:
【参考方案3】:问题出在您的查询中:
$query = ("SELECT studentnumber FROM students where studentnumber = '$_POST[studentnumber]'");
$_POST[studentnumber]
不正确。它必须是$_POST['studentnumber']
。注意键周围的引号。
我建议这样做:
$query = sprintf("SELECT studentnumber FROM students where studentnumber = '%s'"
, mysql_real_escape_string($_POST['studentnumber']));
相应地更改所有查询。
【讨论】:
我认为这不会影响查询中的$_POST[studentnumber]
。
会的,因为$_POST
将键作为字符串。就她而言,她将键称为常量
但是没有像$_POST[studentnumber]
这样的''单引号的键也可以工作
没错,它会起作用的。但这只是因为 PHP 无法识别常量 studentnumber
,因此假定它是 'studentnumber'
。但它会抛出一个通知——其目的是通知程序员他犯的错误,以便他可以纠正它。除非是错误,否则不应使用。
嗯,现在明白了,但在 php 4.4.9 中它没有提供通知,因为我在 php 4.4.9 和 php 5.3 中运行相同,并在 php 5.3 中得到了通知,谢谢以上是关于在数据库上插入记录时未定义的索引的主要内容,如果未能解决你的问题,请参考以下文章