如何限制html表单输入在表单提交上传递?

时间:2015-07-28 04:23:04

标签: html forms post form-submit

我有一个简单的注册表单,其中包含以下字段:fname,lname,username,password和confirm password。 提交后,表单调用一个处理输入的servlet。 如何阻止确认密码字段被传递给servlet post方法?

以下是代码片段:

HTML FORM SNAPSHOT:

<div class="container-fluid">
<form name="UserRegistration" action="${pageContext.request.contextPath}/RegisterServlet" method="POST" onsubmit="return validateForm()">

First name:<br>
  <input type="text" name="firstname">
 <br>
Last name:<br>
  <input type="text" name="lastname">
 <br>
Username:<br>
  <input type="text" name="username">
 <br>
Password:<br>
  <input type="text" name="password">
 <br>
Confirm Password:<br>
  <input type="text" name="cpassword">
 <br><br>
<input type="submit" value="Register">
</form>

我在javascript表单验证中使用确认密码输入。在那一步之后,我没有用它。

JAVASCRIPT CODE SNIPPET:

 function validateForm() {
      var fname = document.forms["UserRegistration"]["firstname"].value;
      var lname = document.forms["UserRegistration"]["lastname"].value;
      var uname = document.forms["UserRegistration"]["username"].value; 
      var pass = document.forms["UserRegistration"]["password"].value; 
      var cpass = document.forms["UserRegistration"]["cpassword"].value;

      if(cpass == pass){
      if (fname == null || fname == "" || lname == null || lname == "" || 
              uname == null || uname == "" || pass == null || pass == "") {
          alert("All fields must be filled out");
          return false;
      }else
          {
              return true;
          }
      }
      else
          {
          alert("Passwords do not match")
          return false
          }
  }

3 个答案:

答案 0 :(得分:0)

在提交表单之前,您可以删除确认密码字段的name属性,在这种情况下,不会提交此字段:

if (fname == null || fname == "" || lname == null || lname == "" || 
          uname == null || uname == "" || pass == null || pass == "") {
      alert("All fields must be filled out");
      return false;
}else
{
    // remove the attribute name from element cpass
    cpass.removeAttribute('name');
    return true;
}

答案 1 :(得分:0)

您可以将disabled属性设置为true,以防止其发布。

document.forms["UserRegistration"]["cpassword"].disabled = true;

答案 2 :(得分:0)

只需允许cpassword的值与表单上的其他信息一起传输到servlet。如果您的servlet确定密码不匹配,您可以重播表单并要求用户输入密码并进行确认。

不要只依赖JavaScript来进行验证。始终执行服务器端验证。 如果用户在其浏览器中禁用JavaScript并尝试提交表单,或使用cURL或其他POST数据到您的servlet时,他们可能会发送无效数据。

如果你仍然想要不发送cpassword,你可以使用dotnetom的方法或者在执行return true;之前使用类似的东西删除元素

(elem=document.getElementsByName("cpassword")[0]).parentNode.removeChild(elem);