如何删除仅属于博客数据库中当前用户的博客?

时间:2012-12-12 23:20:44

标签: php codeigniter phpmyadmin blogs

我想在当前配置文件的所有者输入的博客下面有一个删除按钮,我已经尝试实现了一个deleteMyBlog函数但到目前为止还没有快乐。最新的方法是什么?

这是我的看法。我知道我需要一些删除按钮,但我不知道如何适应我当前的foreach循环:

  <?foreach($blogs AS $viewData):
  $delete = $viewData['id'];
 {
$id = $viewData->id;
$title = $viewData->title;
$body = $viewData->body;
$username = $viewData->username;
$date = $viewData->date;

?>

   <b> <?=$title?></b>
    <p><?=$body?></p>

      <p>posted by:<?=$username?></p>
      <p>date: <?=$date?></p>
   <?=anchor("blog/deleteMyBlog/$delete", 'delete')?>
<hr>

<?
}
?> 

我的模特:

class Blogmodel extends CI_Model
{
  public function __construct()
   {
    parent::__construct();
    } 

   function deleteMyBlog($id)
   {

    $this->db->where(array('id' => $id));
    $this->db->delete('blogs');

}

public function get_last_ten_entries()
{
    $query = $this->db->get('blogs', 10);
    return $query->result();

   }
public function insert_entry()
{
    $this->title = $this->input->post('title');
    $this->body = $this->input->post('text');
    $this->username = $this->session->userdata('username'); 
    $this->date = date("Y-m-d");

    $this->db->insert('blogs', $this);

   }
  }

控制器:

 class Blog extends CI_Controller {

public function _construct()
{
    parent::__construct();
    $this->load->model('Blogmodel','Blog'); 
    $this->load->model("profiles");

}


function deleteMyBlog($id) {

    $this->blogs->deleteBlog($id);

    redirect('blog');

}



public function index()
{

    $username = $this->session->userdata('username'); 

    $viewData['username'] = $username;

    $this->load->model('Blogmodel');


    if($this->input->post('act') =='create_post')
    {
        $this->Blogmodel->insert_entry();

    }


    $viewData['blogs'] = $this->Blogmodel->get_last_ten_entries();

    $this->load->view('shared/header');  
    $this->load->view('blog/blogtitle', $viewData);
    $this->load->view('shared/nav');
    $this->load->helper('form');// Load the form helper.

    // Lets set the stuff that will be getting pushed forward...
    $data = array();
    $data['form_open']=form_open();
    $data['form_title'] = form_input(array('name' => 'title'));
    $data['form_text'] = form_textarea(array('name' => 'text'));
    $data['form_hidden'] = form_hidden('act','create_post');
    $data['form_submit'] = form_submit('submit','Make Post');

    $this->load->view('blog/blogview');
    $this->load->view('blog/post', $data);



       $this->load->view('shared/footer');
    }


  }

再次感谢你们

2 个答案:

答案 0 :(得分:0)

最简单的方法是为变量分配用户名,然后使用SQL语句。

Delete from tbl where colname='$username'

这就是我这样做的方式,其他人可能有不同的方法。所以尊重那些会使用某些不同的人

答案 1 :(得分:0)

你因为这一点而得到错误:

<?foreach($blogs AS $viewData):
   $delete = $viewData['id'];

应该是这样的:

$delete = $viewData->id;

您以后正确使用完全相同的数据,为什么要尝试使用$ viewData作为数组,这是一个对象,但后面是2行的对象。除此之外,你在那里做的其他事情应该可以正常工作,但在实践中却相当危险。如果我去你的网站并在博客消失的最后用blogId输入该控制器功能的网址,那么你决不会检查用户是否应该被允许删除该博客。朦胧!=安全。意思是因为你认为人们没有找到链接并不意味着他们不会赢。

我个人将登录用户的userId保存到会话中并将会话保存到数据库中。然后,当我对用户记录执行任何操作时,我会进行检查以确保进行更改的用户具有进行更改的权限。

所以你的删除功能是这样的:

function deleteMyBlog($id)
{
    $this->db->where('username',$this->session->userdata('username');
    $this->db->where('id',$id);
    $this->db->delete('blogs');
}

此外,您应该使用userId而不是用户名来保存到其他表,据我所知,索引在数字ID上的效果更好,并且表中的整体数据更少。将userId 342保存到博客表所占用的空间比保存用户名bobsyouruncle3421少。

对于记录,我知道这不是问题的一部分,但实际上从数据库中删除内容有缺点。从长远来看,最重要的是搞砸了索引并减慢了查询速度。一个更好的解决方案是将状态或活动列添加到您可能要删除的任何表中,并为活动提供值1,为删除提供0。然后,而不是实际删除项目,您将其活动列更改为0.当显示项目时,您向显示查询添加对active = 1的检查。

这有两个目的,首先你不要搞砸索引,记录永远不会被删除只是修改,所以索引保持不变。第二个也是近乎重要的是你永远不会有意外删除你并不意味着删除的东西,它永远不会真正消失。所以你可以“取消删除”#34;任何时候任何事情。