我有一个多选的下拉菜单,如此。我需要始终在'设置[用户] []'中包含特定值。无论是否在下拉列表中选择了其他值,它都会被传递。
我找到了一些jquery解决方案......有没有其他方法可以为这个数组添加特定的值?实际值不需要显示在选择区域中,只需在发布时始终包含在数组中。
基本上发生的事情是选择要编辑的用户,这会调出可以更改的不同设置。我正在使用此选择框允许他们根据需要将这些新设置设置给其他用户。因此,他们正在编辑的原始用户值必须始终出现在设置[用户] []'当它传递给我的PHP脚本进行处理时。
<select multiple="multiple" name="settings[users][]" size="8">
<option value="" selected="selected">no additional users...</option>
<option value="1">User 1</option>
<option value="2">User 2</option>
<option value="3">User 3</option>
<option value="4">User 4</option>
</select>
编辑:
我没有真正得到我正在寻找的回复......这就是我目前正在做的事情。
将隐藏字段添加到始终选定用户的表单中:
<input type="hidden" name="user_id" value="someuserID"/>
在php中:
// push always selected user id to the posted array
array_push($_POST['settings']['users'], $_POST['user_id']);
// filter out any empty value such as if 'no additional users...' was left selected
$userArray = array_filter($userArray);
$ userArray现在等于我需要在我的php中编辑/更改的所有用户
答案 0 :(得分:1)
这里的评论试图(轻柔地)指出这样一个事实:你想做的事几乎肯定是不必要的,并且它不必要地使代码变得复杂 - 你真的想让HTML复杂化吗任何用户都可以看到)只是为了简化PHP?
话虽如此,我可以想象一下你可能需要这样做的可能情况,而且我会做到这一点。但是,让我先介绍其他案例。
首先,如果固定值永久固定在整个网站/应用程序上,那么只需在PHP中对其进行硬编码即可。正如 Amir Bawab 在评论中所说:
$_POST['settings'][] = "someuserID"; // or array_push if you prefer
// Carry on as normal here ...
其次,如果值根据网站上下文而变化,因此只有HTML知道,那么编辑中的解决方案绝对是正确的方法。它很干净,很明显HTML和PHP中发生了什么,它以后很容易调试和支持。
但是,也许您无法访问PHP页面并且绝对需要发布正确的结构。正如你所说,你可以通过截取表单提交并插入标记为选中的额外隐藏值,在jQuery / Javascript中执行此操作。
但是,如果您决定将其作为纯HTML(也许您没有脚本),那么您可以这样做:
<select multiple="multiple" name="settings[users][]" size="8">
<option value="" selected="selected">no additional users...</option>
<option value="1">User 1</option>
<option value="2">User 2</option>
<option value="3">User 3</option>
<option value="4">User 4</option>
</select>
<select style='display:none' multiple="multiple" name="settings[users][]">
<option value="someusedID" selected="selected"></option>
</select>
如果我在PHP中print_r($_POST)
我得到(我选择了用户2):
Array
(
[settings] => Array
(
[users] => Array
(
[0] => 4
[1] => someusedID
)
)
)
我认为这就是你想要的。
注意,我在Chrome上通过本地服务器(XAMPP)尝试了这一点。我不能发誓所有浏览器和设置都会以同样的方式处理。这就是为什么隐藏场的方法是一个很多更好的主意。