显示正确的隐藏字段的问题

时间:2010-11-21 02:44:55

标签: php html

这是我的HTML:

<form method="POST" action="">
    <?php
        $skillSubCategory = $skills->showSkills(24);

        for ($i = 0; $i < count($skillSubCategory); $i++) {
    ?>

<input type="hidden" name="skillid" value="<?php echo $skillSubCategory[$i]['skill_id']; ?>" />

    <?php echo $skillSubCategory[$i]['title']; ?>

<input type="submit" name="add" value="add" /><br />

    <?php } ?>

</form>

    <?php if (isset($_POST['add'])) {
            echo $_POST['skillid'];
    } ?>

产生的源代码:

<form method="POST" action=""> 

<input type="hidden" name="skillid" value="25" /> 

    Animal Grooming
    25
<input type="submit" name="add" value="add" /><br /> 


<input type="hidden" name="skillid" value="26" /> 

    Dog Trainer
    26
<input type="submit" name="add" value="add" /><br /> 


<input type="hidden" name="skillid" value="27" /> 

    Dog Walking
    27
<input type="submit" name="add" value="add" /><br /> 


<input type="hidden" name="skillid" value="28" /> 

    Vet
    28
<input type="submit" name="add" value="add" /><br /> 


<input type="hidden" name="skillid" value="29" /> 

    Beekeeping
    29
<input type="submit" name="add" value="add" /><br /> 


</form> 

它看起来像什么:

alt text

点击任何按钮,我得到29号。有什么想法有什么不对吗?为什么当我点击添加时,正确的数字不会显示?

3 个答案:

答案 0 :(得分:2)

因为当表单中有多个具有相同name属性的字段时,最后一个字段总是优先(除了提交按钮 - 单击的那个将是唯一考虑的)。因此,名为skillid的最后一个隐藏输入将始终发送到服务器。

使用这样的表单时,通常必须为每个按钮使用单独的表单。或者,更改每个按钮的value属性,并从PHP代码中考虑该属性。

答案 1 :(得分:2)

您也可以使用按钮本身(不更改其值):

<input type="submit" name="skillid[25]" value="add" />
<input type="submit" name="skillid[26]" value="add" />
<input type="submit" name="skillid[27]" value="add" />

要检索提交的值(在本例中它不是值,它是已发布数组的第一个键):

if(isset($_POST['skillid']) && is_array($_POST['skillid']))
{
   echo key($_POST['skillid'])
}

答案 2 :(得分:1)

变化:

<form method="POST" action="">

为:

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">

然后将条件更改为:

if (isset($_POST['add']) && isset($_POST['skillid'])) {

编辑:改为使用<option>标记

<select name="skillid">
 <option value="25">Animal Grooming</option>
 <option value="26">Dog Trainer</option>
    ...
</select>

您的PHP代码现在将是:

<form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>">
 <?php
 $skillSubCategory = $skills->showSkills(24);
 <select name="skillid">
 for ($i = 0; $i < count($skillSubCategory); $i++) { ?>
  <option value="<?php echo $skillSubCategory[$i]['skill_id']; ?>"><?php echo $skillSubCategory[$i]['title']; ?></option>
 <?php } ?>
 </select>
 <input type="submit" name="add" value="add" /><br />
</form>

if (isset($_POST['add']) && isset($_POST['skillid'])) {
    echo $_POST['skillid'];
} ?>