質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

2回答

620閲覧

PHP 入力チェック

minusion

総合スコア17

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2018/05/19 04:30

編集2018/05/19 04:51

CakePHPにて、コントローラーでpreg_matchを使い入力チェクを行った後に、エラーがあれば入力された値を持ったまま入力画面へ戻り(render)、初期値としてセット。エラーがなければ確認画面に飛ぶ処理を作ろうとしています。

PHP(コントローラー:入力チェック処理)

1 private function __preg_match($hankakuei) { 2 if (preg_match ( "/^[a-zA-Z]+$/", $hankakuei ) !== 0) { 3 $moge =$hankakuei; 4 // 値が取れているかの確認 5 echo print_r ( $moge, true ); 6 if (preg_match ( "/^[a-zA-Z]+$/", $moge ) !== 0) { 7 } 8 } 9 }

PHP(コントローラー:確認画面処理)

1 public function contact_2() { 2 // お問い合わせフォーム確認画面 3 $this->autoRender = true; 4 $this->autoLayout = true; 5 6 // 配列を返す 7 $errors = $this->Contact->invalidFields (); 8 9 // 入力された値を持ってくる 10 $input_name = $this->request->data ( 'input_name' ); 11 $honbun = $this->request->data ( 'honbun' ); 12 $zenkaku = $this->request->data ( 'zenkaku' ); 13 $mailaddress = $this->request->data ( 'mailaddress' ); 14 $hankakuei = $this->request->data ( 'hankakuei' ); 15 $hankakusuu = $this->request->data ( 'hankakusuu' ); 16 17 // 入力された値をセット 18 $this->set ( 'input_name', $input_name ); 19 $this->set ( 'honbun', $honbun ); 20 $this->set ( 'zenkaku', $zenkaku ); 21 $this->set ( 'mailaddress', $mailaddress ); 22 $this->set ( 'hankakuei', $hankakuei ); 23 $this->set ( 'hankakusuu', $hankakusuu ); 24 25 // 入力チェック 26 $moge = $this->__preg_match ( $hankakuei ); 27 }

PHP(view:入力画面)

1 <form action="Contact/contact_2" method="post"> 2 3 <p>名前</p> 4 <input type="text" name="input_name" /> 5 <br /> 6 7 <p>本文</p> 8 <textarea name="honbun" rows="4" cols="40"></textarea> 9 <br /> 10<!-- JavaScriptを使った入力チェック --> 11<div class="zenkaku" id="zenkaku"> 12 <p>全角文字</p> 13 <input type="text" name="zenkaku" value=""/> 14 <br /> 15</div> 16<div class="mailaddress" id="mailaddress"> 17 <p>メールアドレス</p> 18 <input type="text" name="mailaddress" value=""/> 19 <br /> 20</div> 21 22 23 24<!-- PHPを使った入力チェック --> 25<div class="hankakuei" id="hankakuei"> 26 <p>半角英字</p> 27 <input type="text" name="hankakuei" value=""/> 28 <br /> 29</div> 30 31<div class="hankakusuu" id="hankakusuu"> 32 <p>半角数字</p> 33 <input type="text" name="hankakusuu" value=""/> 34 <br /> 35</div> 36 37 <input type="submit" value="送信" /> 38 39 40 </form>

PHP(view:確認画面)

1<body> 2 3 4<h2>確認画面</h2> 5 <form action="contact_3" method="post"> 6 <?php // TODO 入力された値を表示 ?> 7 <input type ="hidden" name = "input_name" value ="<?= $input_name ?>" /> 8 <input type ="hidden" name = "honbun" value ="<?= $honbun ?>" /> 9 <input type ="hidden" name = "zenkaku" value ="<?= $zenkaku ?>" /> 10 <input type ="hidden" name = "mailaddress" value ="<?= $mailaddress ?>" /> 11 <input type ="hidden" name = "hankakuei" value ="<?= $hankakuei ?>" /> 12 <input type ="hidden" name = "hankakusuu" value ="<?= $hankakusuu ?>" /> 13 14 <p>名前</p> 15 <p><?= $input_name ?></p> 16 17 <p>本文</p> 18 <?php // TODO 入力された値を表示 ?> 19 <p><?= $honbun ?></p> 20 21 <p>全角文字</p> 22 <p><?= $zenkaku ?></p> 23 <br /> 24 25 <p>メールアドレス</p> 26 <p><?= $mailaddress ?></p> 27 <br /> 28 29 <p>半角英字</p> 30 <p><?= $hankakuei ?></p> 31 <br /> 32 33 <p>半角数字</p> 34 <p><?= $hankakusuu ?></p> 35 <br /> 36 37 38 39 <input type = "submit" value ="送信" /> 40 </form> 41 <a href="contact_1">戻る</a> 42 43</body>

renderを使えばできるのではないかと考えたのですが、頭の中でまとまりません。
どなたか、ご存知な方いらっしゃいましたら教えていただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/19 04:39

エラーの有無で切り分けるしかないように思うのですが、まずは自分が思うようにやってみてください。
guest

回答2

0

自己解決

以下のように記述することで解決しました。

PHP(コントローラー)

1 // 半角英字エラーチェック文字表示 2 $error_massage = array (); 3 $error_massage = $this->__validFilds ( "hankakuei", $hankakuei, $type = 'hankauei', $error_massage ); 4 5 $this->set ( 'error_massage', $error_massage ); 6 7 var_dump ( $error_massage ); 8 9 if (isset ( $error_massage )) { 10 $this->render ( 'contact_1' ); 11 }

PHP(コントローラー)

1 private function __validFilds($target_id, $target_data, $type = 'hankauei', $error_massage) { 2 switch ($type) { 3 case "hankauei" : 4 $tmp = $this->__preg_match_hankakuei ( $target_id, $target_data, $error_massage ); 5 break; 6 default : 7 } 8 return $tmp; 9 }

PHP(コントローラー)

1 private function __preg_match_hankakuei($target_id, $target_data, $error_massage) { 2 if (preg_match ( "/^[a-zA-Z]+$/", $target_data ) === 0) { 3 return $error_massage [$target_id] = "半角英字を入力してください"; 4 } 5 }

PHP(view:入力画面)

1<div class="hankakuei"> 2 <p>半角英字</p> 3 <input type="text" id="hankakuei" name="hankakuei" value=""/> 4 <?= print_r($error_massage,true); ?> 5 6 <p><?php 7 if(!empty($error_massage['hankakuei'])){ 8 echo $error_massage['hankakuei']; 9 } 10 ?> 11 </p> 12 13 <br /> 14</div>

投稿2018/05/19 08:15

minusion

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CakePHP にあまり詳しくないため、一般的なフレームワーク使用時を元にしたざっくり回答となります

PHP フレームワークを使用する際、入力チェクを自前実装するのはあまり得策ではありません。
Cake であれば、バリデーション Cookbook あたりを参考にすると良いです。

で、利用者数の多いフレームワークであれば、大抵チュートリアルも用意されています。チュートリアルと例

チュートリアルでは、POST → 検証 → DB 登録 → 出力 までを一通り説明してあるので、お作法が理解できるようになると思います。

ざっとチュートリアルを眺めてみましたが、まずは Cake の用意するビューテンプレートで記述してみることをオススメします。その際、h() 関数の利用は必須なので、忘れずに^^
(個人的には View をテンプレートエンジン利用に切り替えれば、より良いコードになりそうに思います)

投稿2018/05/19 05:30

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問