离。
$fn = htmlentities(mysqli_real_escape_string($connection, @$_POST['fname']));
$ln = htmlentities(mysqli_real_escape_string($connection, @$_POST['lname']));
$em = htmlentities(mysqli_real_escape_string($connection, @$_POST['email']));
$em2 = htmlentities(mysqli_real_escape_string($connection, @$_POST['email2']));
$pd = htmlentities(mysqli_real_escape_string($connection, @$_POST['password']));
$pd2 = htmlentities(mysqli_real_escape_string($connection, @$_POST['password2']));
与$ _SESSION
相同如果我取消“@”,我会得到一个未定义的索引错误...
知道为什么吗?我没有...如果我保持它们,所有代码都可以工作。
答案 0 :(得分:1)
这可能意味着您正在访问数组的值而不检查它们是否已被检查...
使用isset
或if ($_POST['fname'])
。
无论您做什么,都不要降低错误报告模式(您可能在E_STRICT | E_ALL
)。在我的书中,使用@
来解决错误是不好的做法,BTW。通知是在内部引发的,因此您的代码速度变慢,然后看起来很混乱。你养成了坏习惯(转向邪恶的@
标志,而不是解决问题)......
答案 1 :(得分:0)
确保在尝试访问数组元素之前使用isset()
检查数组元素中是否存在值。您获得未定义索引的原因是因为POST数据中的其中一个值不存在。
if (isset($_POST['fname']))
{
$fn = htmlentities(mysqli_real_escape_string($connection, $_POST['fname']));
}
else
{
$fn = '';
}
我假设你知道@是。如果不是,则为其错误抑制运算符。这会关闭其使用的每个实例的错误报告,然后重新启用错误报告。你只需要在必要时使用它,因为它会阻止你看到你可能想要看到的东西。
答案 2 :(得分:0)
你可以使用这样的东西
foreach (array('fname', 'lname', 'email') as $key) {
$$key = isset($_POST[$key]) && is_string($_POST[$key]) ? htmlentities(mysqli_real_escape_string($_POST[$key])) : '';
}
有变量$ fname,$ lname,$ email等。不要只是复制和粘贴。