當我開發需要PHP處理的表單時,我傾向於將表單和PHP放入單個文件,例如signup.php並使用$ _GET方法來確定我需要使用表單。jQuery/Ajax和PHP表單處理設計
例如,如果/site/signup.php被請求,那麼我知道我需要顯示HTML表單,但是如果/site/signup.php?action=newsignup被請求(通過html表單提交),那麼我知道我需要處理它。
我一直很滿意這種方法,因爲它意味着我需要維護更少的文件,並且所有相互作用的內容都放在一個文件中,這使得跟蹤問題更加容易(另外我討厭在處理數據時不斷重定向頁面的站點。)
什麼,我會做一個粗略的例子是:
<?php
if (isset($_GET['action'] && $_GET['action'] == "newsignup")
{
$name = cleanInput($_POST['name'];
$email = cleanInput($_POST['email'];
if(validUserName($name)== TRUE)
{
// do processing here
} else {
// fail processing here
}
if(validEmail($email)== TRUE)
{
// do processing here
} else {
// fail processing here
}
// Do database stuff etc
// Display success message
} else {
// Not $_GET so must be a new sign-up. Display html form
<form id="signup" action="signup.php?action=newsignup" method="post">
<input type="text" name="name" id="name" />
<input type="text" name="email" id="email" />
<input type="submit" id="submit" value="Submit" />
</form>
}
現在,我開始使用jQuery/AJAX做驗證客戶端提供反饋當用戶填寫表格,當數據輸入到表單中的文本框中時,使用keyup事件實時驗證數據以發佈該t extbox轉換爲.php腳本進行驗證。要做到這一點,我使用jQuery帖子:
function name_check(){
var username = $('name').val();
if(name == "" || name.length < 4){
$('#name').css('border', '3px #CCC solid');
$('#text').text('');
}else{
$.post('jquerysignup.php', { name: $('#name').val()}, function(response) {
$('#phpout').html(response['message']); // return an error string if exists
if(response['returnval'] == 0){
$('#name').css('border', '3px green solid');
$('#submit').fadeIn('slow')
} else if (response['returnval'] == 2){
$('#name').css('border', '3px red solid');
$('#submit').fadeOut('slow')
} else {
$('#name').css('border', '3px red solid');
$('#submit').fadeOut('slow')
}
}, 'json');
} //
}
文件jquerysignup.php是隻包含PHP函數validUserName和validEmail。
我現在是在有有兩個PHP文件,一個是服務器端驗證,現在一個是客戶端的位置。我想保留客戶端和服務器端驗證,但我不想保留包含重複功能的多個文件。
我一直在努力尋找或想出了一個集成的解決方案,我知道必須有一個更好的辦法做到做到這一點,但我無法找到任何的例子來處理這個特定的問題。
我會很感激的最佳實踐/解決這一一些指導。
感謝您的反饋,我有想到你所描述的方法,但提出這個問題的理由是看看這種情況是否存在「最佳實踐」,而不是技術解決方案。 我想這一切都取決於你想從服務器端分離出多少客戶端代碼。 我仍然關心如何解決這個問題,但目前我已決定表單流程代碼應該保持原樣,並將jQuery事件發佈到單獨的.php文件中,該文件包含函數validUserName和validPassword 。 – amer 2012-01-09 17:24:42