0

我需要通过 url 发布数据更新对象的 json 列表。例如,使用 url:

http://myweb.com/index.php?name=Peter&surname=Brown

在 php 中,使用 get 方法:

$name = $_GET["name"];
$surname = $_GET["surname"];
$json = array();

        $json["nombre"] = $name;
        $json["lat"] = $lat;
        $data[] = $json;

$json_end= json_encode($data);

并且 json_end 有效地完成了我想要的:

[{"name":"Peter","surname":"Brown"}]

我的问题是关于如何增加 json,以便构建一个数组,如:

[{"name":"Peter","surname":"Brown"}]
[{"name":"newname","surname":"newsurname"}]
// and so on

每次用户使用带有新参数的 url。

我需要写入文件还是数据库?任何提示将不胜感激。

这个想法是让任何用户都可以使用 url 添加一些 dat。我试图将 json 存储到一个字段中,但存储仅在当前会话期间是持久的。

4

3 回答 3

2

只需创建一个嵌套的用户数组:

$data = array (
    0 => array("name"=>"Peter","surname"=>"Brown"),
    1 => array("name"=>"newname","surname"=>"newsurname")
);

echo json_encode($data);

// [{"name":"Peter","surname":"Brown"},{"name":"newname","surname":"newsurname"}]
于 2012-06-26T15:34:22.897 回答
2
<?
/* This needs to be at the top of your file, without ANYTHING above it */
session_start();

/* ... */

if(!array_key_exists('entries', $_SESSION))
{
    $_SESSION['entries'] = array();
}

$_SESSION['entries'][] = array("name" => $_GET["name"], "surname" => $_GET["surname"]);

$json_string = json_encode($_SESSION['entries']);

这将产生一个 JSON。但是我不知道您是否有意,但您的输出是一系列单独的 JSON。您可以通过将上面的最后一行替换为:

$json_string = '';
foreach($_SESSION['entries'] as $entry){ 
    $json_string.= json_encode($entry) . "\n";
}

您可能还想要一种重置/清空阵列的方法。在这种情况下,我会更改 if 测试:

if(!array_key_exists('entries', $_SESSION))

到:

if(!array_key_exists('entries', $_SESSION) || array_key_exists('reset', $_GET))

您可以通过访问使用

http://myweb.com/index.php?reset

编辑:如果在某处添加以下代码:

foreach($_SESSION['entries'] as $id=>$entry){ 
    printf("%2d: %s\n", $id, json_encode($entry));
}

您将获得由它们各自的键枚举的 json 元素的列表。例如,它可能看起来像:

0: "[{\"姓名\":\"彼得\",\"姓\":\"布朗\"}]"
 1: "[{\"姓名\":\"新名字\",\"姓\":\"新姓\"}]"
 2: "[{\"姓名\":\"乔治\",\"姓\":\"华盛顿\"}]"
 3: "[{\"姓名\":\"约翰\",\"姓\":\"亚当斯\"}]"

如果您随后添加以下代码:

if(array_key_exists('del', $_GET) && is_numeric($_GET['del']))
{
    $key = (int)$_GET['del'];
    if(array_key_exists($key, $_SESSION['entries']))
    {
        unset($_SESSION['entries'][$key]);
    }
    else
    {
        printf('<strong>ERROR: $_GET['del'] = %d but $_SESSION['entries'][%d] doesn't exist.</strong>', $key, $key);
    }
}

您可以通过将 id 指定为delGET 参数来删除单个 json 条目。

例如,

http://myweb.com/index.php?del=2

将删除对应的条目'[{"name":"George","surname":"Washington"}]';

其余条目将是:

0: "[{\"姓名\":\"彼得\",\"姓\":\"布朗\"}]"
 1: "[{\"姓名\":\"新名字\",\"姓\":\"新姓\"}]"
 3: "[{\"姓名\":\"约翰\",\"姓\":\"亚当斯\"}]"
 4: "[{\"name\":\"Thomas\",\"surname\":\"Jefferson\"}]"
于 2012-06-26T15:39:46.877 回答
1

我认为将数据存储在会话中是最简单的,如下所示:

<?php
    session_start();

    if (isset($_GET['name'])) {
        $_SESSION['json'][] = $_GET;
    }

    echo json_encode($_SESSION['json']);
?>

编辑:您可能希望在将 $_GET 数组存储在会话中之前对其进行过滤,这样您就不会存储不应该存储的值。

编辑:当然,如果您想为多个会话保存这些数据,则需要使用文件或数据库(或者可能是 cookie)。这一切都取决于你想用这些信息做什么。

于 2012-06-26T15:38:30.233 回答