这将通过一个例子来理解:
你有一个配方网站,可追踪3个数据点:
在Recipe Editor
的第一页上,我们有一张表格列出了所需的成分。
Recipe: salad
REQUIRES
__ tomato
__ lettuce
__ cheese
__ schweddy balls
在第二页上,我们列出了所有必需成分和输入框,以输入所需的数量:
Recipe: salad
Ingredient Volume
tomato 2
lettuce 1
cheese 1
(做作,我知道,但请忍受我)
现在第二个表单的成分列表和<input ... />
框是根据选择进行编辑的配方从数据库动态生成的。
每种成分都有一个数字ID,因此您的音量输入将如下所示:
<input type="text" name="17" value="" /> // how many tomatoes?
一旦你SUBMIT
,你需要处理$_POST
数组并上传所有的成分和数量 - 但是你(或者至少我)事先并不知道将会是什么$_POST
数组,因为每个食谱都需要不同的成分== $_POST[???]
我想到的超级kludge是将所有成分ID放入逗号分隔的字符串中,将其粘贴到隐藏的输入字段中,并在处理过程中将其爆炸并将其用作$ _POST键来提取值。这当然有效,但它让我觉得内心都很脏。
如果您事先不知道密钥,是否有更好的方法可以从$ _POST中获取输入值?
答案 0 :(得分:2)
最简单的方法是使用foreach,因为$ _POST就像任何其他数组一样:
foreach($_POST as $key => $value)
{
switch($key)
{
case 17:
// ...
}
}
您还可以使用isset()检查是否存在特定键:
if(isset($_POST['17'])) {
// ...
}
并且为了记录:逗号分隔的输入字段没有任何问题。最好的解决方案是有效的解决方案。 :)
答案 1 :(得分:2)
这不是一个不常见的问题,对于收件人而言,这种方法看起来似乎有道理。但是,如果您能够调整表单生成逻辑,还有另一种方法:
<input type="number" name="volume[tomatos]" value="">
或继续使用name="volume[17]"
或类似内容的ID。
无论如何,我认为使用AJAX / DHTML也很容易生成,并且PHP可以更好地处理像$_GET["volume"][...]
这样的输入数组 - 在某些情况下,它也比接收不确定的ID列表更可靠。 (你当然仍需要foreach
。)
答案 2 :(得分:0)
foreach ($_POST as $key => $value){
echo "This recipe includes $value of ingredient $key."
}
要获取成分ID列表,请从$ _POST数组中提取它:
$ingredientIDs = array_keys($_POST);
答案 3 :(得分:0)
<input type="text" name="17" value="" />
假设您的表单方法是POST ...
foreach($_POST as $key => $value){
echo "We need $value of item $key";
}
应该让你朝着正确的方向前进。