0

前任。

$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 也会发生同样的事情

如果我关闭“@”,我会得到一个未定义的索引错误......
知道为什么吗?我不......如果我继续使用它们,所有代码都可以工作。

4

3 回答 3

1

这可能意味着您正在访问数组的值而不检查它们是否被检查...
使用issetor if ($_POST['fname'])

无论你做什么,都不要降低你的错误报告模式(你可能在E_STRICT | E_ALL)。@顺便说一句,在我的书中,使用 the 来抑制错误是不好的做法。该通知是在内部提出的,因此您正在减慢您的代码,这看起来很混乱。你正在养成坏习惯(转向邪恶的@星座,而不是解决问题)......

于 2013-07-01T18:03:47.100 回答
0

确保isset()在尝试访问之前检查数组元素中是否存在值。您获得未定义索引的原因是因为您的 POST 数据中的这些值之一不存在。

if (isset($_POST['fname']))
{
    $fn = htmlentities(mysqli_real_escape_string($connection, $_POST['fname']));
}
else
{
    $fn = '';
}

我假设你知道 @ 是。如果不是,则为错误抑制运算符。这会关闭其使用的每个实例的错误报告,然后,它会重新打开错误报告。你只会在绝对必要时才想使用它,因为它会阻止你看到你可能想看到的东西。

于 2013-07-01T18:03:30.397 回答
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 等等。不要只是复制和粘贴。

于 2013-07-01T18:05:18.587 回答