根据php中桥接表中的id删除用户,sql是否不起作用



我正在创建一个函数,当他们的学员被分配给不同的老师时,老师可以删除他们的学员。

teacher table

+------+------+
| ID   | name |
+------+------+
|  101 | lili |
|  201 | mey  |
+------+------+

student

+------+------+
|id_s  | name |
+------+------+
|  s01 | aby  |
|  s02 | miri |
|  203 | ash  |
+------+------+

学员

+------+--------+------+--+
| id   |id_stud |  id_tch |
+------+--------+----------
|  1   | s01    |   101   |
|  2   | s02    |   101   | 
|  3   | s02    |   201   |
+------+--------+---------+

我想删除桥接表中的学生id,其中id为s01,教师id为101。我不想删除整个学生信息。因为学生仍然有空,这只是学生被分配给了另一位老师。这就是我创建删除函数的原因。

这是我的显示表

<tr class="del_mentee<?php echo $fetch['id']?>">
<td><center><?php echo "$i";$i++?></center></td>
<td><center><?php echo $fetch['id']?></center></td>
<td><?php echo $fetch['name']?></td>    
<td><button class="btn btn-danger btn-delete" id="<?php echo $fetch['id']?>" type="button"><span class="glyphicon glyphicon-trash"></span></button></center></td>
</tr>
<script type="text/javascript">
$(document).ready(function(){
$('.btn-delete').on('click', function(){
var id = $(this).attr('id');
$("#modal_confirm").modal('show');
$('#btn_yes').attr('name', id);
});
$('#btn_yes').on('click', function(){
var id = $(this).attr('name');
$.ajax({
type: "POST",
url: "delete_mentee.php",
data:{
id: id
},
success: function(){
$("#modal_confirm").modal('hide');
$(".del_mentee" + id).empty();
$(".del_mentee" + id).html("<td colspan='6'><center class='text-danger'>Deleting...</center></td>");
setTimeout(function(){
$(".del_mentee" + id).fadeOut('slow');
}, 1000);
}
});
});
}); 
</script>

delete_mentee.php

<?php
require_once 'db.php';

if(ISSET($_POST['id'])){
mysqli_query($conn, "DELETE FROM `mentee` WHERE `mentee.id` = '$_POST[id]'"));
}
?>

我没有得到任何错误,但不知何故,删除功能不起作用,我的删除查询是对的吗?因为SQL不起作用,我不知道为什么它不起作用。

我想达到一个结果,我可以删除我不再合作的特定学员。

如果您想从桥中删除整个记录,那么您可以使用delete语句。

delete from bridge where id_stud  = 's01' and id_tch = '101';

那么输出将像这个

+------+--------+------+--+
| id   |id_stud |  id_tch |
+------+--------+----------
|  2   | s02    |   101   | 
|  3   | s02    |   201   |
+------+--------+---------+

在您的情况下,它应该是:

mysqli_query($conn, "DELETE FROM `mentee` WHERE `mentee`.`id` = '$_POST[id]'"));

或不带背景标记:

mysqli_query($conn, "DELETE FROM mentee WHERE mentee.id = '$_POST[id]'"));

注意,当你使用时

WHERE `mentee.id` = 123

它在mentee表中搜索mentee.id列,而不是您实际想要的id

在这种情况下,您可以从查询中删除表前缀:

mysqli_query($conn, "DELETE FROM mentee WHERE id = '$_POST[id]'"));

另一件事是Dharman在评论中提到的安全问题。您应该避免直接从$_POST传递数据,最简单的解决方案是:

$relationId = intval($_POST['id']);
mysqli_query($conn, "DELETE FROM mentee WHERE id = $relationId"));

自由思想:

此外,尽量保留一些结果,即id始终使用自动递增整数列,列名保持小写。为了保持惯例,我建议表的名称是studentsteachersstudent_teacher_mm,而不是mentee

最新更新