高效且有效的表单验证

时间:2012-02-01 09:50:23

标签: php javascript jquery html forms

我有一个表格here的工作示例。我需要使用Javascript的Jquery表单验证来验证用户是否输入了他/她自己的数据。到目前为止,我已经尝试检查值,但显然这不起作用,因为输入和textarea已经有一个默认值,因此用户可以直接提交而不填写任何内容。

非常感谢任何帮助。

提前致谢!

修改

我正在使用此php将提交的数据发送到电子邮件地址:

<?php
$name = $_POST['name'];
if ($name=="") {
$name="Nothing was returned for this part of the form.";
}
$email = $_POST['email'];
if ($email=="") {
$email="Nothing was returned for this part of the form.";
}
$subject = $_POST['subject'];
if ($subject=="") {
$subject="Nothing was returned for this part of the form.";
}
$comments = $_POST['comments'];
if ($comments=="") {
$comments="Nothing was returned for this part of the form.";
}
$theMessage7="<b>Results from the form at www.site.co.uk/contact.html</b><br /><br />" . "Name:&nbsp;" . $name . "<br />" . "Email:&nbsp;" . $email . "<br />" . "Subject:&nbsp;" . $subject . "<br />" . "Message:&nbsp;" . $comments . "<br />";
$theEmail7="mail@mail.com";
$theSubject7="New form submission";
$theHeaders7="MIME-Version: 1.0
Content-type: text/html; charset=iso-8859-1
From: form@bikeinc.co.uk
Subject: New form submission";
$theErrorFile7="www.site.co.uk/12345";
$theThanxFile7="received.html";
if (!(mail($theEmail7, stripslashes($theSubject7), stripslashes($theMessage7), stripslashes($theHeaders7)))) {
    header ( "Location: $theErrorFile7" );
        }else{
    header ( "Location: $theThanxFile7" );
}
?>

2 个答案:

答案 0 :(得分:3)

用户端表单验证的有效形式是使用jQuery validation plugin,请参阅正确用法示例。

注意:用户总是可以禁用javascript或使用某种机器人发送无效的未检查数据,因此您必须始终编写正确的服务器端验证。

框架通常提供有效的表单验证方式,例如Zend_Validator

为php应用程序准备方法很常见,例如:

public function validate() {
  if( !isset( $_POST['name'])){
    $this->field = 'name';
    $this->msg = 'Invalid user name';
    return false;
  }

  ...
  return true;
}

并在发送脚本中使用它:

if( $form->validate()){
  send();
}

在检查脚本中:

$data = array();
if( $form->validate()){
  $data['status'] = 'ok';
} else {
  $data['status'] = 'failure';
  $data['field'] = $form->field;
  $data['msg'] = $form->msg;
}
echo json_encode( $data);

结束使用jquery和javascript进行表单验证“即时”:

<input type="text" name="name" value="" onchange="ajaxValidate();" />

function ajaxValidate(){
  // Call ajax to check script and put results
}

如果您只是使用一种形式构建小型项目,则可以实现以下几种方法:

function is_post( $key); // Shorter than write isset( $_POST[ $key])
function get_post( $key, $defaultValue); // Shorter than isset( $_POST[ $key]) ? $_POST[ $key] : $default
function is_email(...); 
...

jQuery验证:

function validateForm() {
  $('.input').removeClass( 'error');
  var status = true;
  if( $('input[name=name]').val() == '')){
     $('input[name=name]').addClass( 'error');
     setMessage( 'Name cannot be empty');
     status = false;
  }

  ...

  return status;
}

<form onsubmit='return validateForm();' ...>

答案 1 :(得分:0)

您可以尝试使用HTML5必需属性...但是这仅适用于支持它的浏览器。例如:

<label for="name">Name:</label>
<input type="text" name="name" required="required" id="name">

这仅在您使用HTML5文档类型时才有效。

然后,对于实例中的PHP验证,HTML5验证由于浏览器不兼容而未运行...或者由于JavaScript被禁用/不可用/损坏而无法运行。

// check input
if (empty($_POST['name']))
{
    $errors['name'] = 'Please provide your name.';
}

然后,当我在验证完成后向用户显示页面时,我会显示错误。

<label for="name">Name:</label>
<input type="text" name="name" required="required" id="name">
<?php if (!empty($errors['name'])): ?><p class="error"><?php echo $errors['name']; ?></p><?php endif; ?>

另外......如果要将其保存在数据库中或显示给其他用户,请记住保护自己免受SQL注入,XSS和恶意代码注入。