いきおいでPHPを勉強する。その6
さぁさぁいまさらながらのPOST, GET処理が分かってきたぞーーー! 急ぐぞーー!
POST送信されたデータを受け取る。
<html> <head> <title>POST送信されたデータを受け取る</title> </head> <body> <?php // 入力内容を表示する echo "<p>入力内容(\$_POST):".@$_POST["text1"]; ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> </body> </html>
GET送信されたデータを受け取る
入力内容(\$GET):".@$GET["text1"];
?>
POSTもGETも一緒じゃない
と思ったが。URLに含まれるパラメータの話がでてきた。
GETの場合だと
http://localhost/sample.php?text1=abc
のようなURLにアクセスするのと同じことになる。 これは昔どこかで。。
はい。
とりあえずがんがんすすみます。
リンクからデータを受け取る
<html> <head> <title>リンクからデータを受け取る</title> </head> <body> <?php // URLパラメータを表示する echo "<p>リンクから受け取ったキーワード:".@$_GET["key"]; ?> <hr> <a href="<?php echo $_SERVER["PHP_SELF"]?>?key=PHP">PHPのページはこちら</a> <a href="<?php echo $_SERVER["PHP_SELF"]?>?key=ASP">ASPのページはこちら</a> <a href="<?php echo $_SERVER["PHP_SELF"]?>?key=JSP">JSPのページはこちら</a> </body> </html>
リンク先URLに自分を指定してあげて、そのあとパラメータの文字列(?key=param)を付加している。
フォームのデータをまとめて処理する
<html> <head> <title>フォームのデータをまとめて処理する</title> </head> <body> <?php // フォームから送信されたデータを表示する foreach($_POST as $idx => $val){ echo "<p>$idx = $val"; } ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> </tr> <tr> <td><input type="text" name="text2"></td> </tr> <tr> <td><input type="text" name="text3"></td> </tr> <tr> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> </body> </html>
foreach()ってなんだ
foreach は、配列を反復処理するための便利な方法です。
foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。
この構造には二種類の構文があります。
foreach (array_expression as $value) 文 foreach (array_expression as $key => $value) 文
最初の形式は、array_expressionで指定した配列に 関してループ処理を行います。
各反復において現在の要素の値が $valueに代入され、内部配列ポインタが一つ前に 進められます。
(よって、次の反復では次の要素を見ることになります。)
2番目の形式は、さらに各反復で現在の要素のキーを変数 $keyに代入します
既にご存知かと思いますが、以下の文は機能的に等価です。
<?php $arr = array("one", "two", "three"); reset($arr); while (list(, $value) = each($arr)) { echo "Value: $value<br />\n"; } foreach ($arr as $value) { echo "Value: $value<br />\n"; } ?>
以下の文も機能的に等価です。
<?php $arr = array("one", "two", "three"); reset($arr); while (list($key, $value) = each($arr)) { echo "Key: $key; Value: $value<br />\n"; } foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n"; } ?>
フォームのデータをまとめて変数にセットする
$text1 = $_POST["text1"];
$text2 = $_POST["text2"];
$text3 = $_POST["text3"];
は
extract($_POST);
と同等。
<html> <head> <title>フォームのデータをまとめて変数にセットする</title> </head> <body> <?php // フォームから送信されたデータをまとめて変数にセットする extract($_POST); echo "<p>テキスト1:".@$text1; echo "<p>テキスト2:".@$text2; echo "<p>テキスト3:".@$text3; ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> </tr> <tr> <td><input type="text" name="text2"></td> </tr> <tr> <td><input type="text" name="text3"></td> </tr> <tr> <td><input type="submit" value="送信" name="sub1"></td> </tr> </table> </form> </body> </html>
(最後に) 配列のデータを受け取る
配列内には""が含まれているためうまくデータを渡せない。
そのため、serialize()関数で人つなぎの文字列に変化し、base64_encode()関数でエンコードする必要がある。
<html> <head> <title>配列のデータを受け取る</title> </head> <body> <?php // 配列を定義する $array = array("menu"=>"カレー", "price"=>"380", "date"=>"2005/01/01"); // フォームから送信された配列を取得する echo "<p>配列の内容(エンコードした場合):"; print_r(unserialize(base64_decode($_POST["ar_enc"]))); echo "<p>配列の内容(そのまま渡すと失敗):"; print_r($_POST["ar"]); ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <input type="submit" value="送信" name="sub1"> <input type="hidden" name="ar" value="<?php echo $array ?>"> <input type="hidden" name="ar_enc" value="<?php echo base64_encode(serialize($array)) ?>"> </form> </body> </html>