我正在CodeIgniter上写博客。
博客的一个重要方面是帖子的创建和更新。
我想重新使用我用来创建帖子的视图来更新它。
为此,我想将post数据传递给表单。
发生验证错误时,表单应该显示传递给它的数据,而不是参数数据。
所以我想把数据传递给表单,但是在发布之后,set_value
方法必须覆盖参数。
到目前为止,我有这个表单来创建一个帖子。
如前所述,我想修改此表单,以便可以重用它来更新帖子。
<h2><?php echo $title; ?></h2>
<?php
echo form_open('posts/' . $function);
echo form_fieldset();
echo '<legend>' . $title . '</legend>';
echo form_hidden('id', (isset($id) ? $id : '0'));
echo form_input('title', set_value('title', 'Title'), 'size="50"');
echo '<input type="date" name="date" id="date" value="' .
form_prep(set_value('date', date('Y-m-d'))) .
'" />';
echo form_textarea('content', set_value('content', ''));
echo form_input('category', set_value('category', 'Category'), 'size="50"');
echo form_input('keywords', set_value('keywords', 'Keywords'), 'size="50"');
echo form_submit('submit', 'Submit');
echo '<input type="reset" name="clear" value="Clear" />';
echo form_fieldset_close();
echo form_close();
?>
$function
应该保存 * 创建 * 或 * 更新 *。$title
是 * 创建帖子 * 或 * 更新帖子 *,不影响表单功能。
我已经为帖子ID添加了一个隐藏字段,在更新帖子时使用。
我想使用发送到视图的参数,并使用isset
来检查它们的存在性,从而在创建或更新帖子之间产生差异。但这将与set_value
冲突。我不太确定是否可以将数据发布到表单中,以及会有什么后果。
5条答案
按热度按时间kiayqfof1#
解决这个问题的一种方法是在加载视图之前用值填充
$_POST
数组。这将允许
set_value()
查看先前输入的值以及从数据库中检索的值CodeIgniter函数set_value()
被设计为在POST操作后“重建”表单,在该操作中提交不满足某些要求(通常是空的/错误的字段)。在这种情况下,为了对用户友好,我们希望将字段值设置为刚刚提交的“旧”字段值。为了做到这一点,函数在$_POST
中查找以检索字段的这些值(假设您以通常的方式使用它)。(With关于性能:我所建议的任何开销都是非常微不足道的,并且由于操作是网络事务的一部分,因此任何影响都不太可能在实践中被测量。)
voj3qocg2#
虽然你可以将$_POST的每个值都设置为合适的值,但是如果你没有使用其中的一些变量,你可能会产生额外的开销。一个更有效的方法是:
现在请记住,如果要访问总共60个变量中的20个、30个等,则填充整个
$_POST
变量会更有效。将变量存储在会话中是否是一个合理的解决方案?它将消除每次都要考虑是否填充了
$_POST
的工作。最后,如果必须填充:
9bfwbjaz3#
这就是我在发生验证错误时用来保存的,表单显示传递给它的数据,而不是参数数据。在set_value()方法中设置发布的值。
jjhzyzn04#
我做了和你一样的事情,使用了提交和编辑视图,这就是我解决它的方法。
还有
这取决于我使用的价值观/论坛的类型,如果我的表格代表和反对,通常会选择后者。
这样证明:
在创建页面上,$person将为空,因此如果它不是一个post请求(即表单提交还没有失败),它将首先尝试从POST中获取它;则给予一个空字符串。
否则,它将尝试从$person中获取属性'name',因此$person-〉name
EDIT:所有这些函数都在我为表单操作创建的帮助器中
eeq64g8w5#
您只能使用以下命令:
就是这样。