【问题标题】:Sending multiple values with a form through loop通过循环发送带有表单的多个值
【发布时间】:2012-02-23 20:07:11
【问题描述】:

我试图完成的是将 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>";

【问题讨论】:

  • 每次提交时要更新一条评论还是所有评论?
  • 此代码输出所有评论,每个评论都有一个更新/删除选项。所以每次提交都应该带有review id

标签: php html forms loops


【解决方案1】:

这就是我想出的,把代码放在以防有人知道更有效的方法。我使用了 Rocky 的方法,但将值存储在 name 字段中的数组中,解决了覆盖问题。但是,我仍然认为使用 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】:

    您需要以将它们视为数组的方式构造名称属性值

    <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作为索引。

    【讨论】:

      【解决方案3】:

      您调用表单操作的方式基本上使您的表单方法“获取”。将 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 数组中可用。

      同样的结构方式,您将为每条记录获得一个提交按钮,如果您只需要一个,请将提交移到循环之外。

      【讨论】:

      • 谢谢洛基。它旨在通过每个评论的 url 发送 id,并将内容作为 POST 发送。正如你所说,我确实将其更改为将 id 作为隐藏值以 POST 形式发送,但仍然只有最后一条评论出现
      • 首先,检查您的数据数组,确保它包含您期望的数据。其次检查循环并确保它正在做你想要的。保持简单并添加回项目,直到你打破它。
      • 如果您想要更新和删除按钮,这很容易。删除所有表格内容并为每个表格单元格添加一个指向更新/删除操作的链接。如果您愿意,您可以将样式设置为按钮。此外,您还需要在链接中传递 url 中的 id。这看起来是一个简单的问题,但它有各种各样的可能性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-25
      • 2012-07-10
      相关资源
      最近更新 更多