我有一个问题,我不知道如何编织它。我有一个库存表,其中包含一个id(分配给用户)列和id_item列(从items表中分配一个项目)还有一个包含id表的items表。
更具体地说,这是我的数据库包含的内容: 物品表:
id name
1 Dagger
2 Staff
3 Wood Shield
每个人都有自己独特的身份。
库存表:
id id_item username name
1 3 cristi Wood Shield
2 1 motoc Dagger
2 2 motoc Staff
id来自每个用户ID,id_item是items表项中的id。
问题: 假设我已经登录为motoc,他的库存中有2个武器。直到现在一切都很好。我想为他拥有的每件商品制作一个按钮。按钮在那里但不能正常工作。当我点击第一个时,显示我ssss1这是正确的,但当我按下第二个没什么hapens。我想更具体地向我展示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'];
}
}
答案 0 :(得分:2)
这是构建表单的一种糟糕方式。由于您正在为每个项目构建“个性化”表单,因此无需创建动态字段名称,只需隐藏表单字段:
<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...";
}
所以项目信息检索仅在表格实际已提交时才会运行。
答案 1 :(得分:0)
给它一个机会。我对你想要发生的事情感到困惑,但我认为这样做会很好。
<?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代码,以检查表单中的更改。
我现在会告诉你的。应该更改您设计数据库的方式。保持更新将是一个痛苦的屁股。您应该使用项目表,用户表,并在它们之间有一个数据透视表,因为它是多对多关系。
玩得开心!