[英]PHP Buttons inside loop
我有一個問題,我不知道該如何解決。我有一個庫存表,其中包含一個id(分配給用戶)列和id_item列(該分配給items表中的項目)和一個items表還包含一個id表。
更具體地說,這是我的數據庫包含的內容:items表:
id name
1 Dagger
2 Staff
3 Wood Shield
每個都有自己的唯一ID。
庫存表:
id id_item username name
1 3 cristi Wood Shield
2 1 motoc Dagger
2 2 motoc Staff
該ID來自每個用戶ID,而id_item是來自item表的項目id。
問題:假設我以motoc身份登錄,他的庫存中有2種武器。 到現在一切都很好。 我要為他擁有的每個物品都按下一個按鈕。 按鈕在那里,但不能正常工作。 當我單擊第一個時,顯示ssss1是正確的,但是當我按第二個時,則沒有發生。 我想更具體地向我展示ssss2,下一個$ row1 ['id_item']。
我真的不知道該怎么解決。 謝謝。
這是我嘗試過的:
if (isset($_SESSION['id'])) {
$sth1 = $dbh->prepare("SELECT * FROM inventory WHERE id = ".$_SESSION['id']."");
$sth1->execute();
while($row1 = $sth1->fetch(PDO::FETCH_ASSOC)){
$sth = $dbh->prepare("SELECT * FROM items WHERE id = ".$row1['id_item']."");
$sth->execute();
$row = $sth->fetch(PDO::FETCH_ASSOC);
$ss = print $row1["id_item"];
?>
<form id='<?php echo $row1["id_item"]; ?>' method="POST" action="" >
<input type="hidden" name="refid" value="add" />
<input type="submit" name="submit<?php echo $row1["id_item"]; ?>" value="Add" />
</form>
<?php
}
if (isset($_POST["submit$ss"])) {
$refid = intval($_POST["refid"]);
$sth1 = $dbh->prepare("SELECT * FROM inventory WHERE id = ".$_SESSION['id']."");
$sth1->execute();
$row1 = $sth1->fetch(PDO::FETCH_ASSOC);
echo "ssss".$row1['id_item'];
}
}
這是構建表單的一種不好的方法。 由於您要為每個項目構建一個“個性化”表單,因此無需創建動態字段名,只需創建一個隱藏的表單字段即可:
<form ... >
<input type="hidden" name="id_item" value="<?php echo $row1['id_item'] ?>" />
<input type="hidden" name="refid" value="add" />
<input type="submit" name="submit" value="Add" />
</form>
然后,您只需在表單處理代碼中檢查$_POST['id_item']
,而不必查找每個可能的submit1
, submit2
等。
同樣,您的表單處理代碼在與表單生成代碼相同的上下文中運行,甚至還沒有機會顯示表單並獲得用戶點擊。 你至少應該有一些喜歡
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
... handle form here ...
echo "ssss...";
}
因此,僅在實際提交表單后才運行項目信息檢索。
試一下。 我對您要發生的事情有些困惑,但是我認為這可以做到。
<?php
if (isset($_SESSION['id'])) {
$sth1 = $dbh->prepare("SELECT * FROM inventory WHERE id = " . $_SESSION['id']);
$sth1->execute();
while ($row = $sth1->fetch(PDO::FETCH_ASSOC)) {
$sth = $dbh->prepare("SELECT * FROM items WHERE id = " . $row['id_item']);
$sth->execute();
$row = $sth->fetch(PDO::FETCH_ASSOC);
$ss = $row["id_item"];
?>
<form id='<?php echo $ss; ?>' method="post" action="?show">
<input type="hidden" name="item_id" value="<?php echo $ss; ?>" />
<input type="submit" name="submit" value="Add" />
</form>
<?php
}
if (isset($_GET["show"]) && isset($_POST['item_id'])) {
echo "ssss" . $_POST['item_id'];
}
}
我清理了一些代碼,並更改了表單的生成方式。 我還更改了底部的PHP代碼,以檢查表單中的更改。
我現在告訴你。 您設計數據庫的方式應該更改。 保持更新將是一個痛苦的過程。 您應該使用項目表,用戶表,並在它們之間使用數據透視表,因為這是多對多關系。
玩得開心!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.