首页 > 解决方案 > 在 foreach 循环内自动增加会话索引

问题描述

我有一个动态显示数据库行的 foreach 循环。我将它们显示在一个表单中,因此当我单击其中一个显示的表单内的按钮时,我会转到另一个页面,该页面根据我选择的表单更新我的数据库。

关于如何获取特定行并更新它的唯一想法是为每个创建的表单设置一个会话;如何设置具有自动递增索引的会话?

<?php foreach($stmt as $row):?>
    <form action="Update.php" method="POST" >
        <p>Has  <?php echo $row["info"]; ?> seat(s) available </p>
        //other similar html elements and echoing from database

        <button type="submit" name="updateData"> Reserve</button>
        // $_SESSION['phone']=$row['phone']
    </form>
<?php endforeach;?> 

如果我这样离开会话,它会被覆盖。

更新.php

$sss=5;

if(isset($_POST['updateData'])){
    
 $stmt = $db->prepare("UPDATE ddd SET seats =:seats where phone = :phone");
    $stmt->bindParam(':seats', $sss);
    $stmt->bindParam(':phone', $_SESSION['phone']);

标签: phppdo

解决方案


如果 $row 匹配数据库表中的一行,它应该有一个唯一的 id。您可以在表单的隐藏输入中传递该唯一 ID:

<input type = "hidden" name = "id" value = "<?= htmlspecialchars($row['id']) ?>" />

然后在Update.php, 参考$_POST['id']而不是$_SESSION['id']


推荐阅读