这是我的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>
它看起来像什么:
点击任何按钮,我得到29号。有什么想法有什么不对吗?为什么当我点击添加时,正确的数字不会显示?
答案 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'];
} ?>