3 回答
您不能从没有它们的数组中引用键,这就是您试图从$_POST
数组中执行的操作,因为请求没有发布这些值。
要摆脱通知,请更改您$_POST
直接从中提取值的所有声明:
$Surname = $_POST['surname'];
到:
$Surname = isset( $_POST['surname']) ? $_POST['surname'] : ""; // Some default value
此外,在您的代码中,您插入了两次相同的查询。而且,VDP 提出了一个很好的观点,你不想插入空行,所以要解决这个问题,你可以用 if 语句包装整个插入逻辑,检查是否$_POST
为空,或者检查每个变量是否都有插入前的有效值。
编辑:好的,更彻底的解释。
当您尝试从数组中访问该数组没有的键时,您会收到此通知。因此,您的$_POST
数组可能是空的,因为当您访问该页面时,您没有向它提交 POST 请求,或者如果您提交了,您也没有发送它所期望的变量。
所以$_POST
看起来像:
$_POST = array( );
你正在尝试做:
$Surname = $_POST['surname']; // DOESN'T EXIST!
显然,你不能那样做。因此,不是直接从 中获取东西$_POST
,而是检查该键是否确实存在于$_POST
数组中:
$Surname = isset( $_POST['surname']) ? $_POST['surname'] : "";
但是,这只是以下的简写:
if( isset( $_POST['surname'])) {
$Surname = $_POST['surname'];
} else {
$Surname = "";
}
它被称为三元运算符,您可以在 PHP 文档中查看它以了解更多信息。
代替
$姓氏 = $_POST['姓氏'];
做
if(isset($_POST['surname']))
{
$Surname = $_POST['surname'];
}
或者
$Surname = (isset($_POST['surname'])) ? $_POST['surname'] : $some_string; /* or something */
您也可以只使用 extract() 来本地化所有这些后变量。
如果您完全确定这些通知不会搞砸您的应用程序并希望快速修复使用
error_reporting(0);
或使用@$variable;
我再说一遍,这不是一个真正的解决方案,而是一个临时的快速解决方案。
为了真正修复它,您应该始终检查变量是否存在。
echo $myvariable; // will output notice
$myvariable = null;
echo $myvariable; // will output nothing but nor the notice
一个好方法是使用:
if(isset($_POST['myvariable'])){
$myvariable = $_POST['myvariable'];
} else {
$myvariable = null;
}