【问题标题】:Delete statement from $_POST return从 $_POST 返回中删除语句
【发布时间】:2017-09-11 23:22:27
【问题描述】:

我对 mysql 和 php 很陌生,我正在尝试设置一些参数来帮助我在用户按下删除按钮时从表中删除一个条目。我目前已将其设置为用户可以使用部门、名称或课程编号搜索表格的位置。每个删除语句都是由它们使用的搜索准备的。

我遇到的问题是,当我创建删除语句时,我不知道如何确定 SELECT 语句选择了哪些数据。下面显示了一段简短的 sn-p 代码。

if($_POST['radios'] == 0){
    $sql = "SELECT * FROM classes where department LIKE '" . $_POST['search'] . "%';";
$select = 0;
$id = $sql;//problem area. Can't figure out how to pass the needed deparment info.

if($_POST['submit'] == "delete"){
  if($select == 0){
  mysqli_query($mysqli, "DELETE FROM classes WHERE department='".$id."'"); //need $id to match the correct department from table
  mysqli_close($mysqli);
  }

编辑:表格

DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (
`name` varchar(255),
`department` varchar(255),
`course_id` varchar(255),
PRIMARY KEY(`course_id`),
`start` time,
`end` time,
`days` varchar(255)
);

感谢您的帮助!

【问题讨论】:

  • 您还需要查看 SQL 注入。看到这个问题stackoverflow.com/questions/14323078/mysql-injection-query
  • 你不需要知道SQL语句。您需要针对每条记录存储行的唯一 ID。当您提出删除请求时发送此值。
  • 请在数据库中发布有关您的模型的更多信息。
  • 在数据库中添加了表。

标签: php sql-delete


【解决方案1】:

这是删除特定“类”的一种简单方法。

Treat your buttons like a link 这样当您单击它时,它会重定向到特定页面,例如page.php?delete=ID.

我假设您正在动态生成表格,所以您的代码会有点类似于

<?php foreach ($classes as $class) : ?>
    <tr>
        <td><?= $class->name ?></td>
        <td><?= $class->department ?></td>
        <td><?= $class->course_id ?></td>
        <td><?= $class->start ?></td>
        <td><?= $class->end ?></td>
        <td><?= $class->days ?></td>
        <!-- note the use of type="button" as we don't want to submit anything -->
        <!-- window.location.href is to redirect -->
        <td><button type="button" onclick="window.location.href='page.php?delete=<?= $class->course_id ?>'">delete</button></td>
        <td><button type="button">update</button></td>
    </tr>
<?php endforeach ?>

然后在你的处理脚本中,即page.php,你会这样做

if ($_POST['radios'] == 0){
    $sql = "SELECT * FROM classes where department LIKE '" . $_POST['search'] . "%';";
    // etc
}

// note we are using a GET method as we only did a redirection
if (!empty($_GET['delete'])) {
    $id = $_GET['delete'];
    mysqli_query($mysqli, "DELETE FROM classes WHERE course_id='".$id."'");
    mysqli_close($mysqli);
    // good idea to go back to previous page to see changes
    header('Location: previousPage.php');
    exit;
}

就是这样。

旁注:请阅读 Lee Taylor 关于 SQL 注入的评论,因为此代码很容易受到攻击。开始了解prepared statements

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    • 2017-07-30
    • 2021-12-13
    相关资源
    最近更新 更多