Posted at

[初心者]Codeigniterのformとvalidationで引っかかった件

More than 1 year has passed since last update.

フェイバリット回転寿司はサーモンとプリン、きりょうです。


■viewとcontrollerでうまくバリデーションまでたどり着かなかった話。

お名前フォームを下記のように書いてました。

    echo form_label("Name: ", "fullName");  //名前のラベルを作成

$data=array(
"name" => "name",
"id" => "name",
"value" => "Name",
);
echo form_input($data); //名前データのinput

そしてsubmitで送る。

    echo form_textarea($data);

$data=array(
"name" => "contactSubmit",
"value" => "SEND MESSAGE",
"class" => "contact_btn center-block"
);
echo form_submit($data);

コントローラーでバリデーション。1なら失敗2なら成功。

public function send_email(){

$this->load->library("form_validation"); //ロード
$this->form_validation->set_rules("name","name","required|min_length[1]"); //第一引数はformのタグ名、第二引数はエラーの時に出す項目名、第三引数がバリデーションルール(ミニマム1文字でおなしゃす指定をしている)

if($this->form_validation->run()==FALSE){

echo 1;exit;//バリデーションFALSEなら1

}else{

echo 2;exit;//それ以外(成功したら)2

}
}

できたフォーム

THINK AND SENSEq.png

まずはフォームに何も入れずに出力を確認。

2って出る。

_人人人人人人人_

> クソ検閲 <

 ̄Y^Y^Y^Y^Y^Y ̄

なぜかフォームに何も入れてないのにバリデーション通っちゃいます。

結果から言うと、フォームに入れてたvalueでした。

そりゃあ最初っから値入ってたらいけるよね〜

ということで下記に変更。

    echo form_label("Name: ", "fullName");  //名前のラベルを作成

$data=array(
"name" => "name",
"id" => "name",
"value" => "",

);
echo form_input($data); //名前データのinput

できたフォーム

THINK AND SENSE.png

Nameが半透明になってる。これじゃん。

ということで無事にFALSEの1が出力されました。

最初コントローラーで、

public function send_email($data)

とかやったり

public function send_email(){

$this->input->post('name')

とかでポスト受けとらなきゃいけないのかな〜とか

考えてたのですが、

validationクラスは勝手にポストの値をセットしてくれるようです。

関係ないけどlibraryとhelperって書いてあるのに日本語訳がバリデーションクラスって書いてあるの戸惑いますね。。

表記はバリデーションライブラリとかにしておいて、最初に

「ライブラリとはphpのクラスです」

って書いてくれれば親切ですね。

とりま現場からは以上です。