如何捕获$ _POST ['my_image']的所有输入名称?

时间:2017-08-31 20:07:44

标签: php

我有名称为my_image[url]my_image[caption]

的动态输入
<input name="my_image[url]" type="hidden" value="<?php echo $imgurl['url'];?>"/>
<input name="my_image[caption]" type="text" value="<?php echo $imgurl['caption'];?>">

即使在isset中动态插入多个图像和标题,$ _POST ['my_image']仅捕获1个图像1标题:

if (isset($_POST['my_image'])){ 
    update_option('imagens_inicio',array($_POST['my_image']);
    echo '<pre>'; var_dump($_POST['my_image']);echo '</pre>';
}

array(1) {
  [0]=>
  array(2) {
    ["url"]=>
    string(96) "http://localhost/theme/wp-content/uploads/2017/08/4e07dd2bd752b989e9b4687129982977.jpg"
    ["caption"]=>
    string(0) "test text"
  }
}

如何在isset中捕获$_POST['my_image']的所有图片和字幕?

解决:

$url = $_POST['url'];
$caption = $_POST['caption'];

$data = array_map(function ($url, $caption) {
        return compact('url', 'caption');
}, $url, $caption);

1 个答案:

答案 0 :(得分:1)

简而言之,只有isset不会得到你需要的结果。

由于my_image [url]将始终解析为$ _POST [&#39; my_image&#39;] [&#39; url&#39;],它确实会被覆盖。如果使用[] php会自动为每次出现增加一个数字,但在这种情况下,它不会将url和标题放在一起。

如果您想确保以您提供的方式接收数据,可以将输入字段命名为:

my_image[0][url]
my_image[0][caption]
my_image[1][url]
my_image[1][caption]
etc...

您还可以重新整形数据,例如:

url[]
caption[]
url[]
caption[]
etc

然后你可以使用一些处理来组合php中的数据:

<?php
$data = array_map(function ($url, $caption) {
    return compact('url', 'caption');
}, $_POST['url'], $_POST['caption']);

var_dump($data);

阅读值:

foreach ($data as $image) {
    echo $image['caption'].': '.$image['url'].PHP_EOL;
}

当然,这需要包含在isset&amp;&amp; is_array检查$ _POST [&#39; url&#39;]和$ _POST [&#39;标题&#39;]