我有一个这样的表单:
<?php if (isset($_POST['artist'])) {
// do something
} ?>
<form name="admin_on_artist_<?php echo $artist->ID; ?>" action="" method="POST">
<p class="artist-negative">
<label for="artist"><input type="checkbox" name="artist_<?php echo $artist->ID; ?>" id="artist_<?php echo $artist->ID; ?>"> Check this?</label>
</p>
<button type="submit">Update</button>
</form>
在有问题的页面上,此表单在foreach循环中多次显示。但是,当我提交任何给定的表单时,它会更新所有表单,这不是我想要的。
如何将$artist->ID
附加到$_POST['artist']
,以便获得类似以下内容:
$_POST['artist_1']
以匹配复选框属性?
发布于 2018-06-13 07:01:35
您可以将生成前端表单标记的foreach
与处理表单提交的foreach
配对。类似于:
<?php
$regex = '/^artist_([0-9]+)$/'
foreach (array_keys($_POST) as $key) {
if (preg_match($regex,$key,$matches)) {
$artistId = (int)$matches[1];
// do something with $_POST[$key] according to $artistId
}
}
这适用于单个字段提交或多个字段提交。
或者,您可以在JS
的前端做一些事情(正如@smith在评论中建议的那样),以确保表单提交总是具有相同的、众所周知的键,用当前提交的内容填充隐藏的表单。使用这种方法时,您必须向包含ID的表单添加另一个字段。
发布于 2018-06-13 23:49:22
这个问题的解决方案比我一开始能够掌握的要简单得多,但基本上我只能这样做,这与我最初的问题的关键区别在于前两行:
<?php $artist_form_id = 'artist_'.$artist->ID;
if (isset($_POST[$artist_form_id])) {
// do something
} ?>
<form name="admin_on_artist_<?php echo $artist->ID; ?>" action="" method="POST">
<p class="artist-negative">
<label for="artist"><input type="checkbox" name="artist_<?php echo $artist->ID; ?>" id="artist_<?php echo $artist->ID; ?>"> Check this?</label>
</p>
<button type="submit">Update</button>
</form>
https://stackoverflow.com/questions/50826816
复制相似问题