Jun10:入力フォームで受け渡し→確認→戻るのフローで、入力値を保持する。(テキスト・ラジオボタン・チェックボックス)
入力値の保持。
input type="text"(テキストボックス)の値の保持について
たとえば
<form method="post" action="plactice3.php"> <input type="text" name="name1"> </form>
実際はこんな感じ
というテキストボックスがあるとして、この時POSTで渡される配列の値は入力値になる。つまり
$_POST["name1"]=入力値
となる。
そして受け取る側では、
<?php $name = $_POST["name1"]; print_r ("$name<br />"); ?>
と表記し、引き継いだその値を表記するよう明示するが、ここでこの受け取った値を再び配列にして、さらに入力画面に返せばいい。つまり、受け取った値を再び返せる準備をするのだ。
つまり
<pre> <input type="hidden" name="name1" value="<?php echo $_POST["name1"]?>"> </pre>
とする。hideenは表示されないがvalueの値を持ち、POSTで送る時に連想配列として使える。
なので、正しい入力画面は
<pre> <form method="post" action="plactice3.php"> <input type="text" name="name1" value="<?php echo $_POST["name1"]?>"> </form> </pre>
としておけば、最初の画面ではvalueの配列の値は空なので何も表示されることなく、入力(値を指定)して一回確認画面に行って再び戻れば、その入力値が再び帰ってくることになる。
■確認■
出力コマンドのecho,print_r,var_dumpって何が違うのか?
■echo:文字列を出力する際に使う。(値の表示はしない。)一つ以上の出力を行うので、もし二つならカンマ区切りにして表示する。関数ではないので、特にかっこは不要。類似にprintがあるが、これは戻り値[1]を返すのに対してechoは戻り値を返さない。
配列ではecho、printは値のみを返すキー値は表示しない。■print_r: 指定した変数に関する情報を解りやすく出力する。
string、integer, float を指定した場合はその値が出力され、arrayを指定した場合、キーと要素を表す形式で値が表示される。
■var_dump:変数に関する情報を表示する。
この関数は、指定した式に関してその型や値を含む構造化された情報を返す。配列の場合、その構造を表示するために各値について再帰的に探索される。
チェックボックスの値の保持
これは本当になやみました。こんなところで悩んでたらダメなんだけども。
とりあえず、記入画面にはこんなチェックボックスを作っときます。
<input type="checkbox" name="h_array[0]" value="1">映画 <input type="checkbox" name="h_array[1]" value="2">音楽 <input type="checkbox" name="h_array[2]" value="3">その他
実際はこんな感じになります。
映画
音楽
その他
これにチェックを複数入れてPOSTで送信すると、たとえば映画とその他にチェックを入れた場合、$_POST["h_array"]はこんな配列になります。
Array([0]=>映画,[2]=>その他)
次にこれを確認画面で表示させたい場合は、
<?PHP foreach($h_array as $value){ if($value == 1){ print_r ("音楽<br />"); }elseif($value == 2){ print_r ("映画<br />"); }elseif($value == 3){ print_r ("その他<br />"); } } ?>
foreachで各配列の要素に対し、1があったら「音楽と表示しろ」みたいな感じでかいてます。さらに、記入画面に戻る時に値の保持が必要になるので、さらに書き加えなければなりません。foreachのところでprint_rに以下の文を加えました。たとえば$valueが1だった時は、
$valueが1だったら、h_array[0](先ほどと名前は一緒だけども別物)は1ですよ。と。echo '<input type="hidden" name="h_array[0]" value="1">';
なので、最後に記入画面のinputタグのvalueの中身も書き加えて、
<input type="checkbox" name="h_array[0]" value="1" <?php if($_POST["h_array"][0] == 1){ (またはif(isset($_POST["h_array"][0])){) echo "checked"; } ?> >
と、 説明は不要ですね。書き方が汚いのは承知してますが、まだ慣れてないので申し訳ございません。
次はもっと上手に書けるようにします。
■■覚えたPHP関数
isset(変数)
変数がセットされているかを確かめる。
■■便利なviコマンド
yy・・・一行ヤンク
y$・・・指定場所から行の最後までヤンク
p・・・ペースト
:○○・・・○○行まで移動(これはガチで使えるぞ)
:set number・・・行数を表示。(これもガチで使える)