检测哪个表单发送选择元素的值| PHP

时间:2014-07-22 20:41:39

标签: php html forms

我正在使用php和html。我的问题是:如何检测哪个表单将其选择元素的值发送到操作页面。

<?php foreach($myarray as $arr){ ?>

<form name="uniqueform_<?=$arr["product_id]?>" method="post" action="action.php">
    <select name="letters">
        <option value='a'>a</option>
        <option value='b'>b</option>
        <option value='c'>c</option>
    </select>
    <input type="submit" value="Send"/>
</form>

<?php } ?>

action.php的

<?php
$myselect_value = $_POST["letters"];

echo $myselect_value; //returns null;

?>

当我按下发送按钮时,我会进入操作页面但是当使用echo或var_dump()时选择值为Null;

我认为php无法检测哪个表单发布到操作页面。我该如何解决这个问题?这很烦人。

小提琴http://jsfiddle.net/8Rzb8/1/

3 个答案:

答案 0 :(得分:1)

嗨,简单的答案是将提交按钮命名为不同的名称,例如

<input type="submit" value="Send"/>

你没有名字

 <form name="form1" >
   ....
    <input type="submit" value="Send" name="submit_frm1" />
  </form>

 <form name="form2" >
   ....
    <input type="submit" value="Send" name="submit_frm2" />
  </form>

然后你只需检查

if(isset($_POST['submit_frm1'] ){
   ... do some stuff for form1
}else if(isset($_POST['submit_frm2'] ){
   ... do some stuff for form2
}

我应该注意,但是共享表单元素名称通常是一种不好的做法。因此,你真的不应该/不应该首先选择相同的名称,它会重新填充它们,如果出现错误,真的很痛苦。

就个人而言,我只是以不同的方式命名,或换一种方式。使用标识符为所有表单元素添加前缀。所以

 <form name="frm1" >
   ....
    <select name="frm1_select" > ... </select>
    <input type="submit" value="Send" name="frm1_submit" />
  </form>

 <form name="frm2" >
   ....
    <select name="frm2_select" > ... </select>
    <input type="submit" value="Send" name="frm2_submit" />
  </form>

然后在后端你可以用非常简单的代码,preg_match(),explode(),substr()等来分隔它们。并用同样简单的代码生成它们。我可举例说明如果你也需要我。

答案 1 :(得分:0)

您可以使用不同名称的提交按钮,或只使用隐藏字段:

<input type="hidden" name="form" value="uniqueform_<?=$arr["product_id]?>">

然后检查$_POST['form']

答案 2 :(得分:-1)

您需要一个字段来标识相关表单。例如:

  • 添加到您的表单:
<input type="hidden" name="product_id" value="<?=$arr["product_id]?>" />
  • 在您的action.php中,检查$_POST['product_id']以确定提交的表单。

例如,如果产品ID为7,则$_POST['product_id']为7,表单为uniqueform_7