通过PHP从DDBB中删除行

问题描述 投票:-1回答:2

我的数据库中有以下表格:

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中显示这个表(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页面而不删除任何东西。

有人可以帮我看看错误在哪里吗?谢谢

php database alert
2个回答
1
投票

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

试试$_GET['id']而不是。

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


1
投票

错误在这里

$subject_id = $_GET['subject_id'];

应该

$subject_id = $_GET['id'];

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

© www.soinside.com 2019 - 2024. All rights reserved.