我遇到了一个问题,我不知道如何解决它。我有一个库存表,它包含一个id(分配给用户)列和id_item列(分配给items表中的item),还有一个items表,它也包含id表。
更具体地说,这是我的数据库包含的内容:项目表:
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是items表中item的id。
问题:假设我以莫托克的身份登录,他的库存中有两件武器。直到现在一切都很好。我想为他所有的每一件物品都做一个纽扣。按钮在那里,但不能正常工作。当我点击第一个是显示ssss1,这是正确的,但当我按下第二个时,什么都没有发生。我想更具体地向ssss2显示下一个$row1['d_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代码,以检查表单中的更改
不过我现在就告诉你。应该更改您设计数据库的方式。保持更新将是一件痛苦的事。你应该使用一个项目表,一个用户表,并在它们之间有一个透视表,因为这是一个多对多的关系。
玩得开心!