PHP& MySQL - 查询混乱

时间:2017-08-15 21:09:17

标签: php mysql

我正在尝试使用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 } ?>

2 个答案:

答案 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所建议的那样。现在你的逻辑方式是,你在页面加载时在循环内运行删除检查。