我正在尝试使用PHP为MySQL数据库中的每个值创建一个表行。 正确地提取了siteName和siteId,并显示它们的良好状态。
但是,当我尝试在if语句中使用与查询类似的逻辑时,它也不起作用。目前,它删除了我的数据库中的文件夹表中的所有行,而不是我单击的那一行。 希望这是有道理的。
$results = mysqli_query($conn, "SELECT * FROM folders WHERE hidden = 0 ORDER BY siteName asc");
while ($row = mysqli_fetch_assoc($results)) {
<tr>
<td>
<span>
<?php echo($row["siteName"] . ' (' . $row["siteId"] . ')') ?>
</span>
<form method="POST">
<button name="deleteFolder">CLICK</button>
</form>
<?php
$conn = mysqli_connect($server, $username, $password, $database);
if (isset($_POST['deleteFolder']))
{
// deletes everything?
$testing = mysqli_query($conn, "DELETE FROM folders WHERE siteId = '".$row['siteId']."'");
}
?>
</td>
</tr>
<?php } ?>
答案 0 :(得分:1)
此代码正在删除当前的所有内容,因为您在显示所有文件夹的循环内执行删除查询,使用每个文件夹的ID并在获取它们后立即删除它们。
将站点ID作为按钮值传递给删除,如果设置了该值,则在显示表之前删除。
<?php
$conn = mysqli_connect($server, $username, $password, $database);
// delete first if the button was clicked
if (isset($_POST['deleteFolder']))
{
// use the value from $_POST here
$testing = mysqli_query($conn, "DELETE FROM folders WHERE siteId = '".$_POST['deleteFolder']."'");
}
$results = mysqli_query($conn, "SELECT * FROM folders WHERE hidden = 0 ORDER BY siteName asc");
while ($row = mysqli_fetch_assoc($results)): ?>
<tr>
<td>
<span>
<?php echo($row["siteName"] . ' (' . $row["siteId"] . ')') ?>
</span>
<form method="POST">
<!-- use the site id as the value of this button -->
<button type="submit" name="deleteFolder" value="<?= $row['siteId'] ?>">CLICK</button>
</form>
</td>
</tr>
<?php endwhile; ?>
另外,我没有在这里解决它,但这个查询容易受到SQL注入攻击。查看将站点id值绑定到预准备语句,而不是将值连接到SQL中。
答案 1 :(得分:-1)
首先;我猜你已经有了一个DB conn来执行第一个查询,所以你不需要为每一行创建一个新的连接。
二;当你点击按钮时,它应该提交一个带有数据的POST请求到一个将执行查询(删除)的php文件 - 就像@ Do not Panic所建议的那样。现在你的逻辑方式是,你在页面加载时在循环内运行删除检查。