【问题标题】:check if email already exists in database jquery +php检查数据库中是否已存在电子邮件 jquery + php
【发布时间】:2013-06-08 20:50:46
【问题描述】:

您好,我正在尝试验证注册表单中的电子邮件地址。我想检查该地址是否存在于数据库中;

我有以下功能:

function validateEmailRepeat(){
        // check if email exists in the database;
             var emailVal = $('#email').val();
             // assuming this is a input text field

            $.post('check_email.php', {'email' : emailVal}, function(data) {
                    if(data==1) 
                        {
                        email.addClass("error");
                        emailInfo.text("Adress exists");
                        emailInfo.addClass("error");
                        dataExist=1;
                            }

                    else {

                        email.removeClass("error");
                        emailInfo.text("Valid adress");
                        emailInfo.removeClass("error");
                        dataExist=0;
                            }
                        });

                        if(dataExist==1)
                         return false;
                         else
                         return true;

                    }

check_email.php 看起来像这样:

require_once('db.php');

if (isset($_POST['email'])){
$email=mysqli_real_escape_string($con,$_POST['email']);
$sql = "SELECT * FROM users WHERE `username`='".$email."'";
$select=mysqli_query($con,$sql) or die("fail");
$row = mysqli_num_rows($select);

if ($row >0) {

    echo 1;
}else echo 0 ;

}
else
echo "post error";

我是新手。所以不要太强硬。提前致谢。

乐:对不起!我忘记了问题... 问题是,如果我在函数形式 $.post 之外定义 var dataExist,我的函数将返回 true 如果我让它现在在函数中,我会得到“dataExist is not defined”错误并返回true

Le:PHP 以我想要的方式返回预期的 1 和 0..

乐: 似乎定义了

var dataExist=0;

在函数validateEmailRepeat() 之外解决了这个问题。

如果还有其他更优雅的方法,请告诉我,因为这对我来说似乎有点愚蠢。

【问题讨论】:

  • 你已经告诉我们你在做什么,但这里的问题是什么?
  • 请注意:johndoe@gmail.com、john.doe@gmail.com、John.Doe@gmail.com、johndoe@gmail.com 等。都是同一个电子邮件
  • 你忘了问一个问题。您编写的代码是否存在一些明显的问题?它的行为不符合预期吗?有错误吗?您通过什么方式寻求帮助?
  • +1 用于简单地使用mysqli。您仍然对 SQL 注入持开放态度,应该查看 prepared statements,但是通过使用 mysqli,您比我查看的 90% 的其他问题做得更好在这个网站上。继续努力,并考虑使用 prepared statements
  • 谢谢!我肯定会很快!

标签: php jquery database email


【解决方案1】:

问题是你不能将值返回到被调用的函数中,因为 ajax 是异步工作的。

                function validateEmailRepeat(){
                // check if email exists in the database;
                     var emailVal = $('#email').val();
                // assuming this is a input text field

                $.post('check_email.php', {'email' : emailVal}, function(data) {
                    if(data==1){
                        email.addClass("error");
                        emailInfo.text("Adress exists");
                        emailInfo.addClass("error");
                        dataExist=1;
                    }else{
                        email.removeClass("error");
                        emailInfo.text("Valid adress");
                        emailInfo.removeClass("error");
                        dataExist=0;
                    }
                        $('#some_input').val(dataExist);
                        validateUserName();
                    });
                }

                function validateUserName() {
                    var input =  $('#some_input').val();
                    if (input) {
                       alert("This username is already taken");// whatever
                    } else {
                         // whatever
                    }

                };

【讨论】:

  • 这比我所做的要好,为什么?它确实看起来更好,但为什么它比全局声明变量 dataExist 更好?
  • 问题是:不能在ajax请求之外获取dataExist的值,原因是回调函数“validateUserName();”现在我为此更改: ValidateUserName(dataExist);在回调和函数如下:function ValidateUserName(xxx){if (xxx){alert('already take')}else{//whatever}} 对不起,我的英国人......祝你好运
  • 感谢您的帮助和您的时间来解释。我明白了
【解决方案2】:

您正在将用户名与电子邮件地址进行比较。这就是您的数据库的工作方式吗?

$sql = "SELECT * FROM users WHERE username='".$email."'";

我敢打赌,您的数据库中有一个用于电子邮件本身的字段,否则我建议您这样做。查询应如下所示:

$sql = "SELECT * FROM users WHERE email = '".$email."'";

列不带单引号。

【讨论】:

  • php 代码运行良好。在数据库中 username=email.. 问题出在函数上。当在数据库中找到电子邮件时,我无法让它返回 false
猜你喜欢
  • 2019-09-17
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2014-05-10
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多