アプリ版:「スタンプのみでお礼する」機能のリリースについて

http://www.phppro.jp/school/phpschool/vol19/2
こちらの講座にあるサンプルコードで分からないところがあります。

schedule_edit.phpのサンプルでは

if (isset($_POST["year"]) && is_numeric($_POST["year"])
&& $_POST["year"] > 2000) {
$year = $_POST["year"];

<form action="schedule_edit.php" method="post">
<input type="text" name="year" id="schedule-year"
value="<?php print(htmlspecialchars($year, ENT_QUOTES)); ?>" />
<label for="schedule-year" id="label-year">年</label>

formで入力されたデータはhtmlspecialchars($year, ENT_QUOTES)の$yearに格納され、
$_POST["year"]としてデータが渡り、
php側で$year = $_POST["year"];のように$_POST["year"]のデータが$yearに格納し直されています。わざわざ格納し直す理由も分からないのですが、一番知りたいところは
schedule_list.phpのサンプル内ではPOSTでなくGETで渡されているところです。

if ($schedule_date == date("Ymd", mktime(0, 0, 0, $_GET["month"],
$_GET["day"], $_GET["year"])))

$_POST["day"]ではなぜだめなのか分かりません。
この$_GET["year"]はschedule_edit.phpの$_POST["year"]を見ているわけではないのでしょうか。

A 回答 (2件)

> print("<td><a href=\"schedule_list.php?year=" .$year ・・・



schedule_list.phpにはGETパラメータで渡しているから、$_GET["year"]です。


> <form action="schedule_edit.php" method="post">
> <input type="text" name="year" ・・・

schedule_edit.phpにはPOSTパラメータで渡しているから、$_POST["year"]です。


>この$_GET["year"]はschedule_edit.phpの$_POST["year"]を見ているわけではないのでしょうか。

違います。schedule_edit.php と schedule_list.php は別々のプログラムです。
    • good
    • 0
この回答へのお礼

schedule_list.phpで使われているGETはschedule_calendar.phpから渡されたデータで、
POSTはschedule_edit.phpだけで使われているデータ。
同じ変数名でもまったく違うデータということが分かりました。
ありがとうございました。

お礼日時:2012/02/25 01:13

元ソースは見ていませんが、可能性としてデータを引き継ぐ際に


POSTはサブミットする必要がありますが、GETならアンカーでも渡せます
そのあたりが運用面でGETの方が利便性が高いってことじゃないですかねぇ
(ただ長くなるとGETはブラウザの制限に引っ掛かったりしますが・・・)

いずれにしろデータの遷移にはセッションで処理すれば解決するので
あまり気にする必要はありません
    • good
    • 0
この回答へのお礼

ありがとうございます。
>データの遷移にはセッションで処理すれば解決する
セッションで処理をするというのはどういう意味でしょうか?
$_SESSIONはサーバーに送信され保存されたデータを使うための変数なので、
GETやPOSTで保存されたデータを使うこともできるということかもと思い試してみました。

------ a.php -------
<?php
if(isset($_GET["gettest"])){
header("Location: b.php");
}
?>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>a.php</title>
</head>
<body>
<form action="b.php" method="get">
<input type="submit" name="gettest" value="jikkou">
</form>
</body>
</html>

------ b.php -------
<?php
$session_start(); //Notice: Undefined variable: session_start
echo $_SESSION["gettest"]; //Fatal error: Function name must be a string
?>


***調べたこと***
>POSTはサブミットする必要があります
<input type="submit">など用意された専用の方法を使わなければデータを送れない。

>GETならアンカーでも渡せます
<a href="../test/index.html?name1=value1&name2=value2">
?以降がクエリストリングス
必ず 名前=値の書式で、パラメータを複数指定するときは&を使う。
echo $_GET['name1']; //value1
echo $_GET['name2']; //value2
のように使える

お礼日時:2012/02/25 00:48

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