- 締切済み
PHP+HTMLの確認画面から入力画面に戻る際のデータ保持について質問
PHP+HTMLの確認画面から入力画面に戻る際のデータ保持について質問致します。 1.入力→2.確認→3.実行の3ページを作成しましたが、 2.確認で入力した値が間違っていた場合、1.入力に戻って訂正する仕様です 私は2.確認の戻るボタンにjavaのhistory.back();を使ったのですが ブラウザやOSにより、戻った際にデータが保持されていない場合があるとの事だったので 他の方法がないかご教授下さい。サンプルコードを書いて頂くと助かります。 以下、作成したコード 1.入力画面(mail.html) <html> <body> <form action="chk.php" method="post"> 件名:<br> <input type="text" name="subject" size="30" value=""><br> 送信者名:<br> <input type="text" name="name" size="30" value=""><br> メールアドレス:<br> <input type="text" name="mail" size="30" value=""><br> 本文:<br> <textarea name="message" cols="30" rows="5"></textarea><br> <br> <input type="submit" value="確認する">  <input type="reset" value="クリア"> </form> </body> </html> 2.確認画面(chk.php) <?php $name = $_POST["name"]; $message = $_POST["message"]; $subject = $_POST["subject"]; $mail = $_POST["mail"]; ?> <html> <body> <form action="send.php" method="post"> 件名:<?php echo $subject; ?><br> 送信者名:<?php echo $name; ?><br> メールアドレス:<?php echo $mail; ?><br> 本文:<?php echo $message; ?><br> <input type="submit" value="これでOK">    //下記の戻るボタンで戻るとデータ保持をするようにしたい。history.back以外で。 <input type="button" value="戻る" onclick="history.back();"> <input type="hidden" name="name" value="<?php echo $name; ?>"> <input type="hidden" name="message" value="<?php echo $message; ?>"> <input type="hidden" name="subject" value="<?php echo $subject; ?>"> <input type="hidden" name="mail" value="<?php echo $mail; ?>"> </form> </body> </html> 3.送信画面(send.php) <?php mb_language("Japanese"); mb_internal_encoding("UTF-8"); $message = "名前:" . $_POST["name"] . "\n本文:" . $_POST["message"]; if (!mb_send_mail("hoge@example.com", $_POST["subject"], $message, "From: " . $_POST["mail"])) { exit("メールの送信に失敗しました。"); } ?> <html> <body> <p>メールが送信されました。</p> </body> </html> 初心者ですので、わかりやすい表記をお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taisei64
- ベストアンサー率33% (1/3)
$_SESSIONを使ってやる方法がいいと思います。 下記のソースはすべてPHPです。 nameとmessageを例にとって書きます。 すべてのファイルの最初に <?php session_start(); ?>//セッション開始の宣言をする ・確認画面 POST受け取った後に $_SESSION["name"]=$name;//セッション発行 $_SESSION["message"]=$message; ・入力画面 最初に $name=$_SESSION["name"];//セッションを受け取る message=$_SESSION["message"]; フォームのところで echo "<input type=\"text\" name=\"name\" size=\"30\" value=\"$name\">"; echo "<textarea name=\"message\" cols=\"30\" rows=\"5">$message</textarea>\"; ・送信画面 $_SESSION["name"]='';//セッションを空にする $_SESSION["message"]=''; こんな感じでどうでしょうか?
- bakabona
- ベストアンサー率40% (4/10)
セキュリティー上の問題は後回し、、にして動作面のみの回答すると 一番簡単なやり方は、「戻るボタン」を別フォームにしちゃうやり方。 まずは、入力画面「main.html」もPHPファイル「main.php」にしといて、 確認画面に「戻るボタン」用の別フォームを設置 <form action="main.php" method="post"> <input type="submit" value="戻る"> <input type="hidden" name="name" value="<?php echo $name; ?>"> <input type="hidden" name="message" value="<?php echo $message; ?>"> <input type="hidden" name="subject" value="<?php echo $subject; ?>"> <input type="hidden" name="mail" value="<?php echo $mail; ?>"> </form> あとは、main.phpで、$_POSTを受け取って表示すればいい。 <? $name = $_POST['name']; (以下略) ?> <form action="chk.php" method="post"> 件名:<br> <input type="text" name="subject" size="30" value="<?php echo $name?>"><br> (以下略) これで、「動作的には」おっしゃる通りに動くかと。 ただし、セキュリティー対策が全く施されてませんので、 このまま設置して公開すると、本当に後悔する事になりますよ。 知人友人のみに公開する場合であっても、せめてhtmlspecialchars くらいは挟んでおかないと。。 まずは、PHPのセキュリティー対策について学びましょう。 「PHP セキュリティー フォーム」などで検索してみて下さい。