2012-09-25 49 views
0

我已經構建了一個註冊表單,並且已經實現了JÖRNZAEFFERER的jQuery Validation插件,包括使用CSS風格化錯誤消息,現在我想添加一層PHP來驗證第二次, case JS被關閉,然後我將通過安全性:hash/salt/encryption等方式運行數據,然後將數據插入到mySql表中,然後編寫程序以通過電子郵件將帳戶驗證爲註冊過程的一部分。PHP表單處理

我是自學成才的,因此任何人有更多的經驗可以說明這個過程的最佳實踐。我擁有的問題是: PHP應該在哪裏嵌入html文件,在form action =「」提交的單獨的php文件中,還是包含文件中? 關於安全性的最佳實踐是什麼?如果我正在使用鹽或散列函數或加密函數應該在包含文件中? 最後一個問題是:jQuery驗證是否浪費時間,如果您同時使用PHP,PHP會將其嵌入HTML文件中,還是將其放置在其他位置更好?

這是我第一次這樣做了,但它只是簡單地把輸入把它在數據庫安全,電子郵件驗證,然後在新用戶登錄到,然後去使用該網站。

我很想知道的最佳實踐與開始,因此,如果有在網絡上的任何好文章,請聯繫我給他們。

感謝

蟻動力

+0

這似乎是一個不錯的指導http://www.phptherightway.com/ – wgcrouch

回答

0

最好的做法是創建一個驗證數據的PHP函數或類的方法,然後調用說,定義爲您的表單操作一個單獨的文件中的函數/方法。假設這是一個POST請求,你應該有一個處理請求的獨立文件。驗證不應該是該文件的一部分,因爲您應該可以在任何需要的地方使用它。

TLDR:創建一個驗證類,幷包含在一個單獨的處理文件,使用它。

+0

謝謝你幫助埃斯本,欣賞它:) –

2

所以你在這裏問了很多不同的問題。我會一一瀏覽它們。

的PHP應該去哪裏,在HTML文件中嵌入,在一個單獨的PHP文件,該文件的形式行動=「」提交到,或者在一個包含文件?

PHP是從來沒有在HTML文檔中直接嵌入。相反,將PHP視爲動態HTML生成器。它創建了 HTML(或JSON,或其他)發送到瀏覽器,但從未實際發送到瀏覽器本身。這就是爲什麼它被稱爲服務器端語言,而不是像JavaScript(也可以是服務器端,但這不相關)的東西。所以你應該在你想要的任何地方進行驗證。這將需要發生在action表格被調用時,所以它需要在任何地方發生。像下面這樣的東西應該工作:

<?php 

function validate($data) { 
    // Do your validation here, and return an array of errors. 
    return $errors; 
} 

// Run the validation on the data posted from the form. 
$errors = validate($_POST); 
if (empty($errors)) { 
    // The data was valid, save it to the database 
    // (be sure to sanitize the data first). 
} else { 
    // The data was not valid, redirect the user or whatever. 
} 

在一個包含文件的安全性方面,如果我使用的鹽或散或encrytion功能應該說是什麼是最好的做法?

是的,使用加密功能。它不需要放在單獨的文件中以確保安全:加密功能是提供安全性的,而不是用戶無法看到文件的事實(讀取:實際安全性,而不是通過混淆)。 但是無論你用什麼鹽來散列值應該在一個單獨的文件,不能通過網絡訪問。如果用戶可以看到你的哈希算法和你的鹽,他們可以開始暴力破解你的數據。

是jQuery驗證浪費時間,它會更好只是用PHP來做?

jQuery驗證應該被視爲比實際驗證更多的UI/UX改進。客戶端(讀取:JavaScript)驗證不應該替代服務器端(讀取:PHP)驗證,因爲您已經提到過。但我認爲它可以爲更好的用戶體驗做出貢獻,所以有時候兩者都值得。

我會做的一件事是使用相同的方法來驗證服務器端和客戶端,以便您不必兩次寫入驗證代碼。例如,如果您將驗證功能置於另一個文件中,則可以使用AJAX將表單數據發送給它,然後接收表單錯誤。

希望這會有所幫助!

更新: 另外,如果你正在做的是在用戶登錄時,檢查出password_compat,這將成爲PHP標準庫的一部分,在PHP 5.5。該庫應該以可升級的方式爲您處理很多安全問題。

+0

感謝解放者:) –

+0

但我有點困惑一件事,我已經一起看過PHP和HTML很多,就像我研究過的PHP Cookbook(o'reilly)一樣,它只存在於一個php文件中,而不是html,以及如果要動態更改前端(html)基於數據庫事務(例如某人從您的網站購買了某些東西,並且您需要相應地更改前端),您是否會通過基於PHP腳本的Ajax來實現這一點? –

+0

您可以將PHP和HTML放在一個文件中。但是,瀏覽器永遠不會看到PHP代碼 - 他們只會看到正在執行的PHP代碼的結果(如果有的話)。因此,您可以使用PHP來動態更改基於數據庫操作輸出的HTML,但最終用戶將永遠不會看到任何邏輯 - 他們將看到的只有HTML(或JSON或其他) PHP代碼運行和輸出的結果。 – theunraveler