【问题标题】:I cannot figure out why DeleteTask.php does not work, yet RetrieveTask.php does我不知道为什么 DeleteTask.php 不起作用,但 RetrieveTask.php 确实
【发布时间】: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.phpsrc/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 =&gt; 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


【解决方案1】:

正如 maxim_039 所建议的,我更改了将变量数组传递给 DB 构造的方式。不知何故,这解决了这个问题。

     function __construct()
     {
-        parent::__construct('mysql:host=localhost;dbname=todo;', 'root', 'alexel', array ('$opt'));
+        parent::__construct('mysql:host=localhost;dbname=todo;', 'root', 'alexel', $this->opt);
         echo "Connected to Database";
     }

这是数据库代码:

<?php
// Connect to the database using PDO and MySQL

class DbConnect extends PDO
{
    protected $dsn        = "mysql:host=localhost;dbname=todo;";
    protected $dbPassword = 'alexel';
    protected $dbUsrName  = 'root';
    protected $opt = array(
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    );

     function __construct()
    {
        parent::__construct('mysql:host=localhost;dbname=todo;', 'root', 'alexel', $this->opt);
        echo "Connected to Database";
    }
    function CloseConnection()
    {
        $this->DbConnection = null;
    }
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 2016-08-25
    • 2013-11-27
    • 1970-01-01
    • 2020-09-19
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多