2012-01-15 46 views
1

首先,我沒有任何代碼......我正在收集所需的數據以啓動一個項目。訪問一個PHP頁面和表單驗證的多個表單

我將在一個網站上有多個<form> s,這些網站都鏈接到相同的PHP頁面,例如發送電子郵件或向數據庫添加數據。

現在,我可以構建表單和PHP頁面來發送郵件或將數據添加到數據庫。但是這裏是我需要知道的一點......如果任何表單調用PHP頁面,我怎麼知道哪一個表單做了相應的操作?

另外,對錶單進行雙重驗證會更好嗎?我的意思是,客戶端然後服務器端?

由於我們談論的是驗證,在客戶端,JS還是JQuery(我可以同時編寫)是否更好?而關於DB的事情,我該如何保護它?!我的意思是,我如何確保用戶不會輸入PHP代碼來搞亂事情,以及如何檢測它。

我知道這似乎是一般問題或討論,但你會幫助我很多。坦率地說,我一直在使用這個網站大約3年,現在你們幫助我通過我的畢業設計項目,因此我很樂意在這裏找到答案:)

謝謝大家。

回答

1

您可以在表單中使用隱藏字段來表示應發生哪種操作。您也可以在表單的ACTION屬性中僅包含一個參數。無論哪種方式,結果相同

<form> 
    <input type='hidden' name='mode' value='save'> 
    <!-- More HTML --> 
</form> 

<form> 
    <input type='hidden' name='mode' value='delete'> 
    <!-- More HTML --> 
</form> 

爲進行驗證,首先需要進行服務器端驗證,然後添加客戶端驗證以減少服務器處理並減少往返時間。人們會喜歡響應式設計。有很多可用的表單驗證工具,請查看此問題的相關鏈接。

爲了安全起見,請確保您使用的是PDOMysqli擴展名來創建您的查詢。黃金法則是逃避你的輸入並編碼你的輸出。你可以使用像htmlspecialchars()這樣的方法來編碼你的輸出。並利用PHP的Filter方法。這將極大地幫助你 - http://php.net/manual/en/book.filter.php。此外,在驗證時使用白名單而不是黑名單通常更好。

+0

好的JohnP,你能告訴我MySQLi和MySQL有什麼區別...我一直在使用MySQL,並且會在項目中使用它,也會在即將到來的項目中使用它。 – sikas 2012-01-15 10:55:07

+0

這是改進的mysql庫。如果你使用PHP5,那麼強烈建議你使用這個。它的寫入是爲了利用mysql中的新特性,並且它對原始擴展有一些安全性改進 - 這個問題有一些細節 - http://stackoverflow.com/questions/1171344/advantages-of-mysqli-over-mysql – JohnP 2012-01-15 13:50:49

1

在每個隱藏字段來確定動作是什麼...

<input type="hidden" name="action" value="cart" /> 

OR

<input type="hidden" name="action" value="purchase" /> 
1

如果你有多個形式提交到同一個頁面,您可以識別的形式沿着一個隱藏的數據字段發送,如:

<input type="hidden" name="form_name" value="001" /> 

輸入驗證應該總是在服務器上發生。客戶端驗證對用戶來說很好,但服務器端是必須的。

驗證用戶輸入之前,你做任何事情,在適當的時候轉義。比如mysql_real_escape_string,當你把東西放在一個查詢中,或者使用準備好的語句。