你能有一个设置为 PHP $_POST 的变量吗?


Can you have a PHP $_POST variable that is set to an array?

我正在使用AJAX将一些数据放入我的数据库中。我正在使用JSON将数据提交到PHP页面。我正在使用开机自检请求。您可以将其中一个 POST 变量设置为数组吗?下面我有完整的 AJAX 请求,但这是我将数据的两个部分设置为数组的部分:

"content[]" : testContentArray,
"content_attr[]" : testContentAttributes,

以下是我的完整AJAX(使用jQuery(:

$.ajax({
                type: "POST",
                url: "../includes/create_test_main.ajax.php",
                data:   {"tags" : $('#testTags').val(),
                                         "title" : $('#testTitle').val(),
                                         "subject" : $('#testSubject').val(),
                                         "description" : $('#testDescription').val(),
                                         "content[]" : testContentArray,
                                         "content_attr[]" : testContentAttributes,
                                         "user_id" : user_id},
                success: 
                                     function(testId) {//redirect Page
                                        window.location.href = "http://localhost/nvr_forget/public_html/test/" + testId + "/";
                                     }
            });
        };

如果这是这样做的方法,我将如何在 PHP 端处理它? 我是否将 $_POST 变量作为普通数组处理?

当你将

data对象中的数组传递给$.ajax时,它被解析为name[]=value格式。 这是使用 $.param 完成的,所以我将使用它进行说明:

jQuery.param({'foo': [1, 2, 5]})
// "foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=5"

%5B%5D是 URI 编码的方括号。 这是将同一密钥的多个值发送到服务器的常用方法。 PHP 将其解析为数组,因此在这种情况下:

var_export($_POST['foo']);
// array ('1', '2', '5')

因此,在您的代码中,$_POST['content']$_POST['content_attr'] 都应该是数组。 您使用的方括号是不必要的,但不会破坏任何内容。

请参阅有关该主题的 PHP 手册。

当然可以 - 它可以是简单数组(以整数作为键(或关联数组。这只取决于您提交的 JSON 对象。

例如,如果您提交以下 JSON 对象:

var data = {
    'a': 'test123',
    'b': [
        'x',
        'y',
        'z'
    ],
    'c': {
        'testing': 'abc',
        'blah': 'qwerty'
    }
}

您将在$_POST中具有以下元素:

  • $_POST['a'] - 包含字符串test123
  • $_POST['b'] - 包含数组 ( array('x','y','z') (,
  • $_POST['c'] - 也包含数组,但关联(array('testing'=>'abc','blah'=>'qwerty')(,

你可以从JS(JSON(发布一个对象,并使用json_decode将其json_decode到服务器(PHP(上。

您可能可以这样做,但您必须像这样完全手动完成:

{
    "content[0]": "a",
    "content[1]": "b",
    "content[2]": "c",
    "content[multi][0]": "d"
}

然后,$_POST['content']将如下所示:

Array(
    0 => "a",
    1 => "b",
    2 => "c",
    multi => Array(
        0 => "d"
    )
)

只需:

{
    "blob" : JSON.stringify(data_or_array_or_whatever)
}

在 PHP 中,您可以通过以下方式检索它:

$data = json_decode($_POST['blob'], true);

不过,这需要旧版浏览器的 json2.js 库。

我会选择后者,因为在前者中,您最终可能会编写自己的序列化程序:P - 这正是我们有 JSON 的原因。