【发布时间】: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