2011-07-20 15 views
2

だから私は+ボタンを押すことによって、ユーザーが好きなだけ多くの犬を追加できるフォームがあるとしましょう。なぜset_value()はfoo [bar] [x] [lorem]配列の入力に対応していませんか?

形が似ている:CodeIgniterのオン

Dog #1 <br/> 
<input name="house[dogs][][name]" value="<?=set_value('house[dogs][0][name'])?>"/> 
<input name="house[dogs][][age]" value="<?=set_value('house[dogs][0][age]')?>" /> 

Dog #2 <br/> 
<input name="house[dogs][][name]" value="<?=set_value('house[dogs][1][name'])?>"/> 
<input name="house[dogs][][age]" value="<?=set_value('house[dogs][1][age]')?>" /> 

、私はset_value()は同様に動作するためにフォームの検証を実行します。

$house = $this->input->post('house'); 
$dogs = $house['dogs']; 

$i = 0; 
foreach($dogs AS $dog){ 
$this->form_validation->set_rules("house[dogs][$i][name]", 'Dog Name', 'required'); 
$this->form_validation->set_rules("house[dogs][$i][age]" , 'Dog Age' , 'required'); 
$i++; 
} 

この全体のことはしません仕事、どのようにset_value()は、そのような配列の入力をサポートするように?

ありがとうございます。

答えて

3

入力nameは、最初のパラメータset_value()とまったく同じにする必要があります。

[]は1つではなく、もう1つは[0]です。

+0

私はあなたがここで何を意味していたかについて少し不明でしたが、今は意味があり、これが問題だと思います。 –

1

非常に関連しています:http://codeigniter.com/forums/viewthread/179581/皮肉なことに、私は数か月前に投稿しましたが、今朝起きました。また、関連

CodeIgniter: Validate form with multidimensional POST data


<ignore>

長い話を短くするために、CodeIgniterでは、デフォルトでは非常によく、インデックスフィールド名を処理しません。

単にset_value()の欠点の周りに入力し、作業を再作成するには、このような何か試すことができます。

<?php 
$value = isset($_POST['house']['dogs'][1]['age']) ?  // was the value posted? 
     form_prep($_POST['house']['dogs'][1]['age']) : // if so, clean it 
     '';           // if not, leave empty 
?> 
<input name="house[dogs][1][age]" value="<?php echo $value; ?>" /> 

をあなたはおそらくループを使用しているので、出力にこれらの、私はそれはないと思いますあまりにも多くの煩わしさがあります。別々の値の配列に値を設定して読み込むこともできます。望むならば、そのアイデアを得ることができます。 set_value()は自動的にform_prep()を実行するので、追加したのです。

私は検証についてあまりよく分かりません。面倒ですが、難しくはありません。検証方法はいつでも手動で実行できます。例:

if ($this->form_validation->valid_email($this->input->post('email')) {} 

あなただけの簡単な方法を取ると、私が処理するためのCIの検証が容易になりますと信じてdog_age[]、同様に、単一のインデックスを使用するようにフィールド名を変更することもできます。 CIコアでのこれらの日の修正を期待して、運が良ければ最高です。

</ignore>


EDIT:予想通り、私は、実際の仕事に必要があり、これは私をエスケープする方法は考えているが、どうやら検証およびSET_VALUE - ではない、これは最近の変化であったかどうかわから場合や、問題は本当に存在しませんでした。私は間違いなくそれ以前に問題があったことを覚えています。リンクされた投稿は他のものも示唆しています。

CodeIgniter: Validate form with multidimensional POST data

が、私はそれをテストした(2.0.2を実行している)、それが実際の作業ではありません。しかし、この答えをチェックしてください。私はchange logには何も見ませんが、私はそれを試して、うまくいったのです。最新のバージョンを確認して、もう一度やり直してください。もし何か不足している場合はお知らせください。

your other answerのように、の代わりにname="house[dogs][1][name]"のようなフィールド名を明示的にインデックスするだけでよいでしょう。

+0

私はそれが世界中で最もクリーンではないことに同意します。時にはCIが私に言います。(私が配列の入力を使用する理由は、 '$ this-> input-> post( 'info')' – Ryan

+0

多次元の入力名を使うのは大変便利です。あなたが尋ねてからわずか45分です。夜間シフトが彼らを見る機会を得るまで、数日の間に質問を浮かべる心配はありません:) –

+0

@ライアン:上記を参照してください^^^。私も解決策に興味があります。誰かがより良いものを持っているかどうかを見てみましょう。 –

関連する問題