传递表单中foreach循环中的ID字段


Passing on ID field from a foreach loop in a form

我有一个显示数据库中gig的页面。第一次加载只显示每个条目的标题,一个显示完整详细信息的按钮,以及一个删除(尚未使用)的按钮

我在为foreach循环的每个条目传递ID值时遇到了问题。它总是传递最后一个条目的ID号,无论我点击哪个条目。所以我总是看到第二场演出的细节,即使我点击了第一场。(我现在数据库里只有两个演出)

关于如何传递我点击"显示"按钮的ID,有什么建议吗?

这是我的代码

require_once "gigPDO.php";

//Show button is pressed
if (isset ( $_POST ["show"])) {
    $id = $_POST ["id"];
    //$id = 5;
    try {
    $dbase = new gigPDO(); 
    $result = $dbase->searchGig($id); 
    //print_r($result);
    foreach($result as $gig){
        print("<p>Title: " . $gig->getTitle());
        print ("<br>Venue: " . $gig->getVenue());
        print ("<br>Date: " . $gig->getDate());
        print ("<br>Time: " . $gig->getTime());
        print ("<br>Country: " . $gig->getCountry());
        print ("<br>Address: " . $gig->getAddress());
        print ("<br>Postcode: " . $gig->getPostcode());
        print ("<br>City: " . $gig->getCity());
        print("<br>Description: " . $gig->getDescription() . "</p>");
        echo "<br />";
        unset($_POST ["show"]);
        echo "<a href='searchGigs.php'>Back to list</a>";
        exit();                

    }
    exit ();

} catch ( Exception $error ) {
    print("<p>Error: " . $error->getMessage ());
    exit ();
}
    }
//First load, shows all gigs
try {
    $dbase = new gigPDO(); 
    $result = $dbase->allGigs();

    foreach($result as $gig){
        print("<p>". $gig->getTitle(). "<p>");
        print ("<input type='hidden' name='id' value='".$gig->getId() ."'>");
        print('<input type="submit" name="show" class="next show-button" value="Show" />');
        print(' <input type="submit" name="delete" class="next show-button" value="Delete" />');
        echo "<br />";
        echo "<br />";                
    }

    if ($dbase->getRows() == 0){
        print("There are no gigs in the database yet");
     }else{       
        print("<p>Total " . $dbase->getRows() . " gigs</p>");
       }
} catch ( Exception $error ) {
    print("<p>Error: " . $error->getMessage ());
}

如果使用button而不是input type="submit",则可以将id嵌入到按钮中,而不是使用隐藏输入。

echo '<button type="submit" name="id" class="next show-button" value="'.$gig->getId().'" />
         Show
      </button>';

您目前的操作方式可以工作,但您需要在每组输入周围使用一个单独的form标记。目前,当你提交表单时,所有隐藏的输入都会被提交,因为它们有相同的名称,所以你会得到最后一个的值。按照我建议的方式进行操作,只会提交您单击的按钮的值。