AJax/PHP登录表单-Mysql数据库[Jquery Mobile]


AJax/PHP Login Form - Mysql Database [Jquery Mobile]

我在提交AJAX/PHP表单时遇到问题。

我的ajax如下:

<script type="text/javascript">
        $('#loginForm').submit(function() {
           checkLogin();
        });
        function checkLogin()
        {
             $.ajax({
                url: "login.php",
                type: "POST",
                data: {
                    username: $("#username").val(),
                    password: $("#password").val()
                },
                success: function(response)
                {
                    if(response == 'true')
                    {
                        window.location.replace("main.html");
                    }
                    else
                    {
                        $("#errorMessage").html(response);
                    }
                }
            });
        }
        </script>

我的表格:

<form id="loginForm" data-ajax="false">
    <label id="errorMessage"></label>
    <div data-role="fieldcontain">
        <label for="username">Username:</label>
        <input id="username" type="text" placeholder="Username" />
    </div><!-- End Contained Fields -->
    <div data-role="fieldcontain">
        <label for="password">Password:</label>
        <input id="password" type="password" placeholder="Password" />
    </div><!-- End Contained Fields -->
    <div data-role="fieldcontain">
        <input type="submit" id="login" value="Login" />
    </div><!-- End Contained Fields -->
    </form><!-- End Form -->

然后是我的login.php脚本:

    <?php
$username = mysql_real_escape_string($_POST['username']);
$password = md5(mysql_real_escape_string($_POST['password']));
if(!empty($username) && !empty($password))
{
    $db = new PDO('mysql:host=localhost;dbname=mobile;charset=utf8', 'root', 'password');
    try {
        $stmt = $db->query("SELECT COUNT(*) FROM users WHERE username='$username' and password='$password'");
        if(intval($stmt->fetchColumn()) === 1)
        {
            echo 'true';
        }
        else
        {
            echo 'false';
        }
    } catch(PDOException $ex) {
        echo "An error has occured!";
    }
}
?>

我最初只使用原始php对整个JQuery Mobile应用程序进行编程,但最近发现我必须使用AJAX和Html才能使用PhoneGap将其移植到IOS和Android。

我对使用ajax相当陌生,并且已经阅读了尽可能多的文章/这里的主题,试图让它发挥作用。不确定我是遇到语法问题还是处理不正确。

我的本地机器正在加载一个mysql服务器(数据库名称是mobile,我试图加载的表是users)。我知道这个部分是正确的,因为它可以很好地使用php。

有人能解释一下我的问题吗?非常感谢。

this:

$("$errorMessage").html("Attempting to login...");

应该是:

$("#errorMessage").html("Attempting to login...");

或者,如果您以前定义过$errorMessage变量,如下所示:

var $errorMessage = $("#errorMessage");

应该是:

$errorMessage.html("Attempting to login...");

编辑:

PHP手册:"对于大多数数据库,PDOStatement::rowCount()不会返回受SELECT语句影响的行数……"

你可以试试:

....
$stmt = $db->query("SELECT COUNT(*) FROM users WHERE username='$username' and password='$password'");
if (intval($stmt->fetchColumn()) === 1) {   //make sure it's not a string 
  echo 'true';
    $_SESSION['username'] = $username;
   // OR perform another SELECT query to retrieve the data 
}
else
{
    echo 'false';
}
.....

问题是这一行:

 window.location.replace('main.html'); 

更改为:

 window.location.href='main.html';