我一直在寻找不同的网站,试图找到一些帮助,但我似乎找不到任何问题,所以这里是:
我有一个价值体系,需要经常更新,而不是删除&重新创建它,我想使用MySQL更新的编辑功能。
我已经有更新工作,但它会更新所有行。我希望它只更新一个 - 但这不是完整的问题。
我想要它,所以当我点击item1上的Edit时,它会转到下一页,其中包含JUST item1,而不是item1,item2和item3。
示例:
+------------+-------------+---------------+ | Item | Value | Actions | +------------+-------------+---------------+ | item1 | 123 | Edit / Delete | | item2 | 456 | Edit / Delete | | item2 | 789 | Edit / Delete | +------------+-------------+---------------+
这是我的管理员项目表(不是数据库)。我想要它所以我点击编辑(删除工作正常),它带我到下一页只有我想要编辑的项目。目前,它将我带到下一页,但是所有项目。
这就是我的MySQL的样子:
+------------+-------------+---------------+
| id | name | value |
+------------+-------------+---------------+
| 7 | item1 | 123 |
| 8 | item2 | 456 |
| 9 | item3 | 789 |
+------------+-------------+---------------+
“id”是主要的,并且是自动增量。基本上,我设置的所有内容都与下一页进行编辑有关。
我有编辑链接链接到正确的ID以及所有这些对于ID为7的item1: /admin/index.php?_managevalues&itemId=7
但它仍然显示所有项目&更新所有项目值。
提前致谢,如果需要,我会很乐意发布代码。
EDIT1:
好的,这是manageitems.php:
<tr>
<td><b>Item Name</b></td>
<td><b>Image</b></td>
<td><b>Action</b></td>
</tr>
<?php
if($getitem = $db->query("SELECT * FROM lukevalues ORDER BY name ASC")) {
while($item = $getitem->fetch_assoc()) {
echo "
<tr>
<td><b>" . $item['name'] . "</b><br>at the price of <b>" . $item['price'] . "</b></td>
<td><img src='" . $item['image'] . "'></td>
<td><a href='index.php?_page=edititem&itemId=" . $item['id'] . "'>Edit Price</a> / <a href='index.php?_page=manageitem&del=" . $item['id'] . "'>Remove</a></td>
</tr>";
}
}
?>
</table>
<?php if(isset($_GET["del"]))
{
$db->real_query("DELETE FROM lukevalues WHERE id = '" . filter($_GET["del"]) . "'");
echo "
Item has been removed successfully. <br /><br />
";
}
echo $output;
?>
EDIT2:
这是我的编辑页面:
<?php
if($getitem = $db->query("SELECT * FROM lukevalues")) {
while($item = $getitem->fetch_assoc()) {
echo "
You're editing: <b>" . $item['name'] . "</b><br>
Which has a price of <b>" . $item['price'] . "</b>
<br /><br>
<form method='post'>
<h3>New Price</h3>
<input type='text' name='newprice'> <br />
<br />
<input type='submit' value='Update Price'>
</form>";
if(isset($_POST["newprice"])) {
$new = $db->real_escape_string($_POST["newprice"]);
$db->real_query( "UPDATE lukevalues SET price='$new' WHERE id = ".$item['id']);
echo "<br><br>Done! <a href='http://habzilla.net/admin/index.php?_page=manageitems'>Go back</a> to manage items.";
}
}
}
?>
答案 0 :(得分:0)
您的代码存在的问题是,当用户点击“更新价格”并且您的表单提交时,您的价值不再是item['id']
。您可以在表单的隐藏字段中存储项目的ID值。
您的编辑页面代码可能如下所示
<?php
// If it was an update submission do the update first
if(isset($_POST['newprice']) && isset($_POST['id']) &&
$_POST['newprice'] && $_POST['id']) {
$new = $db->real_escape_string($_POST['newprice']);
$id = $db->real_escape_string($_POST['id']);
$db->real_query("UPDATE lukevalues SET price='$new' WHERE id = '$id'";
echo "<br><br>Done! <a href='/admin/index.php?_page=manageitems'>Go back</a> to manage items.";
}
// Now fetch all items and produce edit forms with updates values
if($getitem = $db->query("SELECT * FROM lukevalues")) {
while($item = $getitem->fetch_assoc()) {
echo "You're editing: <b>" . $item['name'] . "</b><br>
Which has a price of <b>" . $item['price'] . "</b>
<br /><br>
<form method='post'>
<h3>New Price</h3>
<input type='text' name='newprice'> <br />
<input type='hidden' name='id' value=" .$item['id']. ">
<br />
<input type='submit' value='Update Price'>
</form>";
}
}
注意:代码显然尚未经过测试。
旁注:学习并使用预备语句。您当前的代码容易受到sql注入。