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 循环 .
中显示的新鲜(更新)结果
找到解决方案,但出现新问题 - 显示在该问题的底部
我创建了这个 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 循环 .