我有名称为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);
答案 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;]