【发布时间】:2017-04-28 08:39:38
【问题描述】:
我终其一生都无法弄清楚为什么 DeleteTask 功能不起作用,因为它与 RetrieveTask 几乎相同;只在不同的文件中调用。
现在:
src/controller/RetrieveTask:
准备一个 PDO 数据库查询,并将其传递给 src/view/DisplayTask.php,后者使用 for each 循环来回显行,并使用一个链接到 src/redir/DeleteAndReturn.php 的 <a> 元素。
这个文件只执行src/controller/DeleteTask.php 和src/controller/ReturnToIndex.php。
文件代码及顺序如下:
检索任务
<?php
function RetrieveTask($db)
{
$sql = 'SELECT * FROM task';
return $db->query($sql);
}
?>
传递给 DisplayTask:
<?php
function DisplayTask($db)
{
foreach (RetrieveTask($db) as $row)
{
echo "<li>" . $row['tsk-name'] . "<br>" . $row['tsk-desc'] . "<a id=".$row['id']." class='btn btn-danger' href='/todo/redir/DeleteAndReturn.php'>Delete</a>" . "</li>";
}
}
?>
它被传递给/todo/home 目录中的index.php。我需要做的就是调用 DisplayTask($DbHandler) 其中 $DbHandler 是 db 类的一个瞬间。
现在src/controller/DeleteTask.php:
<?php
function DeleteTask($db)
{
echo "Delete";
$sql = ' DELETE FROM task where id= 2 ';
return $db->query($sql);
}
?>
和src/controller/ReturnToIndex.php:
<?php
function ReturnToIndex()
{
header('Location: /todo/home');
}
?>
导致redir/DeleteAndReturn.php
<?php
include_once('../src/model/db/DbConnect.php');
include_once('../src/controller/DeleteTask.php');
include_once('../src/controller/ReturnToIndex.php');
$DbHandler = new DbConnect();
DeleteTask($DbHandler);
$DbHandler->CloseConnection();
ReturnToIndex();
?>
我尝试将项目 ID 作为查询字符串中的获取参数传递。删除所有表。手动选择id。我无法让它工作。任何帮助将非常感激。我用谷歌搜索并查找了几个小时的文档。我觉得这是一件非常简单的事情,只是让我想不通。
完整代码在这里:https://github.com/liengesbor。
【问题讨论】:
-
所以你没有看到任何错误?请在创建 PDO 时将其添加为选项:
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION以及 PHP 中的 error_reporting 等。请在此处查看步骤:stackoverflow.com/questions/15990857/… -
可能是因为您已将 id=2 硬编码为 delete 并且该 id 已被删除?
-
@e4c5 我正在考虑这个问题,但他写道:“[...]我尝试将项目 ID 作为获取参数传递到查询字符串中。删除所有表。手动选择 ID。 [...]"
-
@maxime_039 将 id 作为 get 参数传递不起作用,因为该 id 从未在 delete 方法中使用。不仅使用了硬编码的 2
-
@e4c5 好吧,我想(我希望)他在使用参数时尝试在语句中添加参数。但让我们看看他的答案。
标签: php mysql oop model-view-controller pdo