php - 我不明白为什么DeleteTask.php不起作用,但RetrieveTask.php却起作用

标签 php mysql oop model-view-controller pdo

我一生都无法弄清楚为什么DeleteTask函数不起作用,因为它几乎与RetrieveTask相同;仅在不同文件中调用。

现在:

src/controller/RetrieveTask:

准备 PDO 数据库查询,并将其传递给 src/view/DisplayTask.php ,它使用 foreach 循环来回显行和 <a>链接到 src/redir/DeleteAndReturn.php 的元素。

这个文件只是执行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 .

最佳答案

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

     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;
    }
}
?>

关于php - 我不明白为什么DeleteTask.php不起作用,但RetrieveTask.php却起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41118504/

相关文章:

php - SQL:如何在数据字段中选择带逗号的数据?

php - 使用 PHP 和 Linux 从 PDF 文件中提取绘制的路径

php - 我想使用 MySQL XAMPP 通过 SQL 查询获取 100,000 条记录并保存在数组中,但它甚至没有获取 16,000 条记录并停止或显示

java - 如何在java中用另一个类关闭一个实例

java - 从具体类派生的抽象类

javascript - 管理 JS 继承失败

javascript - jquery 到现有的 php 页面

php - PHP 的 use 语句在加载类时是否会导致额外的工作?

sql - 添加字段以优化 MySQL 查询

php - Laravel 身份验证 : how to get user attributes?