每次我用$ _我必须使用@
问题描述:
前。
$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
发生,如果我走了 “@” 关我得到一个未定义的索引错误...
任何想法,为什么?我不......所有的代码工作,如果我继续他们。
答
请务必检查在尝试访问它之前使用isset()
数组元素的值的存在。你得到一个未定义索引的原因是因为你的POST数据中的其中一个值不存在。
if (isset($_POST['fname']))
{
$fn = htmlentities(mysqli_real_escape_string($connection, $_POST['fname']));
}
else
{
$fn = '';
}
我假设你知道@是。否则,它是错误抑制运算符。这将关闭每个使用过的实例的错误报告,然后再打开错误报告。当你绝对必须时,你只会想要使用它,因为它阻止你看到你可能想看到的东西。
答
这可能意味着您正在访问阵列的值而没有检查它们是否被检查过...
可以使用isset
或if ($_POST['fname'])
。
不管你做什么,不要降低自己的错误报告模式(你E_STRICT | E_ALL
可能是)。在我的书中,使用@
来抑制错误是错误的做法,顺便说一下。该通知在内部引发,因此您正在放慢代码,然后看起来很乱。你养殖的坏习惯(转向邪恶@
标志,而不是解决问题)......
答
您可以使用类似这样
foreach (array('fname', 'lname', 'email') as $key) {
$$key = isset($_POST[$key]) && is_string($_POST[$key]) ? htmlentities(mysqli_real_escape_string($_POST[$key])) : '';
}
有变量$ FNAME,LNAME $,$电子邮件等。不要复制和粘贴。
实际设置的值是?如果不是简单地在尝试使用这些值之前添加'isset()'测试。 – Pitchinnate
是的。不要使用错误抑制,修复实际的错误。在这种情况下,您显然在尝试使用它之前没有检查该值是否已设置。 –