猿问

如何限制任务列表中允许输入的任务数量?

我的问题与 PHP/SQL 有关。


我知道如何使用“LIMIT 5”来限制返回的结果。如何限制允许的输入?那么用户在删除现有任务之一之前无法添加更多任务吗?所以基本上我如何限制输入而不是结果。此时我仍然可以添加任务,但结果有限,它会将旧任务推到视野之外。我希望不可能添加更多任务,除非在达到列表限制时将其删除。


更新:共享代码:


(是的,我知道我需要使用准备好的语句)


头:


<?php 

    $errors = "";


    $db = mysqli_connect("localhost", "root", "", "certanet");


    if (isset($_POST['submit'])) {

        if (empty($_POST['task'])) {

            $errors = "";

        }else{

            $task = $_POST['task'];

            $sql = "INSERT INTO tasks (task) VALUES ('$task')";

            mysqli_query($db, $sql);

            header('location: dashboard.php');

        }

  } 

  

  if (isset($_GET['del_task'])) {

    $id = $_GET['del_task'];

  

    mysqli_query($db, "DELETE FROM tasks WHERE id=".$id);

    header('location: dashboard.php');

  }


  ?>

任务列表:


<div class="todobox">

<div class="menutitle" id="category">

    Persoonlijke takenlijst

</div>

<div class="inhoud">

Hieronder is het mogelijk om je eigen taken bij te houden.


<form method="post" action="dashboard.php" class="input_form">

<?php if (isset($errors)) { ?>

    <p><?php echo $errors; ?></p>

<?php } ?>

        <input type="text" name="task" class="task_input">

        <button type="submit" name="submit">Toevoegen</button>

    </form>

  <table>


    <tbody id="todo">

        <?php 

        $tasks = mysqli_query($db, "SELECT * FROM tasks ORDER BY id DESC LIMIT 7");


        $i = 1; while ($row = mysqli_fetch_array($tasks)) { ?>

            <tr>

                <td> <?php echo $i; ?> </td>

                <td class="task"> <?php echo $row['task']; ?> </td>

                <td class="delete"> 

                    <a href="dashboard.php?del_task=<?php echo $row['id'] ?>">x</a> 

                </td>

            </tr>

        <?php $i++; } ?>    

    </tbody>

</table>


</div>

</div>

FFIVE
浏览 98回答 1
1回答

侃侃尔雅

当您寻求 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'])) {&nbsp; &nbsp; if (empty($_POST['task'])) {&nbsp; &nbsp; &nbsp; &nbsp; $errors = "";&nbsp; &nbsp; }else if ($userTaskCount > $maxUserTasks){&nbsp; &nbsp; &nbsp; &nbsp; $errors = "You already have $maxUserTasks tasks."&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; // Here is where you'll first want to check&nbsp; &nbsp; &nbsp; &nbsp; $task = $_POST['task'];&nbsp; &nbsp; &nbsp; &nbsp; $sql = "INSERT INTO tasks (task) VALUES ('$task')";&nbsp; &nbsp; &nbsp; &nbsp; mysqli_query($db, $sql);&nbsp; &nbsp; &nbsp; &nbsp; header('location: dashboard.php');&nbsp; &nbsp; }}// Presumably, your page markup and form are somewhere down hereif ($userTaskCount > $maxUserTasks){&nbsp; &nbsp;// display our error message here}else{&nbsp; &nbsp;// otherwise, display our form}?>
随时随地看视频慕课网APP
我要回答