我一生都无法弄清楚为什么DeleteTask函数不起作用,因为它几乎与RetrieveTask相同;仅在不同文件中调用。
现在:
src/controller/RetrieveTask:
准备 PDO 数据库查询,并将其传递给 src/view/DisplayTask.php
,它使用 foreach 循环来回显行和 <a>
链接到 src/redir/DeleteAndReturn.php 的元素。
这个文件只是执行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 .
最佳答案
正如 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/