首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >即使用户一次又一次地输入相同的电子邮件,代码也不会停止提交表单。

即使用户一次又一次地输入相同的电子邮件,代码也不会停止提交表单。
EN

Stack Overflow用户
提问于 2012-01-17 00:11:14
回答 1查看 267关注 0票数 1

当用户提交表单时,我试图向服务器发送AJAX请求,我这样做是为了检查该电子邮件是否已经被其他人使用,或者它是否是新的。

这是我的javascript AJAX函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function check_entireform()
{ 
    var new_email = document.getElementById('jemail').value;
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            var y =xmlhttp.responseText;
            if(y=="user with that email is already registered")
                return false;
        }
    }

    var x ="user_exists.php?email="+ new_email;
    xmlhttp.open("GET",x,true);
    xmlhttp.send();
}

这是我的html输入标签

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form method="post" action="./new.php" onsubmit="return check_entireform()">
<input type="text" name="email" id="jemail"/>
</form>

这是我的user_exists.php文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   <?php
     $email=$_GET["email"];
     if(mysql_query("SELECT email FROM user_info WHERE email='$email'"))
       echo "user with that email is already registered";
     else
       echo"user got a new email";
   ?>

当用户提交表单时,我希望通过AJAX将用户电子邮件发送到user_exists.php文件,然后检查该电子邮件是否已经被人使用,并在已经使用的情况下回显一些信息。

我不知道哪里出了问题。我一直在提交相同的电子邮件,但它没有回音,也没有阻止我提交表格。

如果有更好的解决方案来找出是否有人已经在使用电子邮件,那就是great.Thanks

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-17 00:25:51

AJAX中的第一个A是用于异步的.

这意味着回调函数(您为onreadystatechange定义的回调函数)只有在服务器响应时才会运行。另一方面,您的submit处理程序check_entireform将返回更早的时间。它返回undefined,它的计算结果为false,因此没有提交表单。

无论您想做什么,都应该在回调函数中这样做。

始终防止提交,并将引用传递给表单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<form method="post" action="./new.php" onsubmit="check_entireform(this); return false;">

接受以下参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function check_entireform(theform) {

如有需要,请提交表格:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
   {
        var y =xmlhttp.responseText;
        if(y != "user with that email is already registered")
            theform.submit();
   }

jsFiddle演示 -没有AJAX,只有模拟

从PHP中返回更符合逻辑的内容

提示:不是从PHP返回长字符串,而是只返回0或1。您应该将AJAX查询看作是--在这种情况下没有问题(可以使用这封电子邮件吗?)1表示是,0表示不。

这样您就可以将代码更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        var canBeUsed =xmlhttp.responseText;
        if (canBeUsed) theform.submit();

它将变得更容易阅读和维护。

URL-编码查询字符串参数值

在这一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var x ="user_exists.php?email="+ new_email;

您应该对new_email变量进行URL编码,因为某些字符(如&)在查询字符串中具有特殊的含义,并将被编码。您可以使用encodeURIComponent()函数来完成以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var x ="user_exists.php?email="+ encodeURIComponent(new_email);

清理PHP中的输入

总是对来自外部的任何数据进行清理(并验证)。在当前的形式中,您的代码容易受到SQL注入的攻击,这是的一个巨大的问题。

在向查询中插入数据之前,应该在查询上使用mysql_real_escape_string() (或者更好的是,使用http://php.net/manual/en/book.pdo.php处理数据库内容)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 $email = mysql_real_escape_string($_GET["email"]);
 if(mysql_query("SELECT email FROM user_info WHERE email='$email'"))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8891451

复制
相关文章
【数据】即使不会爬虫技术,也能轻松获取的重要数据
小编邀请您,先思考: 1 对于具体的业务问题,如何做好数据准备? 很多做数据分析的同学,对数据的获取有一个误区,觉得在互联网上获取数据,必须通过爬虫进行爬取。殊不知,有些必须知道的数据,即使不会爬虫的技能,也可以轻松获取。 根据这些数据类型的不同,我把它们划分为实时数据、趋势数据以及关联数据,这里,我们先来了解一下,互联网上,有哪些基于地理位置信息的实时数据。 一、实时数据 实时数据,顾名思义,是事物当前状态的数据。更好的,经过整合的实时数据,可以为我们尽早地处理问题,提供最佳的契机。 那么,互联网上,有
陆勤_数据人网
2018/04/18
5.1K0
【数据】即使不会爬虫技术,也能轻松获取的重要数据
vue的form表单提交_axios提交表单
利用v-model能比较便捷地上传用户信息的数据,不用一个个参数地拼接。直接在data根据要传的字段定义一个对象,
全栈程序员站长
2022/11/10
6.6K0
防止用户将表单重复提交的方法 原
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:
wuweixiang
2018/08/14
2K0
表单提交原理_防止表单重复提交
<form>标签的属性enctype设置以何种编码方式提交表单数据。可选的值有三个:
全栈程序员站长
2022/11/08
5.5K0
java表单提交方法_表单提交的几种方式[通俗易懂]
说明:用户提交按钮或图像按钮时,就会提交表单。使用或都可以定义提交按钮,只要将其特性的值设置为“submit”即可,而图像按钮则是通过的type特性值设置为”image”来定义的。因此,只要我们单击一下代码生成的按钮,就可以提交表单。
全栈程序员站长
2022/09/30
5K0
表单提交
在html中经常用到<form>标签。而我们在使用过程会经常这样用<input name=”sub” type=”submit” value=”提交” /> 也就是说当我们点击提交的时候会执行<form action=”file.php” method=”get” id=”se” name=”se”>action的动作(例子是提交到file.php页面)方法是get。 当没有提交按钮时而是用一个热图加onclick属性来完成,我们可以这样用 <form id=”search” name=”search”
苦咖啡
2018/05/07
4.4K0
【HTML5】HTML5 新增 input 表单 ( 邮箱输入表单 | 网址输入表单 | 日期输入表单 | 时间输入表单 | 电话输入表单 | 搜索栏输入表单 | 颜色选择器输入表单 )
一、HTML5 新增 input 表单 ---- HTML5 新增 input 表单 : 邮箱输入表单 : 必须输入邮箱 , 如果输入格式错误 , 提交时会在对话框中报错 ; <input type="email" /> URL 输入表单 : 只能输入网址 , 格式错误会在对话框中报错 ; <input type="url" /> 日期输入表单 : 右侧的下拉菜单选择日期 ; 如果在手机中打开 , 会弹出手机中自带的日期选择对话框 ; <input type="date" /> 时间输入表
韩曙亮
2023/04/24
3.4K0
【HTML5】HTML5 新增 input 表单 ( 邮箱输入表单 | 网址输入表单 | 日期输入表单 | 时间输入表单 | 电话输入表单 | 搜索栏输入表单 | 颜色选择器输入表单 )
HTML 表单和约束验证的完整指南
在本文中,我们将研究 HTML 表单字段和 HTML5 提供的验证选项。我们还将研究如何通过使用 CSS 和 JavaScript 来增强这些功能。
玖柒的小窝
2021/09/13
8.4K0
HTML 表单和约束验证的完整指南
js form表单提交(jsp form表单提交方式)
最近工作比较忙,着急上线,写个简单的东西吧 url为你要提交的地址 params 为你提交的参数
全栈程序员站长
2022/07/30
14.8K0
form实现表单提交的各种方法(表单提交源码)
这种方法实际上是调用了一个javascript函数,使用javacript函数来提交表单,方法就非常多非常灵活了,比如可以把它加入到任意一个标签的onclick事件中:
全栈程序员站长
2022/08/01
5.6K0
django表单提交
HTML表单是网站交互性的经典方式。 本章将介绍如何用Django对用户提交的表单数据进行处理。
py3study
2018/08/03
4K0
html表单提交
1、只能为input、textarea、select三类类型的标签。只有这些标签用户才可能修改值,<label>、<p>、<font>等标签仅供显示用,没有提交到服务器的必要。当input=submit的时候,只有被点击的按钮的value才会被提交;
tandaxia
2018/09/27
5.4K0
回车提交表单
我们在页面开发中经常会写一些表单,但身为一个懒人,肯定是懒得点提交按钮的,我一般直接按回车提交
阿超
2022/08/17
4K0
node表单提交POST提交
前几天给大家介绍了使用node的提交(get)获取到表单提交的内容,get提交的参数查询部分(query)可以获得到,由于get提交的内容在url显示,而post提交处理机制,为了保障安全性不显示在url中,下面案例介绍下post提交案例!
十月梦想
2018/08/29
4.4K0
异步提交表单_js异步提交表单并回调
所谓异步提交表单,就是不再使用表单的提交按钮实现表单的提交功能,而是通过Ajax异步交互方式实现表单提交。具体实现步骤如下:
全栈程序员站长
2022/11/17
11.8K0
异步提交表单_js异步提交表单并回调
如何优雅地 hack 用户的代码
前言:做基础技术的时候,会经常碰到一个问题就是如何让自己提供的代码对用户少侵入,无感。比如我提供了一个 SDK 收集 Node.js 进程的 HTTP 请求耗时,最简单的方式就是给用户提供一个 request 方法,然后让用户统一调用,这样我就可以在 request 里拿到这些数据。但是这种方式很多时候并不方便,这时候我们就需要去 hack Node.js 的 HTTP 模块或者给 Node.js 提 PR。在操作系统层面,有提供很多技术解决这种问题,比如 ebpf、uprobe、kprobe。但是应用层无法使用这种技术解决我们的问题,因为操作系统的这些技术针对的是底层的函数,比如我想知道一个 JS 函数的耗时,只能在 V8 层面或者 JS 层面去解决,V8 这方面似乎也没有提供很好能力,所以目前我们更多是考虑纯 JS 或者 Node.js 内核层面。本文介绍一些一种在 JS 层面 hack 用户代码的方式。
theanarkh
2022/07/01
6480
JavaScript表单提交
表单提交在前端编程阶段中也是一个重点。它是由页面数据保存到后台数据库的重要枢纽,通过表单提交的方式将数据上传到数据库进行保存。同时这些数据也包含用户信息、统计信息、日志信息等等。 数据的信息不同,上传的方式也不同。在JavaScript中有四种种表单提交的方式: 一、 Form表单手动提交(get与post) 在没有任何Js代码的影响下,Form表单本身是自带提交功能的。在form元素标签上有两个属性: (1) action:设置表单提交的路径(URL) (2) method:设置表单提交的方式 表单提交的路径分为两种: (1) 相对路径:指站点内的文件,就是本地文件。 (2) 绝对路径:指其它站点,就比如从本站点到百度。 设置表单提交方式属性的值有两种:get提交和post提交。如果method不指名提交方式则默认为get提交。 这两种提交方式需要分别对应不同情况使用: (1) 相对于post提交而言,get提交更简单也更快,但是传输的容量小,在提交表单时,所有的信息都会暴露在url上,并不安全,通常用来获取数据。 (2) post提交方式能够传输的容量基本上是无穷的,而且提交的数据直接在后台进行处理,保证了数据的安全性,而且在更新数据传输大量数据、传输音频图片或者特殊符号等情况时,就只能使用post,而非get。 通常情况下,我们会取消Form表单的自动提交功能,通过一个onsubmit属性赋值为return false。
全栈程序员站长
2022/11/08
5K0
JavaScript表单提交
git 提交 不用输入用户名、密码的方法(GIT免密提交)
版权声明:这可是本菇凉辛辛苦苦原创的,转载请一定带上我家地址,不要忘记了哈 . https://blog.csdn.net/u011314442/article/details/90264211
微风-- 轻许--
2019/05/25
11.9K0
python表单提交
python写爬虫模拟表单提交的库其实有很多,我使用的是Requests库进行简单的表单提交。
py3study
2020/01/07
4.7K0
点击加载更多

相似问题

即使输入无效,表单也会提交

217

即使使用相同的代码,也不会显示相同的按钮

110

即使在表单提交之后也显示相同的页面。

10

If语句即使在用户输入之后也不会运行

323

即使输入元素为空,HTML表单也会提交

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文