通过 PHP 从 DDBB 中删除行

Delete row from DDBB through PHP

我的数据库中有以下 table:

CREATE TABLE subjects (
  subject_id int(11) NOT NULL AUTO_INCREMENT,
  subject text,
  PRIMARY KEY (subject_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

我在我的 php 中按以下方式显示此 table (index.php):

<table class="subjects">
    <tr>
        <th colspan="3" style="border-top-left-radius: 15px; border-top-right-radius: 15px;"><h2>Asignaturas</h2></th>
    </tr>
    <tr>
        <th> Asignatura </th>
        <th> Eliminar </th>
    </tr>

    <?php
    $sql = "SELECT * FROM subjects"; /*Select from table name: subjects*/
    $result = $conn->query($sql); /*Check connection*/

    if ($result->num_rows==0){

        echo '<p style="color: blue; text-align: center; font-size: 20px;">No hay asignaturas</p>';

    }else{
        while($row = $result->fetch_assoc()) {
            echo "</td><td>".$row["subject"]."</td><td><a class='eliminate' onClick=\"javascript: return confirm('Please confirm to delete');\" href=\"deleteSubject.php?id=".$row['subject_id']."\">X</a></td></tr>";
        }
    }
    ?>
</table>

和deleteSubject.php是这样的:

<?php
include('Conexion.php');
// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$subject_id = $_GET['subject_id']; // $id is defined

mysqli_query($conn,"DELETE FROM subjects WHERE subject_id='".$subject_id."'");
mysqli_close($conn);

我遇到的问题是,当我单击 X 时,它不允许我删除主题。它向我显示了能够删除的确认警报,但它什么也没做,它只是刷新 index.php 页面不删除任何内容。

谁能帮我看看哪里出错了?谢谢

您在请求删除时传递了变量 id,但试图访问 $_GET['subject_id'] 中的变量 subject_id

试试 $_GET['id']

此外,请确保验证该值是一个有效的 ID 并使用准备好的语句来提高安全性,因为您有一个巨大的 SQL 注入漏洞,就像有人提到的那样。

这里有错误

$subject_id = $_GET['subject_id'];

应该是

$subject_id = $_GET['id'];

您需要在对 id 进行任何操作之前验证查询字符串,这是停止 sql 注入或 XSS 攻击所必需的