【问题标题】:Getting ID from previous page to field on next page (CodeIgniter)从上一页获取 ID 到下一页的字段(CodeIgniter)
【发布时间】:2013-02-12 17:29:22
【问题描述】:

基本上,我想要做的就是从显示特定文章的视图页面开始,然后有一个删除链接到一个页面,该页面带有一个字段和一个用于删除该文章的按钮,其中 id 显示在该字段中。

在过去的几天里,我尝试将 id 放入 URL 链接中,即“delete?id=20”并尝试使用 $_GET 访问它,然后我尝试了“delete/20” " 和 URI 段。 然后我尝试使用会话等,但我不确定哪个是最好的,因为我没有让它们中的任何一个工作。

我决定展示我未修改的代码并从头开始这是我的代码:

view.php

<?php 
echo '<h2>'.$news_item['title'].'</h2>';
echo '<p>'.$news_item['text'].'</p>'; 
?><br><br>

<a href="http://website.com/CodeIgniter/index.php/news">
Go to latest news</a>

<a href = "http://website.com/CodeIgniter/index.php/news/delete">Delete</a><br>

删除.php

<h2>Delete a news item</h2>

<?php echo validation_errors(); ?>
<?php echo form_open('news/delete') ?>

<form>
<label for="delete">Article Number</label><br> 
<input name="id" class="resizedTitlebox" value="id" /><br>      
<br>

<input type="submit" name="submit" value="Delete news item" /></form>

news.php(控制器)

 <?php

 class News extends CI_Controller {

public function __construct()
{
    parent::__construct();
    $this->load->model('news_model');
}


public function view($slug)

    {

$data['news_item'] = $this->news_model->get_news($slug);

   if (empty($data['news_item']))
   {
    show_404();
   }

$data['title'] = $data['news_item']['title'];

$this->load->view('templates/header', $data);
$this->load->view('news/view', $data);
$this->load->view('templates/footer');

    }


    public function delete() {
    {   
      $this->load->helper('form');
      $this->load->library('form_validation');

      $data['title'] = 'Delete news item';

      $this->form_validation->set_rules('id',  'required');


      if ($this->form_validation->run() === FALSE)
      {
                $this->load->view('templates/header', $data);   
                $this->load->view('news/delete');
                $this->load->view('templates/footer');

      }
      else
      {
            $data['id'] = $this->news_model->delete('id');
            $this->load->view('news/success');
              }
             }
         }

news_model.php(模型)

    <?php

    class News_model extends CI_Model {

public function __construct()   {

    $this->load->database();
}


   public function get_news($slug = FALSE){

     $this->load->helper('text');

 if ($slug === FALSE){
     $this->db->order_by('id', 'desc');
    $query = $this->db->get('news');
     return $query->result_array();
 }

 $query = $this->db->get_where('news', array('slug' => $slug));
 return $query->row_array();
     } 



     public function set_news(){

     $this->load->helper('url');

     $slug = url_title($this->input->post('title'), 'dash', TRUE);

     $data = array(
         'id' => $this->input->post('id'),
          'title' => $this->input->post('title'),
          'slug' => $slug,
          'text' => $this->input->post('text'));

      return $this->db->insert('news', $data);
        }


    public function delete ($id)  {

          $this->db->where('id',$this->input->post('id'));
          $this->db->delete('news');
      }
     }

routes.php(配置)

    $route['news/(:any)'] = 'news/view/$1';
    $route['news/delete'] = 'news/delete';
    $route['news'] = 'news';
    $route['default_controller'] = 'news';
    $route['404_override'] = '';

提前感谢您提供的任何帮助!

@jeroen 回答

“您没有在删除链接中传递任何值;您应该在路径或查询字符串中添加一个 ID” - 我假设您的意思是

  <a href = "http://website.com/CodeIgniter/index.php/news/delete?article_id=<?php echo $news_item['id']; ?>">Delete</a>

所以使用 article_id。那我可以在delete控制器中定义article_id吗?我不确定如何做到这一点。

回答: $this->input->get(article_id)

【问题讨论】:

    标签: php forms codeigniter session


    【解决方案1】:

    您的删除过程看起来很奇怪,并且有一些错误:

    1. 您没有在表单中指定方法,因此默认为GET,但在删除函数中您使用$this-&gt;input-&gt;post('id')。你应该把你的表格改成&lt;form action="" method="POST"&gt;;
    2. 您正在向您的删除函数发送一个您不使用的变量:$id。这是您的控制器中的一个字符串,尽管模型中的名称似乎暗示了一个 ID。但无论如何你都没有使用它...
    3. 当您在控制器中调用 delete 函数时,您期望得到一个返回值,但您的函数没有返回任何内容。
    4. 您没有在删除链接中传递任何值;您应该在路径或查询字符串中添加一个 ID,但请注意不要使用相同的名称 $id,如果您使用相同的控制器,因为表单将在没有确认的情况下验证;
    5. 您没有在 delete 控制器中获得任何 ID 值并将其传递给视图以填充 ID 字段的值。

    顺便说一句,id 没有输入类型,但这不会导致任何问题,因为它默认为 text。

    【讨论】:

    • 我不确定我是否已经明确了自己,因为表单本身成功地从数据库中删除了一个手动输入 id 的项目。但是,我确实同意其中的一些不必要的内容,并且我已经更改了您提到的方面。对于
      ;我以前尝试从 url delete?id=20 获取 id 时尝试过这个。但要知道是否有用,我确定我更改了配置。如果我在过去几周才进入 PHP/CodeIgniter 没有多大意义,我提前道歉。
    • @Purgatory 好的,在我的回答中添加了一些额外的内容。
    • @Purgatory 如果路由不干扰查询字符串(有段时间没有使用 CodeIgniter ......),该变量应该在控制器中作为 $this-&gt;input-&gt;get(article_id) 可用。
    • 谢谢,在您的帮助下,我设法让它工作,甚至设法在编辑页面上使用它,非常感谢您的帮助。我将标记为已回答,但是,我有一个基于图像的垂直导航栏,为方便起见,我已将其粘贴在所有视图页面上,但是如果可以在 codeigniter 中使用它,我正在徘徊,我知道它可以用基于文本的导航但基于图像的导航?如果您不确定,请不要担心,感谢您的帮助。
    【解决方案2】:

    我认为他们不需要删除视图页面。您可以直接从新闻列表页面中删除新闻项目

    <a href = "http://website.com/CodeIgniter/index.php/news/delete">Delete</a><br>
    

    用这个代替这一行

    <a href = "<?php echo site_url("news/delete/".$news_item['id']); ?>Delete</a>
    

    在你的控制器中

    public function delete($id){
        $this->news_model->delete($id);
        $this->load->view('news/success');
      }
    

    在你的模型中使用这个

    function Delete($id){
            $this->db->where('id', $id);
            if($this->db->delete("news"))
               return true;
            else
               return false;
        }
    

    【讨论】:

    • 谢谢你,我最初只是创建一个基本的 CRUD 网站,接下来我会在测试并回复你之后寻找一种方法来做到这一点。感谢您的回复。
    • 所以我试了一下,&lt;a href = "&lt;?php echo site_url("news/delete/".$news_item['id']); ?&gt;"&gt;Delete&lt;/a&gt; 没有在页面上显示删除链接?谢谢。
    • 编辑:我将其更改为以下&lt;a href = "&lt;?php echo ("news/delete/".$news_item['id']); ?&gt;"&gt;Delete&lt;/a&gt; 并显示链接,但它得到一个 404,因为它无法识别 delete/67 ....这不是进入我无法进入的 URI 段之前开始工作。谢谢。
    • 如果 site_url 不起作用,那么你必须使用 ful 链接:website.com/CodeIgniter/index.php/news/delete/"<?php echo $news_item['id'] ?>>Delete
    • 我知道这是不久前的事了,但我又试了一次,它仍然会产生 404,因为如果您有任何进一步的调整可以推荐,它不会将删除/id 识别为页面,我将不胜感激.谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2021-05-15
    • 2016-06-30
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    相关资源
    最近更新 更多