我正在使用PHP OOP来开发我的项目。基本上我有一个表单,当用户提交它时,它会完美地向表添加一个新行,如下所示:
正如您所看到的,默认情况下,有一个名为insertion
的字段设置为 0 。
然后我在这样的动作代码之后添加了一个基本的重定向语句:
echo "<META HTTP-EQUIV='Refresh' Content='0; URL=blognew.php?blog_id=$blog_id'>";
因此,插入完成后,它会立即将用户重定向到具有唯一blog_id
的同一页面,该页面生成如下:
$blog_id = uniqid('blog_post');
然后我在这里添加了另一个if语句(在同一页面上):
if(isset($_GET['blog_id'])){
$blog_id = $_GET['blog_id'];
$blogInserted = new Blogs();
if(($blogInserted->GetInsertion()) == 0){
echo "
</br>
<div class='alert alert-success'>
<strong>Success!</strong> Your <a href='blogdetails.php?blog_id=$blog_id' target='_blank'>blog</a> has been added successfully.
</div>
";
$exists = $blogInserted->AlreadyInserted($blog_id);
}
if(($blogInserted->GetInsertion()) == 1){
echo "
</br>
<div class='alert alert-warning'>
<strong>OOPS!</strong> Your blog had been added in the past. But you can view it <a href='blogdetails.php?blog_id=$blog_id' target='_blank'>here</a>.
</div>
";
}
}
基本上检查网址,如果已经使用自定义blog_id
提交了GET方法,则会调用包含方法Blogs
的类AlreadyInserted()
:
public function AlreadyInserted($blog_id)
{
if(!empty($blog_id))
{
$new = $this->_db->prepare("UPDATE blogs SET insertion = 1 WHERE blog_id = ?");
$new->bindParam(1,$blog_id);
$new->execute();
}
else
{
header("Location: php/includes/errors/021.php");
exit();
}
}
public function GetInsertion()
{
return $this->insertion;
}
它的作用是更新表并将现有行的insertion
设置为 1 。
通过这种方式,我可以检查$blogInserted->GetInsertion()) == 0
是否为真。
如果设置为 0 ,屏幕上会弹出一条成功消息,表明插入过程已成功完成。
如果$blogInserted->GetInsertion()) == 1
为真,则会显示警告消息。
这意味着如果用户刷新具有相同blog_id
的页面,则成功消息将消失,并且将显示警告消息。因为表格中的insertion
字段已设置为 1 而非 0 。
但问题是,它只会一直显示成功消息。虽然insertion
字段甚至设置为 1 !
我检查了回显gettype($blogInserted->GetInsertion())
,并以某种方式设置为 NULL 。
这意味着此GetInsertion()
方法存在一些错误,因为它应返回 0 或 1 。
我的代码的哪一部分被错误地写成了这件事发生了?你可以帮帮我吗?
注意:我没有添加表单的动作代码和html代码 他们工作正常,包括他们在这里是不必要的。