当我开发需要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