1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
當(dāng)您尋求 SQL 解決方案時(shí),這實(shí)際上更多的是應(yīng)用程序/業(yè)務(wù)需求,而不是數(shù)據(jù)庫(kù)問(wèn)題。如果應(yīng)用程序的業(yè)務(wù)邏輯需要限制用戶創(chuàng)建的記錄,那么應(yīng)用程序應(yīng)該查詢現(xiàn)有的記錄數(shù)量并向用戶提供適當(dāng)?shù)南鬟f。
從插入 SQL 中看不出來(lái)插入到表中的行是否tasks
包含用于標(biāo)識(shí)哪個(gè)用戶輸入它的列。如果這是一個(gè)單用戶應(yīng)用程序,或者您的底層框架可能會(huì)自動(dòng)處理此問(wèn)題,那么這可能沒(méi)問(wèn)題。task
如果這兩個(gè)都不成立,我們需要在該表中添加一列來(lái)捕獲用戶 ID 或其他標(biāo)識(shí)信息,以便將每條記錄與其各自的用戶關(guān)聯(lián)起來(lái)(例如,根據(jù)您的用例、IP 地址或會(huì)話 ID)可能就足夠了)。
假設(shè)上述全部成立,我們應(yīng)該實(shí)施一些更改:
切勿向用戶顯示表單,因?yàn)檫@會(huì)提供不支持/不允許的功能。相反,我們將用消息替換表單,以向用戶提供適當(dāng)?shù)姆答仭?/p>
如果我們收到
POST
用戶在超出限制后嘗試添加新記錄的請(qǐng)求,請(qǐng)拒絕該請(qǐng)求并向用戶顯示一條消息。將一
userId
列或一些數(shù)據(jù)添加到表中以將用戶關(guān)聯(lián)起來(lái)tasks
。插入 new 時(shí)設(shè)置此新列的值
tasks
。
無(wú)論是 aGET
還是POST
,我們都希望在渲染頁(yè)面之前查詢用戶的現(xiàn)有記錄。
<?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 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)