我花了几天时间试图弄清楚这一点,但都无济于事。我已经检查了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个通知出现在以"VALUES"开头的$sql变量的行上,并引用form_e_date等。
我很抱歉问了一个我意识到有点频繁的问题,但我尝试过别人的解决方案,要么对我无效,要么我没有正确执行。
请提供帮助,并请随时留下任何其他关于我的代码的建设性反馈,因为我是一个新手。
谢谢!
而不是
'$_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}')";