我在使用codeigniter创建的表单时遇到问题。我已尝试过多种方法在网页上呈现表单。但是在不同的方面我没有成功。
我希望渲染这个
我尝试使用代码呈现表单:
<?php $this -> load -> helper('form');
$formattr = array('id="form1"');
form_open('registerUsr', $formattr);?>
<fieldset>
<legend>Registration Form</legend>
<p class="first">
<label for="firstName">First Name: </label>
<input type="text" id="name" name="firstName" size="20" value="<?php echo set_value('first_name'); ?>" />
</p>
</fieldset>
<p class="submit"><button type="submit" value="Submit" /></p>
<?php echo form_close(); ?>
我尝试使用codeigniter功能
创建它<?php echo form_open('registerUsr');
echo form_input('$data');
echo form_submit('submit', 'Submit');
echo form_close();?>
我尝试使用混合的html标签和辅助类函数来混合变种。
但是在所有方面,在网页<form class=“form1”>
上最终呈现表单时,标签都会丢失。而且不是index.php / registerUsr,而是进入index.php / searchUniv页面。 (我有Checked routes配置文件。它是正确的指向)
任何建议/想法都表示赞赏。
TIA:)
更新:这是控制器和路由文件
public function registration() {
$this -> template -> title -> set('Register');
$this -> template -> _content -> view('register_index', $overwrite = TRUE);
$this -> template -> _sidebar -> view('gen_sidebar', $overwrite = TRUE);
$this -> template -> publish();
}
public function registerUsr(){
$this -> template -> title -> set('Register');
$searchItem = $this -> input -> post('form1');
$this -> template -> publish();
}
}
register_index.php是问题中现在看起来没问题的代码。
$route['searchUniv']="sglobal/searchUniv";
$route['registration']="sglobal/registration";
$route['registerUsr']="sglobal/registerUsr";
模板是我写的自定义库,它在所有其他页面中工作得非常好。这个应用程序处于最后阶段,所以我可以说有95%的信心,模板工作正常。另外,我正在查看最终呈现页面的来源及其确切需要的内容。那么,我们可以在指向模板之前查看任何配置。
现在最终的渲染看起来像:
<form action="http://localhost/univapp/index.php/registerUsr" method="post" accept-charset="utf-8" id="form1" class="form1">
但是提交到http://localhost/univapp/index.php/searchUniv
仅仅是,我在同一页面上有另一个搜索表单(远处的div,不同的id,不同的名称,不同的类),它使用指向index.php / searchUniv的POST。那有什么问题吗?
答案 0 :(得分:1)
您的第一个示例不会回显form_open()
。尝试在函数调用之前添加echo。
<?php $this -> load -> helper('form');
$formattr = array('id="form1"');
echo form_open('registerUsr', $formattr);?>
<fieldset>
<legend>Registration Form</legend>
<p class="first">
<label for="firstName">First Name: </label>
<input type="text" id="name" name="firstName" size="20" value="<?php echo set_value('first_name'); ?>" />
</p>
</fieldset>
<p class="submit"><button type="submit" value="Submit" /></p>
<?php echo form_close(); ?>
默认情况下,表单也会提交到当前页面,这可能是它被定向到index.php / searchUniv的原因。
答案 1 :(得分:0)
如果不需要Codeigniter助手,请尽量避免使用Codeigniter助手,html渲染速度比php快。表单助手所需的全部是form_open(),因为这会添加csrf标记。 你的代码中似乎也有一些拼写错误!
<强>清单:强>
的应用/配置/ config.php中强> 的
$config['base_url'] = 'http://www.mysite.com/'; //I suspect this is your problem with routing
$config['csrf_protection'] = TRUE;
的应用/配置/ routes.php文件强> 的
$route['register'] = 'controller/get_method'; //form
$route['register/post'] = 'controller/post_method'; //validation
的视图/ registerUsr.php 强> 的
<?php if( validation_errors() ) : ?>
<p class=error>Please Correct the Errors below</p>
<?php endif; ?>
<?=form_open('register/post', array('id'=>'', 'class'=>''))?>
<fieldset>
<legend></legend>
<label for="firstname">
<span class=required>*</span>
First Name
<small class=helper>Enter your First Name</small>
</label>
<input type=text id=firstname name=firstname value="<?=set_value('firstname')?>"/>
<?=form_error('firstname')?>
<button type=submit>Submit</button>
</fieldset>
<?=form_close()?>
答案 2 :(得分:0)
发现错误。我正在查看“查看源代码”选项,以了解页面的呈现方式以及呈现的数据。但看看DOM检查器(Inspect Element)输出显示DOM仍然没有考虑表单标记。它删除了它作为DOM对由PHP填充的无效HTML执行的更正的一部分。
作为<input name=... .... />
提供的任何属性都会被填充为<input name=... .... >
,从而留下了大量的开放标记。在模板中显示< />
的每个标记都已更改<> </>
后,它就会开始工作。
简而言之,代码是通过验证器运行的,现在一切都很好。
感谢您的所有帮助!