【问题标题】:MySQL database items wont update. PHP wont enter if($_POST['edit_submit'])MySQL 数据库项目不会更新。 PHP 不会进入 if($_POST['edit_submit'])
【发布时间】:2023-03-22 07:00:01
【问题描述】:

我正在尝试使用任务的新值更新我的任务页面。我的表单如下所示:

<?php if (isset($_GET['edit_task'])): ?>
    <form action="" method="POST" class="form-inline">
        <td class="task">
            <div class="form-group mr-sm-3 mb-2 inputfield">
                <input type="text" name="taskvalue" class="form-control col-12" value="<?php echo $row['task'] ?>">
            </div>
        </td>
        <td class="date">
            <div class="form-group mr-sm-3 mb-2 inputfield">
                <input type="date" name="datevalue" class="form-control col-12" value="<?php echo $row['duedate'] ?>">
            </div>                                    
        </td>
        <td class="edit" style="font-size: 0.8rem;">
            <button type="submit" name="edit_submit" class="btn btn-primary mb-2">Edit</button>
            <input type="hidden" name="id" value="<?=$row['id']?>">
        </td>
    </form>
<?php else: ?>
    <td class="task">
        <?php echo $row['task'] ?>
    </td>
    <td class="date">
        <?php echo $row['duedate'] ?>
    </td>
    <td class="delete edit move" style="font-size: 0.8rem;">
        <a href="index.php?move_task=<?php echo $row ['id']; ?>"><i class="fas fa-check-square fa-2x"></i></a>
        <a href="index.php?edit_task=<?php echo $row ['id']; ?>"><i class="fas fa-pen-square fa-2x"></i></a>
        <a href="index.php?del_task=<?php echo $row ['id']; ?>"><i class="fas fa-minus-square fa-2x"></i></a>
    </td>
<?php endif ?>

我更新值的 PHP 代码如下所示:

//edit items to database
if (isset($_GET['edit_task'])) {
    if (isset($_POST['edit_submit'])) {
        $id = $_POST['id'];
        $task = $_POST['taskvalue'];
        $rawdate = htmlentities($_POST['datevalue']);
        $insertdate = date("Y-m-d", strtotime($rawdate));

        if (empty($task)) {
            $message['type'] = "error";
            $message['text'] = "You must fill in a task first.";
        } else {
            mysqli_query($db, "UPDATE tasks (task, duedate) SET (task = '$task', duedate = $insertdate) WHERE id = $id");

            header('location: index.php');
        }
        $debuglog2 = "edit task working 2";
    }
    $debuglog1 = "edit task working 1";
}

你看到$debuglog1 = "edit task working 1";了吗?当我按the update icon 时,它会在我的页面中显示这个。所以第一个if (isset($_GET['edit_task'])) 正在工作。第二个调试日志$debuglog2在我按the edit button后不会显示在我的网站上,所以我认为它不会进入if (isset($_POST['edit_submit']))。 2 个调试日志都在我的 HTML 中的表之外回显。通过点击上面的链接可以访问图标和按钮的图像。 HERE 是一个总结我的问题的视频。

该应用程序还能够向数据库添加任务。这部分工作正常。我使用相同的表单来更新我的任务,除了 name 属性不同,我使用相同的 PHP 脚本来更新任务,除了这个有一个 UPDATE Query 并检查是否在开始时按下了编辑图标。

我尝试切换ifs,在我的表单中放置了input hidden id元素,我的按钮名为edit_submit,我的表单是POST。我不知道为什么它不会进入第二个 if 语句。我认为我的 SQL 查询是正确的,即使它甚至不会在同一层次结构中显示调试日志。我尝试在$_GET$_POST 之间进行更改,但没有任何变化。这是您可以在 SQL 中做的最简单的事情之一,但我无法让它工作。 YouTube 和其他论坛帖子已经告诉我我输入了什么,所以我不知道出了什么问题。有谁能帮忙吗?提前致谢。

【问题讨论】:

  • $_GET['edit_task'] 在提交表单时不会在 POST 请求中设置。
  • @arkascha 你是什么意思?
  • 在实现实际更新尝试的代码中,您测试 both 超全局数组的变量:$_GET $_POST。您的表单定义了一个 POST 请求而不指定 URL,因此我假设 $_GET 不包含任何值。这将导致您永远不会输入更新逻辑。
  • 除此之外:您的代码容易受到 sql 注入攻击。您肯定想了解结合使用“准备语句”和“参数绑定”来防止此类漏洞的好处。
  • @arkascha okey,我将 action="" 更改为 action="index.php",但它仍然无法执行任何操作。

标签: php html mysql database phpmyadmin


【解决方案1】:

当一个表单被发布时,$_GET 变量中将没有任何内容。只有 $_POST 将包含数据。所以你对 $_GET 的检查失败了,正是因为你已经发布了一个表格。

日志文件(在 apache 网络服务器的情况下)(在 *nix 环境的情况下)通常位于名为 /var/log/apache2/error.log 和 /var/log/apache2/access 的文件中.log...

您通常可以打开终端并输入以下内容:

sudo tail -f /var/log/apache2/error.log ...这将使用 apache2 累积的最新日志不断更新您的终端...这也会显示您的 PHP 错误,这将使您的生活轻松多了。

【讨论】:

  • "当一个表单被发布时,$_GET 变量中将没有任何内容。" ——这可能不是真的。 $_GET 超全局将包含查询字符串中的任何内容。由于action 设置为"",因此在发布表单时的查询字符串将包含加载包含表单的页面时查询字符串中的任何内容。
  • 哦,好吧,哎呀! :) 感谢@Quentin 提供的信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多