通过循环使用表单发送多个值

时间:2012-02-01 04:31:55

标签: php html forms loops

我想要完成的是将ID和评论内容发送到可以更新的页面。内容显示正确。 但是只有最后一个值总是被发布,所以由于某种原因,变量被覆盖,正如我在下一页测试输出时所看到的那样(updatereview.php)。如何为每个评论内容发送ID?我的代码到目前为止:

<?php
while($row2 = mysql_fetch_array($result2))
{
    echo"<tr>";   
    ?><td> <? echo "Comment left for ".$row2['game_name'].", ".$row2['game_platf'] ?> <br />
    <form method="post" action="updatereview.php?id=<? echo $row2['review_id']  ?>"> 
    <textarea  name= "content" class= "rev" ><? echo $row2['content'] ?></textarea></td> 
    <td><input name="Submit1" type="submit" value="Update" />||</td>  
    <? echo"</tr>";
}
echo "</table>";

3 个答案:

答案 0 :(得分:0)

您调用表单操作的方式基本上使您的表单方法“获取”。将id变量放入隐藏元素中以便它可以发布,如果你将它放在动作的url中,你将只获得一个id。

这在foreach中可能会更好

<?php
//use alternate syntax in html pages it's much easier to keep track off
foreach(mysql_fetch_array($result2) as $row2): ?>
<tr>  
    <td> 
    <?php echo "Comment left for ".$row2['game_name'].", ".$row2['game_platf'] ?></td><br />

    <form method="post" action="updatereview.php"> 

    //add hidden input element and give it the value of the id so it will be part of the $_POST array
    <td> <input type="hidden" name="id" value="<?php echo $row2['review_id'] ?>" /></td>

    <td><textarea  name= "content" class="rev" ><?php echo $row2['content'] ?></textarea></td>

    <td><input name="Submit1" type="submit" value="Update" />||</td> 
    </form>
</tr>

<?php endforeach ?>
</table>

现在当你发布表单时,id将在$ _POST数组中可用。

这种结构的方式你会得到每个记录的提交按钮,如果你只想要一个提交按钮,那么将提交移动到循环之外。

答案 1 :(得分:0)

这就是我想出来的,把代码放在有人知道更有效的方式之前。我已经使用了Rocky的方法,但是将值存储在名称字段中的数组中,解决了覆盖问题。我仍然认为使用get会工作而不是制作一个隐藏的字段,但这很有效,所以我会坚持下去。 : (对不起凌乱的压痕,尽我所能;))

$n = 1; 
echo "<table>";
while($row2 = mysql_fetch_array($result2))
{
    echo"<tr>";
?>
<td>
<? 
    echo "Comment left for ".$row2['game_name'].", ".$row2['game_platf'] 
?>
  <br />
  <form method="post" action="updatereview.php"> 
    <textarea  name= "content[<?php echo $n ?>]" class= "rev" >
    <? echo $row2['content'] ?> 
    </textarea> 

    <input type="hidden" name="review_id[<?php echo $n ?>]" value=<?php echo $row2['review_id'] ?> /></td>

    <td><input name="Submit1" type="submit" value="Update" />||</td> 

  </form>
  <td><a href = "deletereview.php?id=<? echo $row2['review_id'] ?>" >Delete</a></td>  
 <? echo"</tr>"; 
 $n++;    
 }
echo "</table>";

然后在updatereview.php中:

foreach($_POST['content'] as $content) { 
    echo "$content"; // to test values
    foreach($_POST['review_id'] as $review_id) { 
        echo "$review_id";
    }

答案 2 :(得分:0)

您需要构造名称属性值,使它们被视为数组

<input type="hidden" name="review_id[][<?php echo $n ?>]" value=<?php echo $row2['review_id'] ?> />

我在我的一个项目中所做的是使用具有特定模式的统一名称,以便相应地对元素进行分组

name="review[1][review_id]"
name="review[1][content]"

然后对于下一条记录,您可能正在使用不同的索引

name="review[2][review_id]"
name="review[2][content]"

我通常使用数据库中行的id作为索引。