我有一个显示数据库中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
标记。目前,当你提交表单时,所有隐藏的输入都会被提交,因为它们有相同的名称,所以你会得到最后一个的值。按照我建议的方式进行操作,只会提交您单击的按钮的值。