每次我使用$ _我都要使用@

时间:2013-07-01 18:00:53

标签: php session post

离。

$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

相同

如果我取消“@”,我会得到一个未定义的索引错误...
知道为什么吗?我没有...如果我保持它们,所有代码都可以工作。

3 个答案:

答案 0 :(得分:1)

这可能意味着您正在访问数组的值而不检查它们是否已被检查...
使用issetif ($_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等。不要只是复制和粘贴。