在PHP中返回JSON消息

时间:2017-05-11 13:03:10

标签: php mysql json

我编写了一个PHP脚本来连接MySQL数据库并提取一些信息。我知道大部分脚本都在工作,因为它实际上在表中插入了一个MAC地址(当数据库表中的MAC地址值为NULL时,应该这样做)。

但是,我脚本生成的消息是" 未找到许可证(3)"。

我的问题是,如果它插入MAC地址,它如何返回此消息?只有在else返回false时才会输入if (mysqli_num_rows($result) > 0)语句。

我想要的是检查MAC地址(如果数据库中为NULL则插入),并返回消息"许可"。

为嵌套的if/else语句道歉。

<?php

// Array for JSON response.
$response = array();

require_once __DIR__ . '/db_connect.php';
$db = new DB_CONNECT();

// Check for GET data.
if (isset($_GET["LicenseKey"]) 
        && isset($_GET["SoftwareId"]) 
        && isset($_GET["MacAddress"])) {

    $licenseKey = $_GET['LicenseKey'];
    $softwareId = $_GET['SoftwareId'];
    $macAddress = $_GET['MacAddress'];

    // Import database connection variables.
    require_once __DIR__ . '/get_license_SQL.php';

    $query = SQL_GET_LICENSE;
    $query = str_replace("%1", $softwareId, $query);
    $query = str_replace("%2", $licenseKey, $query);

    $result = mysqli_query($db->connect(), $query);

    if (!empty($result)) {
        // Check for empty result.
        if (mysqli_num_rows($result) > 0) {
            // Get the result.
            $result = mysqli_fetch_array($result);
            $license = array();
            $license["ExpiryDate"] = $result["ExpiryDate"];

            // Check if MAC address exists.
            $query = SQL_GET_MAC_ADDRESS;
            $query = str_replace("%1", $licenseKey, $query);
            $result = mysqli_query($db->connect(), $query);

            if (!empty($result)) {
                $result = mysqli_fetch_array($result);
                echo json_encode($result);

                if ($result["MacAddress"] == $macAddress
                        || $result["MacAddress"] == NULL) {

                    // Device MAC address matches MAC address on record. 
                    $response["success"] = 1;
                    $response["license"] = array();

                    if ($result["MacAddress"] == NULL) {    
                        // Insert new MAC address into the database.
                        $query = SQL_INSERT_MAC_ADDRESS;
                        $query = str_replace("%1", $macAddress, $query);
                        $query = str_replace("%2", $licenseKey, $query);                
                        mysqli_query($db->connect(), $query);
                    }

                    // Add MAC address to license array.
                    $license["MacAddress"] = $result["MacAddress"];
                    $response["message"] = "Licensed";
                    array_push($response["license"], $license);
                    echo json_encode($response);    
                } else {
                    $response["success"] = 0;
                    $response["message"] = "License has already been used by another device";
                    echo json_encode($response);
                }
            } else {
                $response["success"] = 0;
                $response["message"] = "No license found (2)";
                array_push($response["license"], $license);
                echo json_encode($response);
            }           
        } else {
            $response["success"] = 0;
            $response["message"] = "No license found (3)";
            array_push($response["license"], $license);
            echo json_encode($response);
        }
    } else {
        $response["success"] = 0;
        $response["message"] = "No license found (4)";
        echo json_encode($response);
    }
} else {
    $response["success"] = 0;
    $response["message"] = "Required field(s) missing";
    echo json_encode($response);
}
?>

db_connect.php:

<?php

class DB_CONNECT {

    function __construct() {
        $this->connect();
    }

    function connect() {
        require_once __DIR__ . '/db_config.php';
        $con = mysqli_connect(DB_SERVER,DB_USER,DB_PASSWORD,DB_DATABASE);
        $db = mysqli_select_db($con, DB_DATABASE) or die(mysqli_error()) or die(mysqli_error());
        return $con;
    }
}
?>

get_license_SQL.php:

<?php
define('SQL_GET_LICENSE', "SELECT licenses.ExpiryDate
        FROM licenses
        WHERE licenses.SoftwareId=%1 AND licenses.LicenseKey=%2");

define('SQL_GET_MAC_ADDRESS', "SELECT licenses.MacAddress
        FROM licenses
        WHERE licenses.LicenseKey=%1");

define('SQL_INSERT_MAC_ADDRESS', "UPDATE licenses 
        SET MacAddress=%1 
        WHERE licenses.LicenseKey=%2");
?>

1 个答案:

答案 0 :(得分:0)

请查看以下代码行

belongs_to :user, optional: true

您正在运行以下查询,但在数据库中插入后,您不会将结果存储在变量中:         mysqli_query($ db-&gt; connect(),$ query);

在以下行中,$ result数组具有数据库中的旧值,这些值是在插入之前获取的。请尝试将值存储在变量中,并在插入后使用该变量。          $ license [&#34; MacAddress&#34;] = $ result [&#34; MacAddress&#34;];