【问题标题】:Loading a codeigniter view with a form from inside another view从另一个视图中加载带有表单的 codeigniter 视图
【发布时间】:2012-06-22 18:10:40
【问题描述】:

使用 codeigniter,我一直在尝试在 foreach 循环中加载视图,如下所示:

$posts = $this->postslibrary->getAllPosts();
foreach($posts as $post){
  $home['content'][$i] = $this->load->view('post', $post['data'], true);
  $i++;
}
$this->load->view('head');
$this->load->view('home', $home);
$this->load->view('footer');

每个帖子视图看起来有点像这样:

<div class="postnum<?=$post_num?>">
  <p>Posted by: <?=$poster_name?></p>
  <p>Reply to: <?=$poster_name?></p>
  <form>
  <input type='text' />
  <input type='submit' />
  </form>
</div>

并且它们在“主页”视图中大部分成功加载(为了彻底性,在下方)。

<div ="posts">
  <?php
    for($i=0;$i<$count;$i++)
    {
      echo($content[$i]);
    }
  ?>
  <div class="clear"></div>
  <a href='/posts/browse/'>Load more items</a>
</div>

但我的输出最终看起来像:

<div class='posts'>
  <div class='postnum1'>
    <p>Posted By: Jim</p>
    <p>Reply to Jim</p>
    <input type='text' />
    <input type='submit' />
  </div>
</div>

为什么我的表单标签没有通过?

【问题讨论】:

  • 你也可以发布你的主页视图文件的php代码。我想看看你如何处理 $home 数据 - 问题可能就在那里。
  • 你试过给你的表单一些属性吗?从那以后,您使用哪个浏览器是 chrome ?
  • 您可能必须对表单标签 (w3.org/TR/html401/interact/forms.html#h-17.3) 进行操作。对于这个特定的东西,你应该粘贴你的实际代码,而不是它看起来的样子。我要寻找的东西:匹配的开始和结束标签,匹配“”,数据中的随机引号。像这样的编程也太复杂了。只需将您的代码放在视图中。复杂性 == 容易出错。
  • 从我对 chrome 的了解来看,他会删除任何非标准的工作属性,这曾经发生在我身上。所以我认为你应该尝试让你的表单更加标准化,就像@MichaelOzeryansky 说的那样。
  • 这件事今天刚发生在我身上,我记得一两天前你的问题。我试图在另一个表单中加载一个表单,而内部表单被删除了。我不知道 CI 是删除它还是浏览器(尽管我认为它是浏览器)。您可能会检查您是否无意中尝试嵌套表单。

标签: codeigniter


【解决方案1】:

检查当前表单周围是否已有表单。 Chrome 是不接受这一点并删除第二种形式的浏览器之一。在表单中使用表单是不好的做法,我建议您找到不同的解决方案来处理表单。

【讨论】:

    【解决方案2】:

    答案略偏左,但请查看CodeIgniter Form Generator。我已经用过几次了,它似乎非常适合从数组生成表单。一开始就有点难以理解它,但是一旦你进入它就会很好地工作。

    基本思想是您从普通控制器实现一个表单控制器,然后将其输出到您的视图文件中。它可能是您正在尝试的更优雅(和可持续)的解决方案。

    【讨论】:

      猜你喜欢
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多