我有一个创建帐户的表单,它重定向到我的 php 页面以检查表单中的空字段并插入数据。
我empty();
用来检查字段是否为空,作为错误处理我只是使用回显,现在我的问题是我是否可以以更好的方式做到这一点,因为我的 php 表单检查页面没有应用任何设计,所以错误处理只是在空白页上。
假设表单中的所有字段都是输入文本字段(将类“requiredField”)添加到这些字段中。使您在加载空表单时禁用提交按钮。
jQuery:
$(document).ready(function() {
$("input.requiredField:text").bind("keyup change", function() {
updateSaveButton();
});
});
function updateSaveButton() {
if ( $(".requiredField:text").filter(function() {return $(this).val().match(/^\s*$/);}).length) {
$("#submit").button({
disabled : true
});
} else {
$("#submit").button({
disabled : false
});
}
}
Submit 是提交按钮的 id,按钮是 jQuery UI 的一部分。但是,如果您不使用 jQuery UI,您可以简单地添加 disabled 属性。例如:
$("#submit").attr("disabled","disabled"); {to add disabled attribute}
$("#submit").removeAttr("disabled"); {to remove disabled attribute}
由于您的提交按钮将保持禁用状态,因此用户将无法提交任何表单。当用户仅输入空格作为任何文本字段的值时,提交按钮也将保持禁用状态
在我看来,empty() 通常是检查输入的最佳方式
if( empty( $_POST[ 'username' ] ) ) {
$error = 'Please enter a user name';
}
在最好的情况下,你这样做
$username = !empty( $_POST[ 'username' ] ) ? trim( $_POST[ 'username' ] ) : '';
if( empty( $username ) ) $error = 'Please insert a user name';
if( strlen( $username ) < 3 ) $error = 'Username needs 3 characters';
//etc...
这将确保用户不只是提供空格来提供您请求的输入
有几种方法可以处理输入。
1)将您的表单重定向到同一页面并处理输出上方的输入
$error = '';
if( strtolower( $_SERVER[ 'REQUEST_METHOD' ] ) === 'post' ) {
//handle user input and fill $error if needed
if( empty( $error ) ) {
//success
}
}
?>
<form action="thissite.php">
<?php if( !empty( $error ) ) :?><span class="error"><?=$error?></span><?php endif; ?>
<...rest of the form...>
</form>
2)你可以用AJAX处理它
通过 AJAX 提交您的表单(请参阅 jQuery 的$.ajax和$.serialize,这对您有很大帮助),接收包含成功状态或错误的 JSON 字符串。解析它并相应地在表单中插入错误元素
3)(最糟糕的方式imo)转到新页面,显示错误并在出现错误时再次重定向到表单
将表单提交到一个新页面,该页面处理输入、输出样式的错误消息并放置一个链接,该链接可以继续(成功)或带您返回表单(错误)
您可以做的最好的事情是在例外情况下进行(如果您使用类来处理注册。
例如,你会有这样的课
class Account {
public function register($username, $password, $mail) {
if(empty($username)) throw new RegistrationException("Username is empty.");
// and so on
}
}
然后在注册的地方,你会做类似的事情
try {
$account = new Account();
} catch(RegistrationException $e) {
// print the message out
// $e->getMessage() will return the parameter of new RegistrationException(...)
}
然后,只需创建一个扩展异常的异常类
class RegistrationException extends Exception {}
如果您将进行客户端验证 (javascript/jQuery),请不要忘记在服务器端 (php) 上进行验证。如果您没有,用户将删除身份验证规则并闯入(没有用户名,使用无效字符,...)