我正在创建一个函数,当他们的学员被分配给不同的老师时,老师可以删除他们的学员。
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
始终使用自动递增整数列,列名保持小写。为了保持惯例,我建议表的名称是students
、teachers
和student_teacher_mm
,而不是mentee
。