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だった時は、

 echo '<input type="hidden" name="h_array[0]" value="1">';

$valueが1だったら、h_array[0](先ほどと名前は一緒だけども別物)は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・・・行数を表示。(これもガチで使える)