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

时间:2015-05-15 17:00:21

标签: php pdo

已找到解决方案,但发生了新问题 - 显示在此问题的底部

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

我几乎可以肯定问题是在我的PDO代码的最后一部分(在函数更新中),但不能指出它。你能救我吗?

与我的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'];

in&#34;连接到我的PDO代码&#34;必须成为

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

因为它必须等于setter和getter中的case项。现在令人烦恼的是,当我按下“更新”时。上一条消息仍然可见,所以我必须重新刷新。对此有何解决方案?

1 个答案:

答案 0 :(得分:0)

如果我理解正确您必须在current之后加载update个结果:

if(isset($_POST['update'])){
    $d->Report = $_POST['myreport'];
    $d->Id = $_POST['hidden'];
    $d->Update();
    $all = $d->getAll();
}

这样,在update之后您将获得新的(更新的)结果,您可以在我的循环中显示。