使用CodeIgniter构建的表单无法正常工作

时间:2013-02-07 13:14:36

标签: php forms codeigniter

我在使用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。那有什么问题吗?

3 个答案:

答案 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=... .... >,从而留下了大量的开放标记。在模板中显示< />的每个标记都已更改<> </>后,它就会开始工作。

简而言之,代码是通过验证器运行的,现在一切都很好。

感谢您的所有帮助!