未定义的索引通知

时间:2012-03-28 23:49:19

标签: php

我花了好几天试图弄明白这一点无济于事。我已经检查了PHP文档以及关于“未定义索引”通知的多个其他表单问题以及通常的解决方案“isset()”函数。

但我无法解决我的问题。

以下是代码:

<form action="" method="post">
<!-- Here are all the form fields -->
<input type="submit" name="send" value="send"/>
</form>

<?php

            $con = mysql_connect("#","#","#");
            if (!$con)
            {
                die('Could not connect: ' . mysql_error());
            }

            mysql_select_db("#", $con);

            $sql="
            INSERT INTO events (e_date, e_time, e_type, e_name)
            VALUES ('$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]')";

            if (!mysql_query($sql,$con))
            {
                die('Error: ' . mysql_error());
            }
            echo "1 record added";

            mysql_close($con)

        ?>

4个通知出现在$ sql变量的行上,从“VALUES”开始,并引用form_e_date等。

我为提出一个我意识到的问题而道歉,但是我尝试了其他人的解决方案,这些解决方案要么对我不起作用,要么我没有正确实现它们。

请帮忙,请随时留下关于我的代码的任何其他建设性反馈,因为我是新手。

谢谢!

1 个答案:

答案 0 :(得分:4)

而不是

'$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]'

你不应该使用

'$_POST["form_e_date"]','$_POST["form_e_time"]','$_POST["form_e_type"]','$_POST["form_e_name"]'

因为SQL注入攻击的危险。

您应该使用mysql_real_escape_string来保护自己免受此攻击。

这会更安全:

if (array_key_exists("form_e_date", $_POST))
  $form_e_date = mysql_real_escape_string($_POST["form_e_date"]);
else
  $form_e_date = null;

if (array_key_exists("form_e_time", $_POST))
  $form_e_time = mysql_real_escape_string($_POST["form_e_time"]);
else
  $form_e_time = null;

if (array_key_exists("form_e_type", $_POST))
  $form_e_type = mysql_real_escape_string($_POST["form_e_type"]);
else
  $form_e_type = null;

if (array_key_exists("form_e_name", $_POST))
  $form_e_name = mysql_real_escape_string($_POST["form_e_name"]);
else
  $form_e_name = null;
.
.
.
$sql = "INSERT INTO events (e_date, e_time, e_type, e_name) " . 
  "VALUES ('{$form_e_date}','{$form_e_time}','{$form_e_type}','{$form_e_name}')";