2011-10-05 43 views
0

我是PHP新手,所以不知道這將如何結果。可以說我有一個添加好友頁面。並在數據庫中讓我們說我有一個名爲「朋友」和下列行表:my_id和friend_id和id_request。如何防止用戶生成的錯誤?

,現在我有一個PHP頁面,看起來像:addfriend.php ID = friendid

然後我用id從該鏈接中插入到數據庫我的ID和friendid。

問題是如果有人在地址欄中的鏈接中輸入「kdjfkldjlfk」會發生什麼?

回答

1

需要阻止這些情況並驗證

例如:

測試的$ _GET [「身份證」] isset並且friendid是真實的,你可以查詢數據庫,看到ID存在...

+0

其實我現在拉的是$ ID,並再次使用它來看看以下的用戶存在的ID。如果不是,那麼它會將頁面重新路由到404 .. – AAA

1

如果您的意思是「如果某人訪問URI不存在的ID會發生什麼?」,那麼這取決於您的PHP所發生的事情。

如果你的PHP沒有檢查它的SQL查詢得到了多少結果,那麼這個頁面很可能會吐出一個500內部服務器錯誤

如果您設計得當,它會返回一個文檔,說明您不能添加不存在的用戶作爲朋友。

實際上,如果你設計得很好,那麼數據應該通過POST發送而不是GET,因爲添加朋友不是冪等事件。 (請參閱HTTP specification - GET應無副作用)

+0

我實際上現在拉取$ id並再次使用它來查看該用戶是否存在該id。如果不是,那麼它會將頁面重新路由到404 .. – AAA

1

您需要驗證用戶輸入。首先,將$_GET值轉換爲int類型,如果它等於0,則告訴他們錯誤輸入了它。

$var = (int)$_GET['id']; 

if($var == 0) 
{ 
    // Error 
} 
else 
{ 
    // The rest of your code 
} 
+0

我實際上現在拉取$ id並再次使用它來查看該用戶是否存在該id。如果不是,那麼它會將頁面重新路由到404 .. – AAA

+0

謝謝你精心編寫,深思熟慮的複製和粘貼評論。現在,這是什麼意思? – Bojangles

1

事實證明,PHP有一些非常酷的內置過濾器功能。你應該學習和使用它們:

if (filter_var($_GET['id'], FILTER_VALIDATE_INT) === false) { 
    // error 
} 

if (filter_var($_GET['email'], FILTER_VALIDATE_EMAIL) === false) { 
    // error 
} 

if (filter_var($_GET['ip_address'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) === false) { 
    // error 
} 

http://us.php.net/manual/en/function.filter-var.php