【发布时间】:2014-05-04 00:14:24
【问题描述】:
我知道在客户端和服务器端都有很多验证表单的方法,但我想知道最佳做法是什么?
目前,我有 Javascript 函数通过 onkeyup/onblur 函数“即时”验证表单输入字段,如下所示:
(部分代码:)
<p class="form-registerUserName">
<div class="upperLabel">
<label for="registerUserName">User Name</label>
<span class="required">*</span>
</div>
<input
id="registerUserName"
name="registerUserName"
type="text"
size="24"
maxlength="24"
value="<?php echo $_SESSION['registerUserName'];?>"
onkeyup="validateName()"
onblur="checkDuplicateName(); validateName()"
>
<label for="registerUserName" class="hint" id="registerUserNameHint"></label>
</p>
使用 Javascript 函数,例如:
function validateName() {
userName = document.getElementById("registerUserName").value.trim();
re = /^[a-zA-Z0-9_]{1,30}$/;
if (userName==="") {
document.getElementById('registerUserName').style.borderColor="red";
document.getElementById('registerUserNameHint').innerHTML = 'required';
} else if (!re.test(userName)) {
document.getElementById('registerUserName').style.borderColor="red";
document.getElementById('registerUserNameHint').innerHTML = 'only alphanumeric characters and _';
} else {
document.getElementById("registerUserName").setAttribute("style","border-color: rgb(221,221,221) rgb(241,241,241) rgb(241,241,241) rgb(221,221,221);");
document.getElementById('registerUserNameHint').innerHTML = '';
}
} //validateName()
..这样输入框会变成红色,如果不验证的话会在框边显示提示。
所以我的问题是 - 当用户点击提交时,防止表单提交到我的 (Mysqli) 数据库的最佳方法是什么?
(和第二个问题..)在客户端验证清除后,我是否运行额外的 php 服务器端脚本?
我想实现这一点的一些方法是让我的 Javascript 函数设置一个 Session 变量来指示错误条件,如果有则不允许提交。
我不确定该怎么做,或者我如何将我的“提交”设置为不起作用,除非错误条件被清除。
不胜感激。
那么在插入到我的数据库之前,在成功的客户端验证之后,我是否再次使用 php 重新验证相同的数据(以相同的方式)?
提前致谢。
【问题讨论】:
-
你永远不应该“信任”客户。客户端验证很容易被规避。 始终也在服务器上验证。客户端验证只是改善用户体验的一个很好的补充,但它永远不会取代适当的服务器端验证。
-
“在客户端验证清除后,我是否会运行一个额外的 php 服务器端脚本?” - 你当然会这样做,因为据你所知,is 没有客户端验证……如果您甚至假设一秒钟,到达您的服务器的任何请求都必须由“浏览器”之类的东西发送,您会基本上已经错误了。 (为什么-o-为什么我们必须一遍又一遍地说这个……?)
-
“当用户点击提交时,防止表单提交到我的 (Mysqli) 数据库的最佳方法是什么?” – 对提交做出反应事件,进行验证——然后在验证失败时取消事件(preventDefault)。当然,除了“新”之外,其他一切都已经被讨论过无数次了。
-
感谢 cmets。我会仔细看看的。我确信其中一些事情已经讨论过了,但问题是找到那些特定的讨论。
-
我是否应该使用会话变量来标记错误条件(如果 javascript 验证函数发现错误)以用于条件提交? .. 或者干脆跳过它,只在提交时进行服务器端验证?我想如果我无论如何都要进行服务器端验证,那将是多余的..
标签: javascript php forms validation