改进一个表单提交前的的验证代码?

chiev 2001-11-21 04:56:38
我用下面这断代码对表单进行校验,现在相对它进行修改避免反复提交,如何做阿??

<script language="javascript">
<!--
function validate_form() {
validity = true;
if (check_empty(document.form.username.value)){
validity = false;
alert('姓名不能为空!');
document.form.username.focus();
return false;}

if (check_empty(document.form.idnum.value)){

validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}



if (IsNotNum(document.form.idnum.value)&&isnotletter(document.form.idnum.value)){

validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}



idnum1=document.form.idnum.value;

if((idnum1.length!=15)&&(idnum1.length!=18))

{validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}
if (document.form.area.value==0){

validity = false;

alert('请选择你的所在地区!');

document.form.area.focus();

return false;}
if (check_empty(document.form.telephone.value)){

validity = false;

alert('联系方式不能为空!');

document.form.telephone.focus();

return false;}

if (validity)

return validity;

}

function isnotletter(str){
i=0;
while( i<str.length){
if((str.charAt(i)<'0')¦¦((str.charAt(i)>'9')&&(str.charAt(i)<'A')) ¦¦ ((str.charAt(i)>'Z')&&(str.charAt(i)<'a')) ¦¦(str.charAt(i)>'z'))
return true ;
i++;}
return false;}
function IsNotNum(str){

i=0;j=0;

while( i<str.length){

if(((str.charAt(i)<'0')¦¦ (str.charAt(i)>'9'))&&(str.charAt(i)!='.') )

return true ;

if (str.charAt(i)=='.') j++;

i++;}

if (j>1) return(true);

return false;}

function check_empty(text) {

if (text.length>0)

return false

else

return true;}

function check_empty(text) {

if (text.length>0)

return false

else

return true;}
-->

</script>

<form name="form" method="post" action="*.php" onSubmit="return validate_form()">


宇凡提供了下面这段
if (flag==1)
{
flag++;
return true;
}
else
{
alert("您已经提交了一次订单了");
return false;
},

如何把他们融合到一起啊??

...全文
146 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chiev 2001-11-26
  • 打赏
  • 举报
回复
9494
chiev 2001-11-26
  • 打赏
  • 举报
回复
加分
yourway 2001-11-23
  • 打赏
  • 举报
回复
可以用呀,我是试了以后才贴的。
源文件里的“|”到了上面的帖子里变成了“¦ ”,不知你是否把上面帖子里的“¦ ”更换为“|”。
另外,请把错误信息贴出来。我再看看。
我是用这个文件进行测试的,将提交地址写为一个格式正确但不存在域名可以拖延提交时间。
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>New Page 1</title>

</head>

<body>
<script language="javascript">
<!--

var flag=1; //定义flag为全局变量并赋初值

function validate_form() {
validity = true;
if (check_empty(document.form.username.value)){
validity = false;
alert('姓名不能为空!');
document.form.username.focus();
return false;}

if (check_empty(document.form.idnum.value)){

validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}



if (IsNotNum(document.form.idnum.value)&&isnotletter(document.form.idnum.value)){

validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}



idnum1=document.form.idnum.value;

if((idnum1.length!=15)&&(idnum1.length!=18))

{validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}
if (document.form.area.value==0){

validity = false;

alert('请选择你的所在地区!');

document.form.area.focus();

return false;}
if (check_empty(document.form.telephone.value)){

validity = false;

alert('联系方式不能为空!');

document.form.telephone.focus();

return false;}
//加在这里:
if (flag==1)
{
flag++;
return true;
}
else
{
alert("您已经提交了一次订单了");
return false;
}


}

function isnotletter(str){
i=0;
while( i<str.length){
if((str.charAt(i)<'0')||((str.charAt(i)>'9')&&(str.charAt(i)<'A')) || ((str.charAt(i)>'Z')&&(str.charAt(i)<'a'))||(str.charAt(i)>'z'))
return true ;
i++;}
return false;}
function IsNotNum(str){

i=0;j=0;

while( i<str.length){

if(((str.charAt(i)<'0')||(str.charAt(i)>'9'))&&(str.charAt(i)!='.') )

return true ;

if (str.charAt(i)=='.') j++;

i++;}

if (j>1) return(true);

return false;}

function check_empty(text) {

if (text.length>0)

return false

else

return true;}

function check_empty(text) {

if (text.length>0)

return false

else

return true;}
-->

</script>

<form name="form" method="post" action="http://dssdsdafasdaf.sdasdaffsasdaf.sdaf.df.com" onSubmit="return validate_form()">
姓名<input type=text name="username"><br>
身份证号码<input type=text name="idnum"><br>
地区:<select name="area">
<option value=0>请选择</option>
<option value=1>北京</option>
</select><br>
电话<input type=text name="telephone">
<input type="submit"> ¦
</form>
</body>

</html>
chiev 2001-11-23
  • 打赏
  • 举报
回复
to :yourway(励磁绕组) 

上面的js,我试过了,很遗憾,不仅不能用,而且以前的校验也不管用了
beckheng 2001-11-22
  • 打赏
  • 举报
回复
在确定FORM的提交动作之后用JavaScript控制Button或是Submit的Diabled属性为True
就像这里的回复一样的效果,你是否想要这样的效果?
chiev 2001-11-22
  • 打赏
  • 举报
回复
楼上的可否说得详细一点阿,谢谢!
beckheng 2001-11-22
  • 打赏
  • 举报
回复
可以设置disabled属性为true
这样用户必须等待一次处理完成后才再能提交
netken 2001-11-22
  • 打赏
  • 举报
回复
clinet 端设 cookie
server 端记 ip
都是防止恶意提交的方法啊
chiev 2001-11-22
  • 打赏
  • 举报
回复
不过我发现这段代码只适用于网速太慢的情况下,如果有人恶意反复点击“提交”问题仍然解决不了,有没有改进的办法?
chiev 2001-11-22
  • 打赏
  • 举报
回复
我这边网速太快,没办法测试 :(

不过还是先谢谢了
yourway 2001-11-22
  • 打赏
  • 举报
回复
是的,用JavaScript是治标不治本的。
即使像(☆碧恒☆)说得那样将提交按钮的属性设为禁止,别人也可以用“后退”“刷新”来再次提交数据。
只有确定一个唯一确定的量,以此来检查,才能保证一套数据只能提交一次。
例如,在这个javascript里,用flag这个量来确定是否提交,但刷新了页面后,这个量会变为初值,也就失去意义了。
较好的办法就是像小肯兄说得那样
1、客户端保存cookie,在http://www.csdn.net/expert/topic/355/355652.shtm这里,我已经给出了解决办法。不过,这里有一点小问题就是,如果多人用一台机器的话,只有第一个提交资料的人可以提交,第二个人就不行了。
2、服务器端记ip,这也有点问题.一、对于共享ip上网的用户来说,服务器记得是代理服务器的ip,也就是说,在一批机器里,只有第一台机器可以提交数据,别的都不行;二、拨号用户在再次拨号后,ip会改变,又可以再次提交数据。
3、还有一种办法,就是在用户提交得数据里确定一个“主键”,比如说电子信箱,每个人的电子信箱是不同的,那么,服务器根据输入的电子信箱是否同已保存的电子信箱是否相同来确定是否是重复输入。但这又问题,你不能保证一个用户只有一个电子信箱,他可以换一个信箱再次提交数据。

总之,完全保证每一个人能且只能提交一次数据是很难办到的。第一种方法保证了只能提交一次数据但不能保证每人都有机会提交;第三种方法保证了每人都有机会,也在一定程度上保证每人一次,但人和电子信箱不是一对一的关系,所以在只有一次上还有一定的漏洞。
我认为,最有效地方法,当数注册用户了。
yourway 2001-11-21
  • 打赏
  • 举报
回复
这样:
<script language="javascript">
<!--

var flag=1; //定义flag为全局变量并赋初值

function validate_form() {
validity = true;
if (check_empty(document.form.username.value)){
validity = false;
alert('姓名不能为空!');
document.form.username.focus();
return false;}

if (check_empty(document.form.idnum.value)){

validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}



if (IsNotNum(document.form.idnum.value)&&isnotletter(document.form.idnum.value)){

validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}



idnum1=document.form.idnum.value;

if((idnum1.length!=15)&&(idnum1.length!=18))

{validity = false;

alert('身份证号码有误!');

document.form.idnum.focus();

return false;}
if (document.form.area.value==0){

validity = false;

alert('请选择你的所在地区!');

document.form.area.focus();

return false;}
if (check_empty(document.form.telephone.value)){

validity = false;

alert('联系方式不能为空!');

document.form.telephone.focus();

return false;}
//加在这里:
if (flag==1)
{
flag++;
return true;
}
else
{
alert("您已经提交了一次订单了");
return false;
}


}

function isnotletter(str){
i=0;
while( i<str.length){
if((str.charAt(i)<'0')¦¦((str.charAt(i)>'9')&&(str.charAt(i)<'A')) ¦¦ ((str.charAt(i)>'Z')&&(str.charAt(i)<'a')) ¦¦(str.charAt(i)>'z'))
return true ;
i++;}
return false;}
function IsNotNum(str){

i=0;j=0;

while( i<str.length){

if(((str.charAt(i)<'0')¦¦ (str.charAt(i)>'9'))&&(str.charAt(i)!='.') )

return true ;

if (str.charAt(i)=='.') j++;

i++;}

if (j>1) return(true);

return false;}

function check_empty(text) {

if (text.length>0)

return false

else

return true;}

function check_empty(text) {

if (text.length>0)

return false

else

return true;}
-->

</script>

<form name="form" method="post" action="*.php" onSubmit="return validate_form()">

2,204

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧