JQuery,Ajax,PHP发布错误500(内部服务器错误)

时间:2017-02-09 17:20:35

标签: javascript php jquery json ajax

我使用ajax向PHP发布数据,这段代码在本地服务器上工作正常(即时使用XAMPP),但是当我将其上传到网络服务器时,它没有收集数据并向我显示此错误

  

POST http://my_server_IP/login.php 500(内部服务器错误)

如果我将dataType从 json 更改为 application / json 并添加 contentType:'application / json;字符集= UTF-8' ,

然后是另一个错误

  

POST http://my_server_IP/login.php 500(内部服务器错误)

但在本地机器上工作正常,我可以用相同的代码登录

这是我的JQuery,AJAX代码

$.ajax({
  dataType: "json",
  type: "POST",
  data: {user: sEmail, pass: sPass},
  url: "login.php",
  success:function(response){
    var a = response;
    if(a.res=='agree'){
      var st = a.role+","+a.name;
      $.cookie("imgup", st, { path: '/imgup', expires: 2 });
      window.location.href = "logged.php";
    }else if (a.res == 'error') {
      errorDisplay(a.error);
    }
  }
});

这是PHP

<?php
header('Content-Type: application/json');
require_once('inc/init.php');
require_once "helper/helper.php";
$email = sanitize($_POST['user']);
$pass = sanitize($_POST['pass']);

$sql_query = $db->query("SELECT * FROM `user_admin` WHERE `username`='$email'");
if(mysqli_num_rows($sql_query) > 0){
    $sql = mysqli_fetch_assoc($sql_query);
  if(password_verify($pass, $sql['password'])){
    $role = explode(',',$sql['role']);
    if(in_array("admin", $role)){
            echo json_encode(array('res' => 'agree', 'role' => 'admin','name' => $sql['id']));
    }elseif(in_array("editor", $role)){
        echo json_encode(array('res' => 'agree', 'role' => 'editor','name' => $sql['id']));
    }elseif(in_array("user", $role)){
        echo json_encode(array('res' => 'agree', 'role' => 'user','name' => $sql['id']));
    }
  }else{
    echo json_encode(array('res' => 'error', 'error' => 'user_pass'));
  }
}else{
    echo json_encode(array('res' => 'error', 'error' => 'user_not_exist'));
}
?>

错误日志

PHP致命错误:在第11行的/var/www/html/login.php中调用未定义的函数password_verify(),参考资料:http://__my_IP__/login_page.php

但是这个功能在localhost中工作正常!!!

我该如何修复此错误?

注意: sanitize是检查字符串中存在的html实体的函数

4 个答案:

答案 0 :(得分:1)

phpinfo()置于PHP代码之上,并在托管服务器上直接运行(而不是通过AJAX)。如果您在浏览器屏幕上看到的PHP版本低于5.5.0 - 请让您的主机升级它或使用其他逻辑进行密码检查。

答案 1 :(得分:0)

导致此错误,因为我有一个旧版本的PHP(v5.4),将我的PHP版本更新为5.6并解决了问题!

password_verify()并在 v5.5.0 之后添加了一些其他功能,

确保你的PHP版本是5.5+然后这些功能正常工作:)

答案 2 :(得分:0)

如果您对数组完成了json_encode(),则它适用于localhost。
如果您在实时服务器上,则应删除header("Content Type","application/json");以使其正常工作。
我已经尝试并搜索了很多东西,但这最终对我有用。

答案 3 :(得分:0)

您的PHP版本似乎不支持password_verify函数。有关更多信息,您可以看一下PHP手册:

https://www.php.net/manual/en/function.password-verify.php

主要来源:https://www.php.net