【问题标题】: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>

&nbsp;&nbsp;Course:
<select name="course" id=b></select>

 <input type="radio" name="status" value="regular" />Regular&nbsp;&nbsp;
<input type="radio" name="status" value="irregular" />Irregular 
    <br><br>
    <hr>
    <br>
   Name:
    <input type="text" name="lname"> &nbsp;
    <input type="text" name="fname"> &nbsp;
    <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 mysql html xampp


【解决方案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 中得到了通知,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 2016-07-14
    相关资源
    最近更新 更多