PHPで、以下のURLのページの申込画面のように

エラーメッセージを次の画面に行かずに
申込みたいなボタンを押したら
エラー表示を入力している画面に
表示するにはどうしたら出来ますか?
https://trackings.post.japanpost.jp/delivery/delivery_request.do

まずHTMLで入力画面を作成。
そこからFORMでPOSTでPHPに
渡してエラーチェックをする。
※javascriptでのエラーチェックは行わない。

そしてエラーの場合はエラーメッセージを
HTML側に表示するのは出来ますか?

PHP側でlocationなどをして、別にエラーページを
作成するような処理はダメです。
Smartyを使用すると、URL欄にPHPという拡張子に
なるため、出来れば避けたい。
サーバ設定を変えてURLの表示を変えるとかはダメ。

他に方法はありますか??
ありましたら簡単なサンプルも教えて下さい。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/06/26 15:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:mlkc81 No.1

回答回数27ベストアンサー獲得回数2

ポイント35pt

少しずれた回答になりそうですが・・・。

まず、元のHTMLページにエラーメッセージを埋め込んでおきます。

しかし、表示しないようにしておきます。

フォームで受け取ったデータにエラーがある場合、locationで元のページに戻し、エラーメッセージを今度は表示するようにします。


これは、CSSをPHPによって生成すれば可能になると思います。

エラーを受け取っていない時はエラー表示を隠すCSSを生成。

エラーを受け取ったらそれを表示するCSSを生成。


ただし、この場合エラーメッセージは表示されるものの、すべての項目を再入力しなければいけなそうですが・・・。


もし、単に.phpを隠したいのであれば、

AddType application/x-httpd-php .php .do

などの設定をApacheに行えば出来たりしないかな、と想像・・・。

id:hopefully

なるほどw

CSSですか。

でも入力した項目を

再入力は避けたいですね。。。

Apacheの設定を変更するのはダメです。

すいません。

2007/06/20 10:30:18
id:chankaz No.2

回答回数53ベストアンサー獲得回数3

ポイント35pt
<?php

//↓送信ボタンが押されたら、入力内容を評価
if (isset($_POST['send'])) {

	$err = array();

	if (!$_POST['namae']) {
		$err['namae'] = '名前を入力して下さい';
	}

	if (!$_POST['mail']) {
		$err['mail'] = 'メールアドレスを入力して下さい';
	}

	if (!$err) {	//エラーがなければ次の処理

		/*
		(ここで何らかの処理をする) 
		*/

		$flag_send = 1;	//正常な処理が行われれば、フラグを立てる
	}
}

//ヘッダ出力
header("Content-Type: text/html; charset=(文字コード)");
header("Content-Language: ja");

echo '<html>
<head>
<title>申込フォーム</title>
</head>
<body>
<h1>申込フォーム</h1>
';

if (!isset($flag_send)) {	//処理が完了されていなければ入力フォーム表示

	echo '<form action="" method="post">
';

	echo '<p>お名前';

	//お名前のエラーがあれば表示
	if ($err['namae']) {
		echo $err['namae'].'<br>';
	}

	echo '<input type="text" name="namae" size="30" value="'.$_POST['namae'].'">
</p>
';

	echo '<p>E-mail';

	//E-mailのエラーがあれば表示
	if ($err['mail']) {
		echo $err['mail'].'<br>';
	}

	echo '<input type="text" name="mail" size="30" value="'.$_POST['mail'].'">
</p>
';

	//送信ボタン(「name="send"」を仕込んでおく)
	echo '<p>
<input type="submit" name="send" value="送信する">
</p>
</form>';


} else {	//処理が完了した場合の結果表示

	echo '<p>お申込みありがとうございました</p>';

}

echo '
</body>
</html>
';

?>

でいかがでしょうか。

(Smarty用に適宜差し替えて下さい。あと、上記例ではセキュリティ関連のことは一切していないので、そのままでは使えないと思いますが。)


当然フォーム自体もPHPとなりますが、

拡張子を隠したいのなら、このファイルだけ任意のフォルダに入れて、そのフォルダに

AddType application/x-httpd-php .php .htm

と書いた.htaccessを置けば、「form.htm」といったファイル名でも動きます。


文脈から、「『JS使えない環境のユーザーのことを配慮して』エラーを出したい」という風に解釈したのですが、.htaccessも不可というのであれば、JavaScriptを使うしかないと思います。

  • id:studioes
     勘違いしているようですが、これはちゃんと次のページに行っています(同じ画面を再度表示)

     処理フロー的には・・・
    1,入力値がなければ3へ。 入力値が正しければ5へ。
    2,エラー情報の出力
    3,入力フォームの出力
    4,終了
    5,次の画面を出力
    6,終了
    これだけのことです。
  • id:hopefully
    その処理概要はわかるんですが
    用は最初の入力画面のhtmlファイルに出力したいな
    と思いまして。。。。

    やはり無理ですよね?
    なんかPHP側でエラーコードを返して
    それをhtmlで表示するみたいな仕組です。
    HTML_AJAXとか使えばいいのですが
    なんか一旦サーバーサイドでクラスを
    作成するのが面倒だし、HTML_AJAXがインストール出来ない
    環境だとダメじゃないですか!!

    なのでなんかそんな感じのはないのですかね?
    わかりますかね?

  • id:chankaz
    ↓こういう意味ですか?
    http://income-seed.ck0.net/1000yen/demand.htm

    (わざと何も入力せずに送信ボタンを押してみて下さい)
  • id:hopefully
    そうですw
    まさしくこんな感じです。
  • id:tezcello
    studioes さんがコメントされている通りの動作ですね。
    > 用は最初の入力画面のhtmlファイルに出力したいな
    とコメントされていますが、
    最初の入力画面は
    <dt><label for="fname">お名前</label></dt>
    <dd>
    <input type="text" class="text" id="fname" name="fname" size="50" value="" />
    </dd>
    何も入力しなかった時の(エラー表示付きの)画面は
    <dt><label for="fname">お名前</label></dt>
    <dd>
    <em>*お名前をご記入下さい</em>
    <input type="text" class="text" id="fname" name="fname" size="50" value="" />
    </dd>
    のようにエラーを指摘する部分を追加したデータを生成しています。

    > 用は最初の入力画面のhtmlファイルに出力したいな
    をその通り受け取ると、前もってエラーメッセージ付きのHTMLデータを送っておきたいという事でしょうか?
    CSS で非表示にしておいて、必要になったら、CSSファイルの方を書き換える事で実現出来そうですが、表示内容(HTMLデータ)が全く同じなので、キャッシュが効いているとダメな様に思います。
    (もちろんリロードすればチャンと表示されるでしょうが)
  • id:ost3
    多分一番簡単に・・・

    <?php

    //--------- 略 ---------//
    //文字処理
    $str['name1'] = stripslashes(htmlspecialchars(mb_convert_kana($_POST['name1'], "KVa")));
    $str['name2'] = stripslashes(htmlspecialchars(mb_convert_kana($_POST['name2'], "KVa")));

    //エラーチェック
    if($str['name1'] == "" || $str['name2'] == "")
    {
    //表示したいメッセージ
    $err['name'] = "<BR>お名前は必須項目です。";
    }

    //--------- 略 ---------//
    ?>
    みたいな感じでエラーをチャックしたら。
    以下 HTML部には、「<?= $error['name'] ?>」っと入れてやってます。
    入力した内容をそのまま残したい場合などは、フォームのvalueに「<?= $str['name1'] ?>」直接書いちゃってます。
    場合によっては、セッションにそのまま突っ込じゃったりしてますが、セキュリティ上問題ある場合もあるようです。
    その辺はもっと詳しい方に聞いてください。

    <TR>
    <TH width="100" rowspan="2">お名前</TH>
    <TD width="60">漢字</TD>
    <TD>姓 <INPUT name="name1" type="text" value="<?= $str['name1'] ?>" size="16" class="input">
    名 <INPUT name="name2" type="text" value="<?= $str['name2'] ?>" size="16" class="input">
    <?= $error['name'] ?></TD>
    </TR>

    って感じでやってます。
    echo とかでもやってますが。エラーが設定されてなかったら何も表示されないです、試しにやってみてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません