【问题标题】:My php file does not return all values in JSON form我的 php 文件不以 JSON 形式返回所有值
【发布时间】:2016-02-13 13:08:20
【问题描述】:

所以我有一个数据库,我编写了一个php 文件,该文件将值插入table,然后返回此table 中的所有值。

但是,我的代码只返回表中的一个随机值,而不是全部。我不知道为什么,但这是我的代码:

<?php
include_once "init.php";

if(!empty($_POST['names'])){
    $contactname = $_POST['names'];

    $query = "INSERT INTO contacts (contactID, names) 
                VALUES('NULL', ?)";
    $results = $conn -> prepare($query);
    $results->bind_param('s', $contactname);
    $results->execute();
    $results->close();
    echo json_encode("Success"); 

    $query_two = "SELECT names FROM contacts";
    $result = mysqli_query($conn, $query_two);
    $response = array();

    if(mysqli_num_rows($result)){
        while($row = mysqli_fetch_assoc($result)){
            $response["names"][] = $row["names"];
        }
    }
    echo json_encode($response);
}
else{
    echo json_encode("Something went wrong");
}

?>

编辑:谢谢你们这么快为我提供解决方案!我修复了它,它可以工作,但第一个 echo json_encode("Success"); 没有被执行。

【问题讨论】:

  • 您正在覆盖循环中的$response["names"]。你应该使用$response["names"][]$response[]["names"] 之类的东西。现在你只得到最后一行的值。

标签: php mysql json post


【解决方案1】:

在你这里:

$response["names"] = $row["names"];

您正在替换 $response["names"] 的值。相反,请尝试将其添加到数组中:

$response = array("names" => array());

if(mysqli_num_rows($result)){
    while($row = mysqli_fetch_assoc($result)){
        $response["names"][] = $row["names"];
    }
}

要使用一个 JSON 对象,您需要在顶部初始化 $response 并根据需要更改值。

<?php
include_once "init.php";

$response = ['success' => false, 'message' => null, 'names' => []];

if(empty($_POST['names'])) {
    $response['message'] = 'No names were provided in the request';

} else {
    $contactname = $_POST['names'];

    $query = "INSERT INTO contacts (contactID, names) VALUES('NULL', ?)";
    $results = $conn->prepare($query);
    $results->bind_param('s', $contactname);
    $results->execute();
    $results->close();

    $response['success'] = true;

    $query_two = "SELECT names FROM contacts";
    $result = mysqli_query($conn, $query_two);

    if(mysqli_num_rows($result)){
        while($row = mysqli_fetch_assoc($result)){
            $response['names'][] = $row['names'];
        }
    }

}

echo json_encode($response);

【讨论】:

  • 天啊哇。我可以发誓我以前做过类似的事情,但没有奏效。它现在可以工作了,但是哇[]!无论如何,我会投票并接受这个答案。感谢您的迅速回复。顺便问一下,为什么第一个echo json_encode("Success)" 没有被执行?我也想看看第一行
  • 为什么不 $response['success'] = true; 将您的响应作为一个 json 对象。
  • 老实说,我没有理由不打印它,但是如果通过 AJAX 调用此代码,打印“成功”可能会混淆响应的解释方式。在这种情况下,我建议在开始时初始化 $response 并从中构建 JSON 对象(正如 @Progrock 建议的那样)
猜你喜欢
  • 2019-09-18
  • 2015-10-19
  • 1970-01-01
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2016-02-05
  • 2014-04-29
相关资源
最近更新 更多