スレッド表示 | フラット表示〕 全トピック 920 件中 375 番目 次≫ ≪前

formに既に記入した文字が残る方法

created: 2005-08-21 10:14 | modified: 2005-09-10 20:23 | reply: 7

[2486] formに既に記入した文字が残る方法

user: 福永由美子 | created: 2005-08-21 10:14
PHPで書いた入力formからsubmitして、postを受け取ってDBにinsertするphp(insert.php)が、ある項目が受け付け条件に合わないのでform.phpに戻る時、既に入力した項目の文字が残らないのです。入力者の便宜のため残るようにするには、どうしたらよいのでしょうか。

insert.phpは下記のようになっています。

$vname = $HTTP_POST_VARS["name"];
if (strlen($vname) == 0){
echo "名前かイニシャルを入れてください。";
echo "<a href=form.php' onClick='history.back();return false;'>back</a><br>";
exit;
}
恐縮ですが、教えていただけたら幸いです。
reply: 2487 返信 編集 削除

[2487] 書き方がちょっと変

user: ach | created: 2005-08-21 15:27
<a href='javascript:history.back()'>back</a>が一般的で、パスワード以外の値が残ります。(ブラウザのbackと同じ)
insert.phpがフォームを出力してあげるほうが親切だと思うけど。

後、どうでもいいことですが・・・
1.下位互換を考えてるのかもしれませんが、$HTTP_POST_VARSより$_POSTを使うべきってのがあったような無かったような。
2.strlen($vname)==0よりempty($_POST["name"])。後からチェック強化したりってのを考えるとチェック用の関数をつくるほうがいいかも。(個人の嗜好ですけど)
Parent: 2486  reply: 2488 返信 編集 削除

[2488] ブラウザの戻るではちょっと不確実

user: | created: 2005-08-22 01:54
こんにちは。

ブラウザの戻る機能を使う場合(javascriptのhistory.backでも同じ)、
元のページでフォームの入力内容が再表示されるとは限りません。
(フォームの有効期限切れが起こったりする)

ですから、一般的には次のような方法を取るかと思います。


【方法1】Cookieやセッション処理関数を利用して入力内容を一時保存しておき、
入力フォームに戻った時にそれを参照して代入する。

【方法2】insert.phpにおいて、あらかじめform.phpから送られてきた入力データを
hidden要素に入れた、「戻るためのフォーム」を設置しておく。
insert.phpからform.phpに、再入力のために戻りたい時は、上記フォームの
submitを使う。form.phpに戻った時に、「戻るためのフォーム」から送られた
内容を各要素の入力内容として反映させる。


…といった感じです。
Parent: 2487  reply: 2491 2531 2533 返信 編集 削除

[2491] archさん、箱さん、ありがとうございました。

user: 福永由美子 | created: 2005-08-24 06:32
と言っても、ちゃんと理解してから、あらためて御礼申し上げたいと思います。要勉強。
Parent: 2488  返信 編集 削除

[2531] 結局 箱さんの【方法2】

user: 福永由美子 | created: 2005-09-01 21:56
結局 箱さんの【方法2】を使わせていただきました。

初心者にとっても、わかりやすいことなので。
でも、結構 力仕事で、ここまでかかってしまいました(要領が悪いだけですが)。
ただ、もうひとつ質問させていただきたいのですが、form.phpが選択である場合は、戻っても最初から選択しなおさなければならない、のではないでしょうか。

ありがとうございました。
Parent: 2488  返信 編集 削除

[2533] 選択項目なら、例えばこんな感じです

user: | created: 2005-09-02 18:18
> form.phpが選択である場合は、戻っても最初から選択しなおさなければ
> ならない、のではないでしょうか。

「選択である」とういうのは、たぶんselectメニューとかcheckboxメニュー
のことですよね。

もちろん選択メニューであっても元の選択状態を反映させることは出来ます。
ただ、単純なテキスト項目と違って、phpの書き方に多少工夫が必要です。

例えば、複数選択不可(1コしか選べない)のselectメニューであれば、

<select name="select_1">
<option value="val1" <?php
if ($_POST['select_1'] == 'val1') {
print 'selected';
}
?>>ここは値1
<option value="val2" <?php
if ($_POST['select_1'] == 'val2') {
print 'selected';
}
?>>ここは値2
<option value="val3" <?php
if ($_POST['select_1'] == 'val3') {
print 'selected';
}
?>>ここは値3
</select>

のような感じですね。

--------------------

複数選択出来るチェックボックスなどの場合はちょっと工夫が必要です。
ご存じかもしれませんが、複数選択の項目に関しては、項目名(naem)の
末尾に“[]”を書き足しておくと、受け取り側で配列として参照出来ます。

<input type="checkbox" name="check[]" value="check1"<?php
foreach ($_POST['check'] as $checked){
//↑送信元フォームの「check[]」でチェックされた値が$_POST['check']に入ります。
if ($checked == 'check1') {
print 'checked'; break;
}
}
?>>チェックその1<BR>
<input type="checkbox" name="check[]" value="check2"<?php
foreach ($_POST['check'] as $checked){
if ($checked == 'check2') {
print 'checked'; break;
}
}
?>>チェックその2<BR>
<input type="checkbox" name="check[]" value="check3"<?php
foreach ($_POST['check'] as $checked){
if ($checked == 'check3') {
print 'checked'; break;
}
}
?>>チェックその3<BR>

と、こんな感じです。
実際のコードでは、複数選択項目の書き出しにはループ文などを上手く使う
ようにすると、よりすっきりしたコードになるかと思います。
Parent: 2488  reply: 2536 返信 編集 削除

[2536] またまた、ありがとうございます。

user: 福永由美子 | created: 2005-09-04 15:00
舌足らずを確認していただいていますが、すべて、その通りです。
いろいろ、できるんですね。初心者が思う以上に。

でも、理解するまでに、またまた時間がかかりそうです。
Parent: 2533  reply: 2543 返信 編集 削除

[2543] こうしました。ありがとうございました。

user: 福永由美子 | created: 2005-09-10 20:23
初心者のやったことは、何の参考にもならないと思いますが、礼儀でもあると思いますので。

箱さんのアドバイスで、選択の件の前に、form.phpとinsert.phpの間に、confirm.phpを置くようにしてました。
confirm.phpで、不適当な入力を指摘し、form.phpに戻ったとき、前に入れた入力を再び表示できれば、よかったわけです。
で、選択のところなんですが、confirm.phpからBackのボタンで送り返されたのを、$vconf...という変数に入れて、以下のように表示するようにしました。
<OPTION value='$vconf_country'>Options: $vconf_country</OPTION>
多分、ちゃんと機能していると思います。
Parent: 2536  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 375 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑