1 回答
TA贡献1801条经验 获得超16个赞
当您寻求 SQL 解决方案时,这实际上更多的是应用程序/业务需求,而不是数据库问题。如果应用程序的业务逻辑需要限制用户创建的记录,那么应用程序应该查询现有的记录数量并向用户提供适当的消息传递。
从插入 SQL 中看不出来插入到表中的行是否tasks
包含用于标识哪个用户输入它的列。如果这是一个单用户应用程序,或者您的底层框架可能会自动处理此问题,那么这可能没问题。task
如果这两个都不成立,我们需要在该表中添加一列来捕获用户 ID 或其他标识信息,以便将每条记录与其各自的用户关联起来(例如,根据您的用例、IP 地址或会话 ID)可能就足够了)。
假设上述全部成立,我们应该实施一些更改:
切勿向用户显示表单,因为这会提供不支持/不允许的功能。相反,我们将用消息替换表单,以向用户提供适当的反馈。
如果我们收到
POST
用户在超出限制后尝试添加新记录的请求,请拒绝该请求并向用户显示一条消息。将一
userId
列或一些数据添加到表中以将用户关联起来tasks
。插入 new 时设置此新列的值
tasks
。
无论是 aGET
还是POST
,我们都希望在渲染页面之前查询用户的现有记录。
<?php
$errors = "";
$maxUserTasks = 7;
$db = mysqli_connect("localhost", "root", "", "certanet");
// Before even handling the request, query for the user's existing records
$sql = "SELECT task FROM tasks WHERE userId = 123"
$userTaskCountQuery = mysqli_query($db, $sql);
$userTaskCount = $userTaskCountQuery->num_rows();
if (isset($_POST['submit'])) {
if (empty($_POST['task'])) {
$errors = "";
}else if ($userTaskCount > $maxUserTasks){
$errors = "You already have $maxUserTasks tasks."
}else{
// Here is where you'll first want to check
$task = $_POST['task'];
$sql = "INSERT INTO tasks (task) VALUES ('$task')";
mysqli_query($db, $sql);
header('location: dashboard.php');
}
}
// Presumably, your page markup and form are somewhere down here
if ($userTaskCount > $maxUserTasks){
// display our error message here
}else{
// otherwise, display our form
}
?>
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报