2013-07-01 70 views
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

發生,如果我走了 「@」 關我得到一個未定義的索引錯誤...
任何想法,爲什麼?我不......所有的代碼工作,如果我繼續他們。

+2

實際設置的值是?如果不是簡單地在嘗試使用這些值之前添加'isset()'測試。 – Pitchinnate

+1

是的。不要使用錯誤抑制,修復實際的錯誤。在這種情況下,您顯然在嘗試使用它之前沒有檢查該值是否已設置。 –

回答

0

請務必檢查在嘗試訪問它之前使用isset()數組元素的值的存在。你得到一個未定義索引的原因是因爲你的POST數據中的其中一個值不存在。

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

我假設你知道@是。否則,它是錯誤抑制運算符。這將關閉每個使用過的實例的錯誤報告,然後再打開錯誤報告。當你絕對必須時,你只會想要使用它,因爲它阻止你看到你可能想看到的東西。

1

這可能意味着您正在訪問陣列的值而沒有檢查它們是否被檢查過...
可以使用issetif ($_POST['fname'])

不管你做什麼,不要降低自己的錯誤報告模式(你E_STRICT | E_ALL可能是)。在我的書中,使用@來抑制錯誤是錯誤的做法,順便說一下。該通知在內部引發,因此您正在放慢代碼,然後看起來很亂。你養殖的壞習慣(轉向邪惡@標誌,而不是解決問題)......

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 $,$電子郵件等。不要複製和粘貼。

相關問題