我无法返回MySQL数据

时间:2011-02-14 23:59:06

标签: php mysql ajax

这是我的JS代码:

$.ajax({
            url: 'login.php',
            type: 'POST',
            data: {
            loginName:  $("#loginName").val(),
            loginPass:  $("#loginPass").val()
            },
            dataType: 'json', 
            success: function(data){
                if(data.success){
                    $("#Message").fadeIn(function(){
                        $(this).html(data.message);
                    });
                }
                else
                {
                    $("#Message").fadeIn(function(){
                        $(this).html(data.message);
                    });
                }
            }
        });

这是PHP:

<?php
$data = array();
$data['success'] = true;
$data['message'] = "Here is the message";
echo json_encode($data);
?>

如果我有这个可以,但如果我编辑php文件:

<?
    include "db.php";
    $data = array();
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        if($_POST['loginName'] == "" && $_POST['loginPass'] == "")
        {
            @$v = mysql_query("SELECT * FROM users WHERE name LIKE '$registerName'");
            @$p = mysql_num_rows($v);
            if ($p == 0){
                @$v = mysql_query("INSERT INTO users VALUES('','$registerName','$registerPass')");
                $data['message'] = "Byly jste úspěšně zaregistrováni.";
                $data['success'] = true;
            }
            else
            {
                $data['message'] = "Tento uživatel je tu již zaregistrován.";
                $data['success'] = false;
            }

        echo json_encode($data);
    }
?>

ajax什么都不做......它只是发送数据但没有任何警报...... :( 我控制这个mysql事件及其作品,如果我只使用PHP ...

2 个答案:

答案 0 :(得分:1)

你为什么要犯错误?它甚至没有正确完成:

@$v = mysql_query("SELECT * FROM users WHERE name LIKE '$registerName'");

首先,在任务中压制错误毫无意义 - 任务总是会成功。将@放在另一边也是没用的。如果查询爆炸了你,你绝对没有任何迹象。你根本不检查它是否失败了。代码应该是:

$result = mysql_query(...);
if ($result === FALSE) {
    die(mysql_error());
}

您是否检查过您的POST数据是否正常通过?现在看来,如果这两个POST字段都没有设置,那么你的ajax响应块就会被完全绕过,脚本就不会输出任何内容。

答案 1 :(得分:1)

首先,我想欢迎回到Bobby Tables

现在开始营业,仔细查看以下代码行:

if($_POST['loginName'] == "" && $_POST['loginPass'] == "")

在议程上接下来,您的错误抑制不正确,您应该使用配置文件中的error_reporting来控制错误,并使用error_handler记录应用程序的错误。

您还应该注意,如果满足某些条件,您只会回复结果,我会建议您回答,无论使用什么数据或发布方法,都会为每种可能性提供错误消息,因为在开发阶段这会产生一些问题更容易。

这就是我编写代码的方式:

include "db.php"; //error_reporting(0);
$data = array();
$user_info = array_map("mysql_real_escape_string",$_POST);

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(!empty($user_info['loginName']) && !empty($user_info['loginPass']))
    {
        $v = mysql_query(sprintf("SELECT * FROM users WHERE name LIKE '%s'",$user_info['loginName']));

        if(mysql_num_rows($v) > 0)
        {
            //Update Here
            //Output Success here/ json_encode
            exit;
        }
    }
}
//Output Error here/ json_encode