POST - 500(内部服务器错误)

时间:2015-02-25 04:09:42

标签: php jquery post ssl

在我的情况下,我使用JQuery和PHP通过$.post发送 POST 请求。

但是我在发布数据时遇到了这个错误。

POST https://xxxxxxxxxxxxx/xxxxxxxxxxx/php/control/LoginControl.php 500(内部服务器错误)

这是我的jquery代码:

var url = 'php/control/LoginControl.php';
        $.post(url,
    {
                task : "login_verify",
                username:_username ,
                password:_user_password,
    })
        .error(function(er){
            console.log(er);
        })
        .success(
                function(data){
                    if(data == true){
                        window.location = 'index.php';
                    }else{
                        $("#user_password" ).css({border:'1px solid red'});
                    }
                }
        );

PHP - LoginControl.php

<?php 
try{
    if(isset($_POST) && $_POST['task'] == 'login_verify'){
        $user_name = $_POST['username'];
        $password = md5($_POST['password']);

        require '../class/login.php';
        if(class_exists('Login')){
            $user = Login::verifyCredentials($user_name,$password);
            if($user != NULL){
                if(isset($_SESSION)){
                    session_destroy();
                }
                session_start();
                $_SESSION['uid'] = $user[0]->ADMIN_ID;
                echo true;
            }else{
                echo false;
            }
        }
    }
}  catch (Exception $ex){
    echo $ex;
}
?> 

注意:我在实时测试服务器上成功部署了此代码。它完全正常工作。但在新服务器上我收到此错误。我在这台新服务器上使用 SSL ,这可能是个问题。

如果信息不足,请评论。 请帮忙。

1 个答案:

答案 0 :(得分:0)

这是对脚本的编辑。也许某些事情会有所帮助。

JS:

 $(function()
 {
    var url = 'php/control/LoginControl.php';
    $.post(url, {
        task: "login_verify",
        username: _username,
        password: _password
    }, function(data, status, xhr)
    {
        // success
        if(data.error===false)
            window.location = 'index.php';
        else
            $("#user_password").css({border: '1px solid #ff0000'});
    }).error(function(xhr, status, error)
    {
        console.log("Error loading page. Status: "+status+" | Error: "+error);
    });
 });

PHP:

 <?php
 // Session must be started before session checking and destroying can happen
 session_start();

 // Set error true by default
 // Error is always returned.
 // If no error, it'll be set to false in if statement
 // So a value will always be returned.
 $return['error'] = true;

 if(isset($_POST) && $_POST['task'] == 'login_verify')
 {
    require_once __DIR__.'/../class.login.php';
    if(class_exists('Login'))
    {
        $uname = $_POST['username'];
        $passwd = $_POST['password'];
        $user = Login::verifyCredentials($uname, $passwd);
        if(!empty($user))
        {
            if(isset($_SESSION))
                session_destroy();

            $_SESSION['uid'] = $user[0]->ADMIN_ID;
        }
        else
            $return['error'] = false;
    }
 }

 echo @json_encode($return);

我在PHP脚本中注意到我在编辑中更正的一件事是,当没有会话打开时,你正在使用$ _SESSION和session_destroy()。您必须先定义session_start(),然后才能使用任何会话方法或魔术变量。这就是我把它放在PHP脚本顶端的原因。

另外,如果你想使用另一种数据类型而不是json,最简单的方法就是使用$ .ajax()函数

 var loginData = {
    username: _username,
    password: _password,
    task: 'login_verify'
 };

 $.ajax({
    url: url,
    type: 'post',
    data: loginData,
    dataType: 'html',
    success: function(data, status, xhr)
    {
        // If page loading was a success. i.e. 200 OK status message
    },
    error: function(xhr, status, error)
    {
        // error. Status other than 200
    }
 });

=============================================== ======================= 编辑:新代码 看看这个,看看这是否有帮助。

PHP:

 <?php
 $return['error'] = true;

 if(isset($_POST) && $_POST['task'] == 'login_verify')
 {
    if(!empty($_POST['formData']['username']))
    {
        if(!empty($_POST['formData']['password']))
        {
            $return['error'] = false;
            $message = "The AJAX call was successfull! The data passed is listed below.\n\n"
                . "task: " . $_POST['task'] . "\n"
                . "username: " . $_POST['formData']['username'] . "\n"
                . "password: " . $_POST['formData']['password'];

            $return['message'] = $message;
        }
        else
            $return['message'] = 'Password is empty!';
    }
    else
        $return['message'] = 'Username is empty!';
 }
 else
 {
    $return['message'] = 'Invalid request! ' . $json->task;
 }

 echo @json_encode($return);

JavaScript的:

 $(function()
 {
    $("#login").click(function()
    {
        var jdata = {
            task: 'login_verify',
            formData: {
                username: $("#username").val(),
                password: $("#password").val()
            }
        }

        $.ajax({
            url: 'login.php',
            type: 'post',
            dataType: 'json',
            data: jdata,
            cache: false,
            success: function(data, status, xhr)
            {
                var dataStatus = (data.error===true) ? "Error" : "Success";
                var message = "Status: " + dataStatus + "\n"
                    + data.message;

                alert(message);
            },
            error: function(xhr, status, error)
            {
                alert('Error: ' + error);
            }
        });

        return false;
    });
 });

此代码有效。我有一个现场版本。确切的代码和所有。 AJAX/PHP Example

我希望这会有所帮助