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


POST - 500 (internal server error )

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

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

POSThttps://xxxxxxxxxxxxx/xxxxxxxxxxx/php/control/LoginControl.php500(内部服务器错误)

这是我的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,这可能是个问题。

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

下面是对脚本的编辑。也许类似的事情会有所帮助。

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示例

我希望这能帮助