删除没有ID的当前行(PHP,MYSQL,HTML)

时间:2017-05-01 13:04:59

标签: php html mysql mysqli

我正在开发一个HTML网站。我正在使用MySQL数据库和PHP。

到目前为止,这个概念相当简单:

  1. 用户可以通过点击添加按钮在网站上添加一些文字 - 用户会被定向到带有对话框的页面

  2. 当他点击提交时,该文本位于数据库中。

  3. PHP代码知道:虽然数据库有条目 - >将文本回显到HTML网站上(我添加了一个while循环)

  4. 现在我的下一步是让用户删除文本。我在HTML网站上添加了垃圾桶glyphicon。当用户单击它时,我希望删除表中的当前行。很遗憾没有任何事

    以下是代码:

    <?php
        $query = " SELECT * FROM Thesis";
        $sql = mysqli_query($conn, $query);
        $count = mysqli_num_rows($sql);
    
        while ($row = mysqli_fetch_array($sql)){
    
        ?>
    
    
    <div class="box green-box">
    
        <p><div class="center-box-content">
    
        <!--echo the title -->
            <?php echo $row["title"]; ?>
    
            <br> 
    
       <!--echo the description -->
           <?php echo $row["description"]; ?>
        </p>
    
        <div class="lower-right-box-content">
    
            <a href="adminview.php">
                <span class="glyphicon glyphicon-trash glyphicon-trash" role="button">
                <?php
                $delquery = " DELETE * FROM Thesis";
                mysqli_query($conn, $delquery);
    
                ?>
                </span>
            </a>
    
        </div>
    
    </div>
    </div>
    <?php };
    ?>
    

    我做错了什么?我知道主要的错误必须在某处 在$ delquery中。但我迷路了。 我也知道每行都有一个ID会更好。但是我想避免它,因为因为我们处于while循环中,所以必须有一种方法来删除while循环所在的当前行,对吧?那将是我的首选解决方案。

    最后,我对编程很新,而不是最优雅的程序员,请善待:)

3 个答案:

答案 0 :(得分:0)

警告:小心SQL注入!!

现在,回到问题所在。 首先,每次插入行时都会运行删除SQL代码,因此您永远不会有行。第一步是删除

        <?php
        $delquery = " DELETE * FROM Thesis";
        mysqli_query($conn, $delquery);

        ?>

接下来,如果用户点击垃圾桶图标,您希望删除某一行。为此,您可以通过<a>$.ajax将行ID传递到PHP页面,然后从该PHP页面中删除它。但是,要小心SQL注入

所以你需要在你的主页上:

<a href="deleteRow.php?id=<? echo $row['id'] ?>">[delete icon]</a>

deleteRow.php

$id=$_GET['id'];
//anti-injection code
mysqli_query($conn,"DELETE FROM Thesis WHERE id='$id'");

答案 1 :(得分:0)

   <a href="adminview.php">
        <span class="glyphicon glyphicon-trash glyphicon-trash" role="button">
        <?php
        $delquery = " DELETE * FROM Thesis";
        mysqli_query($conn, $delquery);

        ?>
        </span>
   </a>

在上面的代码中,您删除了所有行。这是错的。你应该做的是:

    <a href="adminview.php?id=<?php echo $row["id"];?>">
        <span class="glyphicon glyphicon-trash glyphicon-trash" role="button"></span>
    </a>
adminview.php中的

if(isset($_REQUEST['id'])) {            
     $delquery = " DELETE FROM Thesis WHERE id= '".$_REQUEST['id']."' ";
     mysqli_query($conn, $delquery);            
}

答案 2 :(得分:0)

您将需要一个简单的ID用于您的论文表,如下所示:

CREATE TABLE `Thesis` (
  `thesis_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `description` varchar(255) NOT NULL,
 PRIMARY KEY (`thesis_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我会将PHP与显示代码分开,将PHP代码放在文件的顶部。为了安全性和更好的代码,我将使用绑定变量与PDO(而不是mysqli)。但是坚持使用原始代码,我会像这样重写它:

<?php

// Establish the connection
$sql = mysqli_query($conn, $query);

// Delete a specific element
if (isset($_GET['delete_id']) && $_GET['delete_id'] > 0) {
    $query = "DELETE FROM Thesis WHERE thesis_id = " . $_GET['delete_id'];
    mysqli_query($conn, $query);
}

// Gather all the rows
$query = "SELECT * FROM Thesis";
$count = mysqli_num_rows($sql);
$rows  = [];
while ($row = mysqli_fetch_array($sql)){
    $rows[] = $row;
}

?>

<?php foreach ($rows as $row): ?>

<div class="box green-box">

    <p><div class="center-box-content">

    <!--echo the title -->
    <?= $row["title"] ?>


    <br> 

    <!--echo the description -->
    <?= $row["description"] ?>

    </p>

    <div class="lower-right-box-content">

        <a href="adminview.php?delete=<?= $row['thesis_id'] ?>">
            <span class="glyphicon glyphicon-trash glyphicon-trash" role="button"></span>
        </a>

    </div>
  </div>
</div>

<?php endforeach; ?>

上面的foreach调用是一种常见的PHP快捷方式,<?=标记会回显一些内容而无需调用echo。建议不要使用GET调用删除元素,但为了简单起见,我将其保留到位。