【问题标题】:No JSON response from PHPPHP 没有 JSON 响应
【发布时间】:2017-04-14 18:16:28
【问题描述】:

我有一个 JSON POST 请求作为移动设备登录应用程序的一部分发送到 index.php。我使用的是旧脚本,所以我认为问题在于 PHP 的语法已被弃用,因为我的响应 JSON 是空的。下面的 $user 没有做任何事情,因为我只是在调试。

index.php

if (isset($_POST['tag']) && $_POST['tag'] != '') {

// get tag
$tag = $_POST['tag'];

// include db handler
require_once 'include/DB_Functions.php';
$db = new DB_Functions();

// response Array
//$response = array('tag' => $tag, 'error' => FALSE);

// check for tag type
if ($tag == 'login') {

    $id = $_POST['id'];
    $password = $_POST['password'];
    $user_type = $POST['user'];


// test data
    $response = array('tag' => $tag, 'error' => FALSE, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

    // check for user
    $user = $db->getUserByIdAndPassword($user_type, $id, $password);
        echo json_encode($response);
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "Required parameter 'tag' is missing!";
    echo json_encode($response);
}

查询在这个类中运行,这是我怀疑我出错的地方。

DB_Functions.php

class DB_Functions {

private $db;

// constructor
function __construct() {
    require_once 'DB_Connect.php';
    // connecting to database
    $this->db = new DB_Connect();
    $this->db->connect();

// destructor
function __destruct() {

}


/**
 * Get user by id and password
 */
public function getUserByIdAndPassword($user_type, $id, $password) {
    $t = 'T';
    if ($user_type !== $t) {
        $result = mysqli_query("SELECT * FROM smiths WHERE id = '$id'") or die(mysqli_error());
    } else {
        $result = mysqli_query("SELECT * FROM traders WHERE id = '$id'") or die(mysqli_error());
    }
    // check for result 
    $no_of_rows = mysqli_num_rows($result);
    if ($no_of_rows > 0) {
        $result = mysqli_fetch_array($result);
        $retrieved_password = $result['password'];
        // check for password equality
        if ($retrieved_password == $password) {
            return $result;
        }
    } else {
        // user not found
        return false;
    }
}

}

最后这个类管理 msql 连接,我想我需要这里的 $con 用于前面的 mysqli_query?我不知道怎么称呼它。

DB_Connect.php

class DB_Connect {

// constructor
function __construct() {

}

// destructor
function __destruct() {
    // $this->close();
}

// Connecting to database
public function connect() {
    require_once 'include/Config.php';
    // connecting to mysql
    $con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);
    // Check connection
    if (!$con)
      {
        die("Connection error: " . mysqli_connect_error());
      }
    // selecting database
    mysqli_select_db($con, DB_DATABASE) or die(mysqli_connect_error());

    // return database handler
    return $con;
}

// Closing database connection
public function close() {
    mysqli_close();
}

}

谁能帮我确定正确的方向? JSON 响应返回错误;

W/System.err: org.json.JSONException: 在字符 0 处输入结束

[编辑]

好的,所以我从 DB_Connect.php 中取出以下几行并将它们放入 DB_Functions.php 中的方法中。

$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysqli_select_db($con, DB_DATABASE) or die(mysqli_connect_error());

这让我可以修复 msqli_query 的语法;

$result = mysqli_query($con, "SELECT * FROM smiths WHERE id = '$id'") or die(mysqli_error());

这已经解决了我的问题,但它可能看起来很老套/混乱。

【问题讨论】:

  • 您的代码容易受到SQL injection attacks 的攻击。您应该使用mysqliPDO 带有绑定参数的预准备语句,如this post 中所述。
  • if ($retrieved_password == $password) { - 如果密码错误,index.php 根本不会返回/回显任何内容(正如@AlexHowansky 所写的那样,您的网站可能有一天会因当前实施而被黑)
  • 您的代码暗示您没有加密数据库中的密码。这非常危险!阅读password_hash() 并对其进行加密以防您的数据库泄漏
  • @DarkMalice if ($tag != 'login') { 然后你做$response["error"] = TRUE; ... 但你没有先将它声明为一个数组,所以你应该先添加$response = array()
  • 你写了 $user_type = $POST['user'];而正确的语法是 $_POST (就像您使用的其他变量一样)

标签: php json


【解决方案1】:

我从 DB_Connect.php 中取出以下几行并将它们放入 DB_Functions.php 中的“getUserByIdAndPassword”方法中。

$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysqli_select_db($con, DB_DATABASE) or die(mysqli_connect_error());

这让我可以修复 msqli_query 的语法;

$result = mysqli_query($con, "SELECT * FROM smiths WHERE id = '$id'") or die(mysqli_error())

而这些孩子就是为什么你不像某些科学怪人疯子那样使用已弃用的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多