我正在开发一个非常简单的Web应用程序,用于在MySQL数据库中将他们自己的表中的教师,学生和家庭作业记录下来。将学生分配给教师,并记录学生已完成的家庭作业任务。
教师可以选择某项作业任务,然后选择其中一名学生完成作业。提交此项将记录学生已完成的作业。
表格如下:
教师
--------------------------
|teacher_id | name |
--------------------------
| | |
学生
--------------------------
|student_id | teacher_fk |
--------------------------
| | |
作业
--------------------------
|homework_id | details |
--------------------------
| | |
Homework_completion
-------------------------------------------
|completion_id | student_fk | homework_fk |
-------------------------------------------
| | | |
当教师选择家庭作业和学生并将其提交为完成时,使用MySQL INSERT如下
INSERT INTO homework_completion VALUES 'student_id', 'homework_id'
这两个值都是从用户提交的表单中检索的。如果用户使用浏览器开发人员工具,他们可以更改表单中的student_id,然后为他们不拥有的学生保存完成作业。
如何最好避免这种情况?有没有比先前做出选择以检查学生是否属于老师更好的选择?
答案 0 :(得分:0)
在您的会话中,您将存储教师的ID(登录用户)。
执行插入时,您可以使用INSERT INTO ... SELECT
强制执行规则:
INSERT INTO homework_completion (student_fk, homework_fk)
SELECT s.student_id, :homework_id
FROM student s
WHERE s.student_id = :student_id
AND s.teacher_fk = :teacher_id
如果学生的教师ID不匹配,将插入零记录。
如果特定学生和教师LIMIT 1
中可能存在重复记录,请将student
添加到select子句中。