PHP初心者です。
今会員登録のサイトを作っています。
入力画面(エラーチェック)→確認画面→登録完了
のページを作っているのですが、確認画面から「入力内容を修正する」をクリックして戻った時、チェックボックスははずれ、ドロップダウン、ラジオボタンは元の値に戻ってしまっています。
保持する場合、どのようなPHPを書けばよいでしょうか?
↓はドロップダウンのサンプルです。
<dt>
<label for="juusyo">住所</label>
</dt>
<dd>
<select name="juusyo">
<option value="群馬県">群馬県</option>
<option value="埼玉県">埼玉県</option>
<option value="神奈川県">神奈川県</option>
<option value="千葉県">千葉県</option>
<option value="東京都">東京都</option>
<option value="山梨県">山梨県</option>
<option value="長野県">長野県</option>
<option value="新潟県">新潟県</option>
</select>
<input type="submit" name="kakunin" value="確認する">
</form>
どなたかご教授くださればうれしいです。
No.4ベストアンサー
- 回答日時:
ざっとこんな感じで
//nyuryoku.php
<?PHP
session_start();
$checked=array();
$selected=array();
$value=array();
function p($a,$b){
$tmp=$a;
foreach($b as $val){
if(!isset($tmp[$val])) return false;
$tmp=$tmp[$val];
}
if(!is_array($tmp)) print htmlspecialchars($tmp);
}
$c1=isset($_SESSION["c1"])?$_SESSION["c1"]:null;
foreach((array) $c1 as $val){
$checked["c1"][$val]=" checked";
}
$c2=isset($_SESSION["c2"])?$_SESSION["c2"]:null;
foreach((array) $c2 as $val){
$checked["c2"][$val]=" checked";
}
$r1=(isset($_SESSION["r1"]) and !empty($_SESSION["r1"]))?$_SESSION["r1"]:"g";
$checked["r1"][$r1]=" checked";
$r2=(isset($_SESSION["r2"]) and !empty($_SESSION["r2"]))?$_SESSION["r2"]:"j";
$checked["r2"][$r2]=" checked";
$s1=isset($_SESSION["s1"])?$_SESSION["s1"]:0;
$selected["s1"][$s1]=" selected";
$s2=isset($_SESSION["s2"])?$_SESSION["s2"]:0;
$selected["s2"][$s2]=" selected";
$t1=isset($_SESSION["t1"])?$_SESSION["t1"]:"";
$value["t1"]=$t1;
$t2=isset($_SESSION["t2"])?$_SESSION["t2"]:"";
$value["t2"]=$t2;
?>
<form action="kakunin.php">
C1:
<input type="checkbox" name="c1[]" value="a"<?PHP p($checked,array("c1","a")); ?>>a
<input type="checkbox" name="c1[]" value="b"<?PHP p($checked,array("c1","b")); ?>>b
<input type="checkbox" name="c1[]" value="c"<?PHP p($checked,array("c1","c")); ?>>c
<br>
C2:
<input type="checkbox" name="c2[]" value="d"<?PHP p($checked,array("c2","d")); ?>>d
<input type="checkbox" name="c2[]" value="e"<?PHP p($checked,array("c2","e")); ?>>e
<input type="checkbox" name="c2[]" value="f"<?PHP p($checked,array("c2","f")); ?>>f
<br>
R1:
<input type="radio" name="r1" value="g"<?PHP p($checked,array("r1","g")); ?>>g
<input type="radio" name="r1" value="h"<?PHP p($checked,array("r1","h")); ?>>h
<input type="radio" name="r1" value="i"<?PHP p($checked,array("r1","i")); ?>>i
<br>
R2:
<input type="radio" name="r2" value="j"<?PHP p($checked,array("r2","j")); ?>>j
<input type="radio" name="r2" value="k"<?PHP p($checked,array("r2","k")); ?>>k
<input type="radio" name="r2" value="l"<?PHP p($checked,array("r2","l")); ?>>l<br>
S1:<select name="s1">
<option value="" <?PHP p($selected,array("s1",0)); ?>>選択して!</option>
<option value="m"<?PHP p($selected,array("s1","m")); ?>>m</option>
<option value="n"<?PHP p($selected,array("s1","n")); ?>>n</option>
<option value="o"<?PHP p($selected,array("s1","o")); ?>>o</option>
</select><br>
S2:<select name="s2">
<option value="" <?PHP p($selected,array("s2",0)); ?>>選択して!</option>
<option value="p"<?PHP p($selected,array("s2","p")); ?>>p</option>
<option value="q"<?PHP p($selected,array("s2","q")); ?>>q</option>
<option value="r"<?PHP p($selected,array("s2","r")); ?>>r</option>
</select>
<br>
T1:<input type="text" name="t1" value="<?PHP p($value,array("t1")); ?>"><br>
T2:<input type="text" name="t2" value="<?PHP p($value,array("t2")); ?>"><br>
<input type="submit" value="確認する">
</form>
つづく・・・
No.5
- 回答日時:
//kakunin.php
<?PHP
session_start();
$c1=$_SESSION["c1"]=(isset($_REQUEST["c1"]) and is_array($_REQUEST["c1"]))?$_REQUEST["c1"]:false;
$c1_txt="";
if($c1===false){
$c1_txt.="ありません";
}else{
foreach($c1 as $val){
if($c1_txt!=="") $c1_txt.=",";
$c1_txt.=$val;
}
}
$c2=$_SESSION["c2"]=(isset($_REQUEST["c2"]) and is_array($_REQUEST["c2"]))?$_REQUEST["c2"]:false;
$c2_txt="";
if($c2===false){
$c2_txt.="ありません";
}else{
foreach($c2 as $val){
if($c2_txt!=="") $c2_txt.=",";
$c2_txt.=$val;
}
}
$r1=$_SESSION["r1"]=isset($_REQUEST["r1"])?$_REQUEST["r1"]:false;
$r1_txt=$r1===false?"不明":$r1;
$r2=$_SESSION["r2"]=isset($_REQUEST["r2"])?$_REQUEST["r2"]:false;
$r2_txt=$r2===false?"不明":$r2;
$s1=$_SESSION["s1"]=(isset($_REQUEST["s1"]) and $_REQUEST["s1"]!=="")?$_REQUEST["s1"]:false;
$s1_txt=$s1===false?"不明":$s1;
$s2=$_SESSION["s2"]=(isset($_REQUEST["s2"]) and $_REQUEST["s2"]!=="")?$_REQUEST["s2"]:false;
$s2_txt=$s2===false?"不明":$s2;
$t1_txt=$_SESSION["t1"]=(isset($_REQUEST["t1"]))?$_REQUEST["t1"]:"";
$t2_txt=$_SESSION["t2"]=(isset($_REQUEST["t2"]))?$_REQUEST["t2"]:"";
?>
選ばれたC1は<?PHP print htmlspecialchars($c1_txt); ?><br>
選ばれたC2は<?PHP print htmlspecialchars($c2_txt); ?><br>
選ばれたR1は<?PHP print htmlspecialchars($r1_txt); ?><br>
選ばれたR2は<?PHP print htmlspecialchars($r2_txt); ?><br>
選ばれたS1は<?PHP print htmlspecialchars($s1_txt); ?><br>
選ばれたS2は<?PHP print htmlspecialchars($s2_txt); ?><br>
T1の値は<?PHP print htmlspecialchars($t1_txt); ?><br>
T2の値は<?PHP print htmlspecialchars($t2_txt); ?><br>
[ <a href="nyuryoku.php">戻る</a> | <a href="toroku.php">登録</a> ]
//touroku.php
<?PHP
session_start();
$pattern="/\?.*$/";
$filename="kakunin.php";
$refname=preg_replace($pattern,"",basename($_SERVER["HTTP_REFERER"]));
if($filename!==$refname) header("Location:nyuryoku.php");
print_r($_SESSION);
?>
No.3
- 回答日時:
補足
>押されたボタンのパラメータだけが送信されるので、それで差分できます。
エンターキーが押されて送信されることも鑑みて、
デフォルトでは送信処理、修正ボタンが押されたときのみ修正画面の表示にしてやると良いと思います。
No.2
- 回答日時:
セッションを使わなくても、フォームに
「送信」「入力内容を修正する」
のふたつのsubmitボタンを用意してやると、
押されたボタンのパラメータだけが送信されるので、それで差分できます。
「入力内容を修正する」が押された場合に、
再び入力フォームを出して、フォーム送信されたデータをフォームへ反映させておけば言い訳です。
オプションの選択については
selected="selected"
ラジオボタン、チェックボックスについては
checked="checked"
を選択したい要素の属性にたしてやればいいです。
生成方法は、この場合だと選択する都道府県の配列を作っておいて、
ループでoption要素を生成。
ポストされてきたjuusyoの値をループ毎チェックして、
もし同じなら選択属性をoption要素に付加。
こんな感じでよいと思います。
ありがとうございます。
selected="selected"・checked="checked"をたすんですね!
勉強させてもらいます。
No.1
- 回答日時:
>「入力内容を修正する」をクリックして戻った時
・セッションでデータを保持して
・セッションデータをもとにチェックや選択状態を指示してやる
この回答への補足
phpの書き方がわからないのです。
テキストのフォームは
<input name="name" type="text" id="name" size="20" maxlength="20" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>/>
で戻ったときも内容が保持できています。
ドロップダウン、ラジオボタン、チェックボックスに
value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'); ?>
を記述してもうまくいきません。。
補足に書いてしまってすみません。
回答ありがとうございます!!
SESSIONについて調べましたが、わかりやすいものが出てこなくやはり解決できていない状態です。
初心者ですみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
都道府県穴埋めゲーム
都道府県の名前を1人1つずつ投稿してください。全ての都道府県が出たら締め切ります!
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
【初歩】ラジオボタンをつかったPHPフォームから値のMySQLへの格納と取り出し
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セレクトしたときに全て初期状...
-
PHPをはじめ早くも壁に当たって...
-
input type="hidden"で送る値を...
-
セレクトメニューの値が旨く得...
-
syntax error, unexpected '}' ...
-
HTMLで前の画面に戻る時、入力...
-
mySQLのデータを多次元配列に格...
-
セッションを使わずに遷移先画...
-
PHPで画像の渡しが上手く行きま...
-
PHPでフォームから任意の画像削...
-
Flaskでサーバー立ち上げに関して
-
PHPの質問:フォームから受け取...
-
phpのswitch文
-
MySQL,PHPのリロードによる二重...
-
検索時の選択内容を保持する方法
-
フォームへの前回入力値をクリ...
-
【HTML(PHP?)】複数のフォーム...
-
phpで、フォームのラジオボタン...
-
ラジオボタンをsessionで使いたい
-
PHPのsubmitボタンが複数ある場合
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウンとCSVの連動
-
MySQLのレコードを検索、...
-
連動させたいセレクトボックス...
-
2つのプルダウンメニュから受け...
-
phpでのselect値の取得・表記に...
-
セレクトしたときに全て初期状...
-
複数 selectフォームから今回on...
-
<select>文、foreachと初期値設定
-
Smartyで、セレクトボックスが...
-
CodeIgniter/set_value()
-
phpでカレンダー作成
-
現在時刻を反映させた時刻のプ...
-
奇数や偶数を調べる関数
-
PHP で画面の一部だけを変えたい。
-
GET又はPOSTで受け取るデータに...
-
複数のセレクトボックスを1つに...
-
選択されたプルダウンの値を変...
-
プルダウンリンクを外部ファイ...
-
【PHP&JavaScript】複数の別ウ...
-
input type="hidden"で送る値を...
おすすめ情報