0

codeigniter を使用して作成されたフォームの操作に問題があります。Web ページでフォームをレンダリングする方法をいくつか試しました。しかし、さまざまな点で失敗しています。

私はこれをレンダリングしようとしています

コードでフォームをレンダリングしようとしました:

<?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タグとヘルパークラス関数を組み合わせて、さまざまなハイブリッドを試しました。

しかし、あらゆる点で、Web ページのフォームの最終的なレンダリングでは、<form class=“form1”&gt;タグが欠落しています。また、index.php/registerUsr の代わりに、index.php/searchUniv ページに入ります。(ルート構成ファイルを確認しました。正しく指定されています)

任意の提案/アイデアをいただければ幸いです。

ティア:)

更新:コントローラーとルートファイルは次のとおりです

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";

template は私が書いたカスタム ライブラリで、他のすべてのページで問題なく動作しています。このアプリケーションは最終段階にあるため、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

参考までに、index.php/searchUniv を指す POST を使用する同じページ (遠くの div、別の ID、別の名前、別のクラス) に別の検索フォームもあります。それによる問題はありませんか?

4

3 に答える 3

0

Codeigniter ヘルパーが不要な場合は使用しないようにしてください。html は php よりも高速にレンダリングされます。フォーム ヘルパーに必要なのは、csrf トークンを追加する form_open() だけです。また、コードにいくつかのタイプミスがあるようです!

チェックリスト:

アプリケーション/設定/config.php

$config['base_url'] = 'http://www.mysite.com/'; //I suspect this is your problem with routing
$config['csrf_protection'] = TRUE;

application/config/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()?>
于 2013-02-07T14:21:38.167 に答える
0

エラーが見つかりました。ページがどのようにレンダリングされ、どのデータが表示されているかを確認するために、「ソースを表示」オプションを調べていました。しかし、DOM インスペクタ (Inspect Element) の出力を見ると、DOM がまだフォーム タグを考慮していないことがわかりました。これは、PHP によって入力された無効な HTML に対して DOM が実行した修正の一部として削除されました。

as で指定された属性はすべて<input name=... .... />入力されている<input name=... .... >ため、多くの開いたタグが残ります。< />テンプレートに記載されているすべてのタグが変更される<> </>と、機能し始めました。

簡単に言えば、コードはバリデーターを介して実行され、すべて問題ありません。

ご協力いただきありがとうございます。

于 2013-02-08T06:47:56.013 に答える
0

最初の例は echo ではありませんform_open()。関数呼び出しの前にエコーを追加してみてください。

<?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 に送信されているためです。

于 2013-02-07T14:13:34.613 に答える