簡體   English   中英

每當我使用$ _時,我都必須使用@

[英]Everytime I use a $_ I have to use an @

例如

$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也是如此

如果我取消“ @”,則會收到未定義的索引錯誤。
知道為什么嗎? 我不...如果我繼續使用,所有代碼都可以工作。

這可能意味着您在訪問數組的值時沒有檢查是否選中了它們。
使用issetif ($_POST['fname'])

無論您做什么,都不要降低錯誤報告模式(您可能位於E_STRICT | E_ALL )。 在我的書中,使用@壓制錯誤是BTW的錯誤做法。 該通知是在內部提出的,因此您在減慢代碼的速度,然后看起來很混亂。 您正在養成不良習慣(轉向邪惡的@符號,而不是解決問題)...

確保在嘗試訪問數組元素之前使用isset()檢查該值是否存在。 您獲得未定義索引的原因是因為POST數據中的那些值之一不存在。

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

我假設您知道@是。 如果不是,則為錯誤抑制運算符。 這將關閉其使用的每個實例的錯誤報告,然后關閉,然后重新打開錯誤報告。 您僅在絕對需要時才使用此功能,因為它使您無法看到自己想看到的東西。

你可以用這樣的東西

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等。 不要只是復制和粘貼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM