PHP 必须更新 while 循环中显示的 PDO 数据库的内容,但将其删除

PHP has to update content from PDO database shown in while loop, but removes it instead

找到解决方案,但出现新问题 - 显示在该问题的底部

我创建了这个 while 循环,它显示了我的数据库中的所有内容,并让用户可以通过输入新值并按 'Update' 按钮来编辑它。一切正常,除了当我按下 'Update' 按钮时, 我的对象的值被删除而不是更新 。所以我的输入字段的值变成空白,但它必须显示填写的值。

我几乎可以肯定问题出在我的 PDO 代码的最后一部分(在函数 Update 中),但我无法将矛头指向它。你能帮帮我吗?

连接到我的 PDO 代码

<?php  
include_once('classes/Day.class.php');

$d = new Day();
$all = $d->getAll();

if(isset($_POST['update'])){

$d->Report = $_POST['myreport'];
$d->Id = $_POST['hidden'];
$d->Update();

}

?>

我的 while 循环

<?php

while ($displayAll = $all->fetch(PDO::FETCH_ASSOC)) {
    echo 
    "
    <form method='POST' action=''>
    <label>Day " . $displayAll['id'] . ":</label>
    <input type='text' name='myreport' value='" . $displayAll['myreport'] . "' /> 
    <input type='hidden' name='hidden' value='" . $displayAll['id'] . "' />
    <button type='submit' name='update''>Update</button>
    </form>
    ";
}

?>

我的函数

<?php

include_once('Db.class.php'); // connection to the Db.

class Day{

    private $m_iId;
    private $m_sMyreport;

    public function __set($p_sProperty, $p_vValue){
        switch($p_sProperty){

            case 'Id':
                $this->m_iId = $p_vValue;
                break;

            case 'Myreport':
                $this->m_sMyreport = $p_vValue;
                break;
        }
    }

    public function __get($p_sProperty){
        switch($p_sProperty){
            case 'Id':
                return $this->m_iId;
                break;

            case 'Myreport':
                return $this->m_sMyreport;
                break;
        }
    }

    public function Update(){
        $conn = Db::getInstance();
            $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

            $statement = $conn->prepare("
                UPDATE `tbl_dailyreport` 
                SET `myreport` = :myreport
                WHERE `id` = :id
            ");

            $statement->bindValue(":myreport",$this->m_sMyreport);
            $statement->bindValue(":id",$this->m_iId);
            $statement->execute();
    }

    public function getAll () {
        $conn = Db::getInstance();
        $result = $conn->query("SELECT * FROM tbl_dailyreport");
        return $result;
    }

}

?>

感谢所有帮助!

编辑:找到解决方案 + 新问题

$d->Report = $_POST['myreport'];

在 "Connection to my PDO code" 必须变成

$d->Myreport = $_POST['myreport'];

因为它必须等于 setter 和 getter 中的大小写项。现在烦人的是,当我按 'Update' 时,之前的消息仍然可见,所以我必须刷新两次。对此有什么解决方案吗?

如果我理解正确的话,您必须在 update:

之后加载 current 结果
if(isset($_POST['update'])){
    $d->Report = $_POST['myreport'];
    $d->Id = $_POST['hidden'];
    $d->Update();
    $all = $d->getAll();
}

这样,在 update 之后,您将获得可以在 我的 while 循环 .

中显示的新鲜(更新)结果