[PHP-users 430] Re: フォームのチェック
BAC
php-users@php.gr.jp
Sun, 01 Jul 2001 10:43:36 +0900
BACです。ようやく全容を理解しました。
On Sun, 1 Jul 2001 07:27:18 +0900
"tyunn" <tyunn@to.email.ne.jp> wrote:
> 俊介です。
> 自分自身へPOSTしているフォームがあります。
> submitした際に入力内容のチェックを行っていますが、
> 入力もれなどが見つかった場合は以下のようにもとのフォームに
> 戻ってエラーメッセージを出しています。
> その際に、フォーム内で入力した内容をすべて表示させておきたい
> のですがよい方法はありますか?
> phpは3.0.18-i18n。
>
> ■aaa.php3
> <? if($regist){
> include('chk.inc'){
include('chk.inc') ; ?
> // 正常に入力された場合の処理
> }
> ?>
> <html>
> <body>
> <?
> if ($message==msg01){
> echo "**a1が入力漏れです**"";
> }
> ?>
> <form method=post action=aaa.php>
action=aaa.php3 ?
> <input type=text name=a1 value=<? echo a1;?>>
> <input type=text name=a2 value=<? echo a2;?>>
a1,a2 -> $a1, $a2 ?
> <select name=a3><option value=MM>MM</option><option
> value=SS>SS</option></select>
> </form></body></html>
>
> ■chk.inc
> <?
> if (!$a1){
> header("location: http://host/aaa.php3?message=msg01");
> exit;
> }
> ?>
これでは動くものも動かないでしょう。抜粋の仕方がちょっと完全じゃないの
で推測が混じりますが、おそらくaaa.php3のフォーム部品の中にhiddenの
registというのがあるのでしょう。それを見て1回目に呼ばれたのか、2回目以
降に呼ばれたのか判断し、2回目以降であればchk.incを呼び出し、チェックを
行ってaaa.php3を呼び出す、わけでしょう、きっと。
chk.incでaaa.php3?message=msg01に飛ばしている以上、それまでの入力、a1,
a2, さらにregistも失われます。つまり、2回目以降の流れはこうなります。
1. $registがセットされているため、chk.incをインクルードする
2. $a1がセットされていなかった場合、$message=msg01という状態でaaa.php3に
飛ばされる
3. $registはセットされていないため、chk.incはインクルードされない
4. $message=msg01なので「入力漏れ」と表示
5. $a1, $a2はセットされていないため、初期値にはなにも表示されない
chk.inc を
if (!$a1) {
$message = 'msg01' ;
}
に変えて、aaa.php3を
<? if($regist){
include('chk.inc') ;
if ($message==msg01){
echo "**a1が入力漏れです**"";
} else {
// 正常に入力された場合の処理
}
}
?>
<html>
<body>
.......
とかすればよいのでは?
----------
BAC (bac@dev-nul.com)