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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

解決済

2回答

2608閲覧

予期しないところにエラーメッセージが表示する

ryohasegawa

総合スコア437

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

0クリップ

投稿2017/11/04 05:34

フォームにデータを入力し、フォームが送信されるとエラーチェックを行います。
エラーがあれば、エラーメッセージを表示するという簡単なプログラムです。
入力項目はいくつかあり正しく入力されている項目のデータは一時保管し、どこかの項目でエラーがあれば、正しく入力されている項目のデータは一時保管したデータを入れるという風にしています。

###code
下のコードはフォームのコードです。
if($fome_data->data_get(name)) echo($fome_data->data_get(name));データがあれば初期値で代入するコードです。

html

1<input type="text" class="form-control" name="name" value="<? if($fome_data->data_get(name)) echo($fome_data->data_get(name)); ?>">

下のコードは、フォーム送信時にエラーをチェックするコードです。

php

1class Form_Data{ 2 // 保管用変数 3 private $Form_data; 4 private $Err_data; 5 6 // 入力データ用 7 public function data_set($name, $data){ 8 $this->$Form_data[$name] = $data; 9 } 10 public function data_get($name){ 11 return ($this->$Form_data[$name]); 12 } 13 14 // エラー用 15 public function err_set($name, $data){ 16 $this->$Err_data[$name] = $data; 17 } 18 public function err_get($name){ 19 echo($this->$Err_data[$name]); 20 } 21} 22 23$fome_data = new Form_Data; 24 25function Chack_Form($fd){ 26 27 // アニメ名処理 28 try{ 29 if ($_POST["name"] == ""){ 30 throw new NullException(); 31 } 32 $fd->data_set(name, $_POST["name"]); 33 }catch(Exception $e){ 34 $fd->err_set(name, $e->getMessage()); 35 } 36} 37 38if ($_SERVER['REQUEST_METHOD'] == "POST"){ 39 Chack_Form($fome_data); 40 41 echo($fome_data->err_get(name)); 42} 43

###問題
入力が間違っていた場合エラーは$fd->err_set(name, $e->getMessage());にキーと値で保管され、フォーム入力画面に表示され、思い通りになるんですが、このエラーメッセージがなぜかフォームの入力欄にも反映されてしまします。

自分でどれだけコードを見てもなぜ表示されるのかが全くわかりません。助けてください。

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

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

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

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

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

guest

回答2

0

ooeok さんの指摘以外では
echo($fome_data->err_get(name));

echo $fome_data->err_get('name');
とか。

同じような箇所が他にもありますね。。。

動かないコードを提示して「教えてくれ」と言われても、「なんだかなー」って感じ。

せめてエラーは潰して提示してほしいですね。

追記
とりあえずのレベルでエラーを潰すと以下のようになります。

php

1<?php 2$_SERVER['REQUEST_METHOD'] = "POST"; 3$_POST['name'] = NULL; 4 5class Form_Data{ 6 // 保管用変数 7 private $Form_data; 8 private $Err_data; 9 // 入力データ用 10 public function data_set($name, $data){ 11 $this->Form_data[$name] = $data; 12 } 13 public function data_get($name){ 14 return $this->Form_data[$name]; 15 } 16 // エラー用 17 public function err_set($name, $data){ 18 $this->Err_data[$name] = $data; 19 } 20 public function err_get($name){ 21 return $this->Err_data[$name]; 22 } 23} 24 25$fome_data = new Form_Data; 26 27function Chack_Form($fd){ 28 try{ 29 if ($_POST["name"] == ""){ 30 throw new Exception('POST が空です。'); 31 } 32 $fd->data_set('name', $_POST['name']); 33 }catch(Exception $e){ 34 $fd->err_set('name', $e->getMessage()); 35 } 36} 37 38if ($_SERVER['REQUEST_METHOD'] == "POST"){ 39 Chack_Form($fome_data); 40 echo $fome_data->err_get('name'); 41}

投稿2017/11/07 16:02

編集2017/11/10 10:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ryohasegawa

2017/11/09 15:10

エラーは潰してのエラーとはどこのとですか?
退会済みユーザー

退会済みユーザー

2017/11/09 15:54

記述したスクリプトを動かしてみるとイイですよ。 'Undefined variable'とか'Use of undefined constant' が発生するので。
ryohasegawa

2017/11/10 09:56

表示しません・・・・
退会済みユーザー

退会済みユーザー

2017/11/10 10:08

では、まずそれを表示させるところからですね。 ほんと、その程度のところは潰してからにしてほしいです。。。
退会済みユーザー

退会済みユーザー

2017/11/13 01:54

やってから聞きましょうよ。 > ほんと、その程度のところは潰してからにしてほしいです。。。 とすでに書いているので。 ちなみに私が回答したのは、エラーを潰したあとで意図した動作を行わない箇所が出てくるため、ヒントとして記述しました。 追記に関しては、ざっくりしたテスト方法を伝えるために記述してます。
guest

0

ベストアンサー

$this->$Err_data[$name] = $data;

$this->Err_data[$name]の間違い?

投稿2017/11/06 07:09

ooeok

総合スコア469

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

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

ryohasegawa

2017/11/07 14:30

回答ありがとうございます。 Form_Data クラスの中のerr_set メソッドですか? これは、name(ID)とdata(今回はエラーメッセージ)を受けとり、$Err_data配列のnameにdataを入れる事をしています。 例外処理でエラーが発生したらこのクラスのこのメソッドが呼ばれエラーメッセージが保管されるようになっています。
ooeok

2017/11/07 15:41

ryohasegawaさんが提示したエラーチェックコードは一部を抜粋していて、しかもコピペではなく入力し直したんですよね? パッと見でも見つけられるくらいおかしな点が多いです。 動かないコードを提示して「教えてくれ」と言われても、「なんだかなー」って感じ。 実際に動いているコードでどう書かれているか分からないので推測するしかないんですが、Form_Dataクラスのプロパティが > private $Form_data; > private $Err_data; この2つだけだったら、やはり$this->Err_data[$name]が正解です。 $this->$Err_data['name']だと、$Err_data連想配列のkey=$nameの値が名前のプロパティを指します。 要はForm_DataクラスのErr_dataプロパティを参照していません。
ryohasegawa

2017/11/09 15:16

解決しました。 ありがとうございます。 クラス内で自分の持っているメソッドにアクセスする際に$をつけていたためおかしな挙動になっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問