使用 jQuery 从数据库中删除

Posted

技术标签:

【中文标题】使用 jQuery 从数据库中删除【英文标题】:Delete from database using jQuery 【发布时间】:2021-04-09 01:14:37 【问题描述】:

我想行。 我已经使用 php 检索了数据库表,并希望在单击删除按钮时从数据库中删除该行。

这是我的代码。 adm_complaints.php

<?php include('register.php') ?>
<!DOCTYPE html>
<html>
<head><title>AMC Hostel</title>
</head>
    <body>

<table id="t02">
  <tr class="header">
    <th>Student name</th>
    <th>Complaint</th> 
    <th>Date of complaint</th>
      <th></th>
  </tr>
    <tbody> 
    <?php
            $sql="select student_name, complaint, date_of_complaint from complaints";
            $result = $conn->query($sql);
            ?>
            <?php while($row = mysqli_fetch_assoc($result))  ?>

      <tr role="row" class="complaints_row">
               
        <td class="name"><?php echo $row['student_name']; ?></td>
        <td><?php echo $row['complaint']; ?></td>
        <td><?php echo $row['date_of_complaint']; ?></td>
        <td><button class="show-name">Delete</button></td>
      </tr>
    <?php  ?>   
      </table>
        <script>   
          $(".show-name").click(function()      
          var $row = $(this).closest("tr");
                 var $text = $row.find('.name').text();
                 
              $.ajax(
                  
                  url : "delete.php",
                  success: function(data)
                      alert('Directory created');
                  
                  
              );
            );   
        </script>

在这里,我希望在单击删除按钮时从 MySQL 数据库中删除该行。 这是我的 delete.php

<?php
include 'adm_complaints.php';
$host="localhost";
$port=3306;
$socket="MySQL";
$user="root";
$password="";
$dbname="hostel_management";

$conn = new mysqli($host, $user, $password, $dbname, $port, $socket)
    or die ('Could not connect to the database server' . mysqli_connect_error());
    
    $resolve="delete from complaints where student_name='$text'";
    $resolved=mysqli_query($conn, $resolve) or die(mysqli_error($conn));;
?>

当我单击删除按钮时,警报框显示“已创建目录”,但该行并未在数据库中删除。 我是 JQuery 的新手,所以即使我犯了任何愚蠢的错误,也请告诉我。 提前致谢。

【问题讨论】:

你不能以这种方式在 PHP(服务器)中使用 JS(客户端)变量...多研究 AJAX。 你不需要 jQuery 来完成这么简单的任务 - 使用 vanilla JS:blog.garstasio.com/you-dont-need-jquery/ajax 在代码中使用die(mysqli_error($conn)); 是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die? 这能回答你的问题吗? What is the difference between client-side and server-side programming? 【参考方案1】:

在 $.ajax - 不要发送 student_name 在 php - $text - 它是什么,它来自哪里?

试试

$.ajax(
        type: "POST",
        url : "delete.php",
        data: 'studen_name':$row ,
        success: function(data)
                      alert('Send request for delete');
                  
        
    ); 

在删除.php中

<?php

include 'adm_complaints.php';
$host = "localhost";
$port = 3306;
$socket = "MySQL";
$user = "root";
$password = "";
$dbname = "hostel_management";

if (isset($_POST['studen_name']) && $_POST['studen_name'] != '') 
    $mysqli = new mysqli($host, $user, $password, $dbname, $port, $socket);
    if (mysqli_connect_errno()) 
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    

    if ($stmt = $mysqli->prepare("delete from complaints where student_name=?")) 
        $stmt->bind_param("s", $_POST['studen_name']);
        $stmt->execute();
        printf("%d Row deleted.\n", $stmt->affected_rows);
        $stmt->close();
    
    $mysqli->close();
 else 
    echo 'No parameter';

【讨论】:

代码更正-免sql注入和死() 干得好。我将代码格式化为更好看。您应该注意的另一件事是,我们尝试教所有用户启用 mysqli 错误报告。如果您不知道该怎么做,可以在这里查看How to get the error message in MySQLi? 这将使您的答案更好。 它也应该写类而不是写程序并且使用MVC框架并且用户不应该是“root”并且js脚本应该在一个单独的文件中并且应该使用htmlspecialchars来绘制表格和应该使用 include_onec 而不是 include。 (> ‿◠) ✌ 是的,正如您所见,回答此类低质量问题通常不是一个好主意。它们对我们很少有用。最好把精力花在更好的问题上;它更有价值。 我修复了代码 - 声誉不应该恢复吗?

以上是关于使用 jQuery 从数据库中删除的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery 删除输入数据?

jQuery - 无法从复选框中删除选中的属性

在 jquery 中执行 sql 查询,以便从 html 表和数据库中删除数据

使用jquery表中的复选框从数组中删除JavaScript对象

如何使用 JQuery 在 MVC 中删除选中的行

jquery给表格动态添加删除行后如何获取数据