我有一个简单的注册表单,其中包含以下字段: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 } }
答案 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);