dポイントプレゼントキャンペーン実施中!

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>

どなたかご教授くださればうれしいです。

A 回答 (5件)

ざっとこんな感じで



//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>

つづく・・・
    • good
    • 0
この回答へのお礼

サンプルありがとうございます!
すごく勉強になります。

お礼日時:2012/05/12 12:29

//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);
?>
    • good
    • 0
この回答へのお礼

参考にさせてもらいます。
丁寧にありがとうございました!

お礼日時:2012/05/12 12:30

補足



>押されたボタンのパラメータだけが送信されるので、それで差分できます。

エンターキーが押されて送信されることも鑑みて、
デフォルトでは送信処理、修正ボタンが押されたときのみ修正画面の表示にしてやると良いと思います。
    • good
    • 0
この回答へのお礼

なるほど。
パソコンのエンターキーのことは頭にありませんでした!
補足ありがとうございます!

お礼日時:2012/05/12 12:29

セッションを使わなくても、フォームに



「送信」「入力内容を修正する」

のふたつのsubmitボタンを用意してやると、
押されたボタンのパラメータだけが送信されるので、それで差分できます。

「入力内容を修正する」が押された場合に、
再び入力フォームを出して、フォーム送信されたデータをフォームへ反映させておけば言い訳です。


オプションの選択については

selected="selected"

ラジオボタン、チェックボックスについては

checked="checked"

を選択したい要素の属性にたしてやればいいです。

生成方法は、この場合だと選択する都道府県の配列を作っておいて、
ループでoption要素を生成。
ポストされてきたjuusyoの値をループ毎チェックして、
もし同じなら選択属性をoption要素に付加。

こんな感じでよいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
selected="selected"・checked="checked"をたすんですね!
勉強させてもらいます。

お礼日時:2012/05/12 12:28

>「入力内容を修正する」をクリックして戻った時



・セッションでデータを保持して
・セッションデータをもとにチェックや選択状態を指示してやる

この回答への補足

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'); ?>
を記述してもうまくいきません。。

補足日時:2012/05/10 18:05
    • good
    • 0
この回答へのお礼

補足に書いてしまってすみません。
回答ありがとうございます!!

SESSIONについて調べましたが、わかりやすいものが出てこなくやはり解決できていない状態です。
初心者ですみません。

お礼日時:2012/05/10 21:13

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