2013-10-14 65 views
0

我在此代碼中出現錯誤,因此它不會在我的PC上運行。當我把它放到代碼檢查器中時,我被告知有一個錯誤是一個意外的T字符串。不過,我試圖尋找解決方法,包括在引號中圍繞代碼的不同部分,但這沒有什麼區別。意外的T字符串

尤其是電子郵件地址字段的「If」語句爲空。一個代碼檢查器甚至告訴我,'Enter'這個詞是意想不到的。

<?php 

function load($page = 'login.php') 

{ 

$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . 
       dirname($_SERVER[ 'PHP_SELF' ]) ; 

$url = rtrim($url , '^\') ; 

$url .= '/' . $page ; 

header("Location: $url") ; 
exit() ; 


function validate($dbc , $email = " , $pwd = ") 

{ 

$errors = array() ; 

if (empty($email)) 
{ $errors[] = 'Enter your email address.' ; } 
else { $e = mysqli_real_escape_string($dbc, trim($email)) ; } 

if (empty($pwd)) 
{ $errors[] = 'Enter your password.' ; } 
else { $p = mysqli_real_escape_string($dbc, trim($pwd)) ; } 

if (empty($errors)) 
{ 
$q = "SELECT user_id, first_name, last_name, 
    FROM users 
    WHERE email = '$e' 
    AND pass = SHA1('$p') " ; 

$r = mysqli_query ($dbc , $q) ; 

if (mysqli_num_rows($r) == 1) 
{ 
$row = mysqli_fetch_array ($r , MYSQLI_ASSOC) ; 
return array(true , $row) ; 
} 
else 

{ $errors[] = 'Email address and password not found.' ; } 

} 

return array(false , $errors) ; } 



} 


?>  
+0

去看看'PHP'和'escaping'。然後解決該問題。 –

回答

2

在下面的代碼行:

$url = rtrim($url , '^\') ; 

您實際上已經通過把一個\在它的前面逃跑的收盤'。這導致你的代碼的其餘部分被假定爲你試圖定義的字符串的延續。

你應該用雙\\實際上轉義第一個反斜槓,從而定義字符串作爲你的意思更換:

$url = rtrim($url , '^\\') ; 
+0

也@alfasin指出,還有更多的錯誤(缺少括號),你需要看看。 – Fluffeh

0
  1. 負載功能缺少一個右括號:}
  2. function validate($dbc , $email = " , $pwd = ") - 您可能要寫的是:function validate($dbc , $email = "" , $pwd = "")或者:
    function validate($dbc , $email = '' , $pwd = '') - 您發佈代碼的方式無法運行!
  3. 調用header("Location...後不要exit() ; - 使用return
  4. 如果電子郵件/密碼是空的您正在檢查並保存錯誤,但你不改變程序的流程:你不應該叫DB在所有在這種情況下 - 而是立即顯示錯誤!
  5. 一個更好的做法將是使用bind_param而不是字符串連接的查詢中 - mysqli_real_escape_stringis NOT bullet proof against sql-injection
  6. 而這一個是個人的「口味」:當你上張貼問題,以便儘量IDENT代碼,並使其可讀,進一步,在同一行中執行諸如else {blablabla..... ;}之類的操作 - 不遵循任何代碼約定,嘗試擁抱一個代碼約定並堅持下去!
+0

感謝所有你們的幫助和做出詳細回覆的努力。我不確定我是否因爲PHP而被刪除,但是一些錯誤顯然是我正在使用的書的結果,而這些書目前尚不清楚。感謝上帝,我幾乎完成了這本書。 –