0

我有一个创建帐户的表单,它重定向到我的 php 页面以检查表单中的空字段并插入数据。

empty();用来检查字段是否为空,作为错误处理我只是使用回显,现在我的问题是我是否可以以更好的方式做到这一点,因为我的 php 表单检查页面没有应用任何设计,所以错误处理只是在空白页上。

4

3 回答 3

2

假设表单中的所有字段都是输入文本字段(将类“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}

由于您的提交按钮将保持禁用状态,因此用户将无法提交任何表单。当用户仅输入空格作为任何文本字段的值时,提交按钮也将保持禁用状态

于 2013-04-05T11:07:38.243 回答
1

在我看来,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)转到新页面,显示错误并在出现错误时再次重定向到表单

将表单提交到一个新页面,该页面处理输入、输出样式的错误消息并放置一个链接,该链接可以继续(成功)或带您返回表单(错误)

于 2013-04-05T11:08:17.423 回答
0

您可以做的最好的事情是在例外情况下进行(如果您使用类来处理注册。

例如,你会有这样的课

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) 上进行验证。如果您没有,用户将删除身份验证规则并闯入(没有用户名,使用无效字符,...)

于 2013-04-05T11:24:27.730 回答