プロが教える店舗&オフィスのセキュリティ対策術

<form method="post" action="">
<input type="text" name="hoge1" value="$_POST['hoge1']">
<input type="text" name="hoge2" value="$_POST['hoge2']">
<input type="submit" value="送信">
</form>

データ送信してもフォーム内にデータが残るようにしたのですが、HTMLをこのままにして、PHPの方で$_POST['hoge']の中身を消去したいのですが、どのようにすればいいでしょうか?

記入漏れの時にはそのデータが残り、すべてを記入してデータ送信後は再び何も書かれていない状態にしたいのです。できれば、Javascriptを使わないでやりたいと考えています。よろしくお願い致します。

A 回答 (4件)

>条件付きで決めたいのです。

つまり、フォームに記入漏れがない場合は
>送信してクリアし、記入漏れがある場合は送信しないで引き継ぐのです。

あ、わかりました。「送信」という言葉はフォーム→スクリプトを指すのが普通なのですが、この場合はスクリプトからDBへのinsertなどのことですね。

>(ちなみに、その入力データはそこで確認することができます。)

というのは記入漏れがあった場合だけ確認可能ということですね。こちらも了解しました。

#インタフェイスの良否は本題じゃないので、これまでにします。


本題については、No.2のinu2さんの方法でOKだと思います。どのみちPOSTされた値は「そのまま」では使わない(使えない・使うべきではない)でしょうしね。

この回答への補足

色々と有難うございました。

どうやら私の環境では、POSTの値はスクリプトの最後で削除しても、リロードされた後も残ってしまうようです。

補足日時:2008/02/02 10:58
    • good
    • 0
この回答へのお礼

アドバイス、ありがとうございます。

スクリプトが長くなってきて、変数を整理するのが難しくなってきました。
(どの変数は引き継いでいて、どの変数は新規の値が入っているとか。)

また試してみます。

お礼日時:2008/01/30 12:48

>記入漏れの時にはそのデータが残り、すべてを記入してデータ送信後は


>再び何も書かれていない状態にしたいのです。

>入力データを送信した後、OK画面を出すことなく、また同じ画面に戻る
>ようになっています。
>(ちなみに、その入力データはそこで確認することができます。)
>ですから、$_POST['hoge']の値は(条件付きで)そのまま引き継がなく
>てはいけないのです。

結局、クリアしたいのですか?引き継ぐのですか?このインタフェイスでは記入漏れで受付不可だったのか、ちゃんと受け付けられたのか使用者には判断が出来にくいと思いますけど。(条件付きで)という条件とかどういうものでしょうか?せめて「受付OK」→「所定の処理」→「そのことを伝える画面(戻るための自分へのリンクつき)を表示してexit」くらいは簡単にできるのでは?それとも「そういう仕様」なんでしょうか?
    • good
    • 0
この回答へのお礼

> クリアしたいのですか?引き継ぐのですか?

条件付きで決めたいのです。つまり、フォームに記入漏れがない場合は送信してクリアし、記入漏れがある場合は送信しないで引き継ぐのです。

> このインタフェイスでは記入漏れで受付不可だったのか、ちゃんと受け付けられたのか使用者には判断が出来にくいと思いますけど。

入力と出力が同じ画面にあると考えてください。使用者にはそれが受け付けられたということが送信後の画面(同一画面)でわかるわけです。

お礼日時:2008/01/30 11:09

ブラウザで入力



---------------------------hoge.php内の処理
$hoge1 = $_POST['hoge1'];
$hoge2 = $_POST['hoge2'];
$message = '';

if($hoge1と$hoge2が両方とも記入されているか)
{
//保存するなどの処理
$message = '保存しました';
$hoge1='';
$hoge2='';
}

ptint $message;
print '<input type="text" name="hoge1" value="'.$hoge1.'" />';
print '<input type="text" name="hoge2" value="'.$hoge2.'" />';
(formタグは省略しています)


とかでいいんじゃないでしょか?


スーパーグローバル(_POSTとか_GET)を操作することは基本的にしないほうが良いですよ。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

何故だか分かりませんが、(PHP内で)条件分岐をした後、その値($_POST['hoge'])を消しても
まだどこかのキャッシュかメモリ媒体に残って読み込まれてしまうのです。

スーパーグローバルを操作することは控えた方がよいとのことでした。
理由はよく分かりませんが、ローカルな変数を使った方が分かりやすく安全ということでしょうか?

今度ご指摘の通り、スーパーグローバルをローカル変数に置き換えた上で、その値を消して読み込んでみようと思います。

お礼日時:2008/01/30 02:08

普通、POSTされたデータに不具合があって再入力の場合にはこういうhtmlを出力しますが、データOK→処理のあとは別のhtmlを返しませんか?入力フォームを再度返すと受け取られたのかどうかも不安ですし・・。



#「登録しました」とか「送信しました」とかだけの画面など

まぁ、$_POST['hoge1'] = ""; でもunset($_POST)でもクリア出来るとは思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

入力データを送信した後、OK画面を出すことなく、また同じ画面に戻るようになっています。
(ちなみに、その入力データはそこで確認することができます。)
ですから、$_POST['hoge']の値は(条件付きで)そのまま引き継がなくてはいけないのです。

$_POST['hoge']="";は試してみましたが、値はそのまま引き継がれてしまいました。
unset($_POST)は知りませんでした。今度試してみたいと思います。

お礼日時:2008/01/30 01:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!