如何从php文件中检索错误消息到另一个php文件?

时间:2016-07-31 23:22:10

标签: php jquery mysql ajax

我是ajax的新手,这是我第一次尝试使用它。

我要做的是创建一个小型系统,在不更新页面的情况下向数据库注册电子邮件和密码,它工作得很好!

但是,正如您将注意到我的'register.php'文件,有条件不允许重复的电子邮件,以及PDOException以防止错误......所以,我该如何发送消息(警报或什么)到我的索引页面,以防它们发生?

这是我的.js文件:

$(document).ready(function(){

    $("#btnRegister").click(function(){

        $.ajax({
            type: 'post',
            url: 'register.php',
            data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() }
        }).done(function(){
            $("#frmEmail").val('');
            $("#frmPassword").val('');
            $("#frmEmail").focus();
        });
    });
});

我的'register.php'文件:

<?php

    try
    {
        $handler = new PDO('mysql:host=127.0.0.1;dbname=register', 'root', '');
        $handler -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        $email = $_POST['txtEmail'];
        $password = $_POST['txtPassword'];

        $sql = "SELECT email FROM users WHERE email = ?";
        $query = $handler -> prepare($sql);
        $query -> bindValue(1, $email);
        $query -> execute();

        if(($query -> rowCount()) != 0)
            die("Error: the inserted email already exists.");
        else
        {
            $sql = "INSERT INTO users (email, pass) VALUES (?, ?)";
            $query = $handler -> prepare($sql);
            $query -> bindValue(1, $email);
            $query -> bindValue(2, $password);
            $query -> execute();
        }
    }
    catch(PDOException $ex)
    {
        die("Error: " . $ex -> getMessage());
    }

?>

2 个答案:

答案 0 :(得分:0)

您需要做的就是将所有die();更改为echo "";,这样就不会杀死PHP部分,而是将消息返回到索引文件。接下来只需将您的jQuery脚本更改为:

$(document).ready(function(){

    $("#btnRegister").click(function(){

        $.ajax({
            type: 'post',
            url: 'register.php',
            data: { txtEmail: $("#frmEmail").val(), txtPassword: $("#frmPassword").val() }
        }).done(function(msg){
            if(msg != ''){
                alert(msg);
            }
            $("#frmEmail").val('');
            $("#frmPassword").val('');
            $("#frmEmail").focus();
        });
    });
});

答案 1 :(得分:0)

通常,您的PHP文件会返回一个响应,指示注册成功或失败。

在PHP文件中,当出现错误时,应该返回包含错误消息的json编码数组,而不是die,例如:

if(($query -> rowCount()) != 0)
    echo json_encode(array('error' => "Error: the inserted email already exists."));
    exit;
else

然后在您的javascript的done函数中,您可以检查此消息:

}).done(function(data){
    if (data.error) {
        alert(data.error); // or do something else
    } else {
        // every thing looks ok, do your thing
    }
});

我建议始终从php返回某些内容,无论是上面的错误消息,还是只是json_encode(array('success' => true));。这样,您可以确定请求实际上已经完成了预期的操作,并且没有为另一个(坏)原因返回空白页。

注意:如果您在解决此问题时遇到问题,可能需要将dataType: 'json'添加到您的ajax选项(type: 'post'下)