$_SERVER[]の表す意味を教えてください。 - PHPプロ!Q&A掲示板

1261

  • 0P

$_SERVER[]の表す意味を教えてください。

質問日時 / 2008年6月24日 00:11 (最終編集:6月24日 18:27)    回答数 / 2件

Questioner:  horowasan  このエントリーをはてなブックマークに追加 

キーワード / Dreamweaver    $_SERVER   

こんにちは,連日の質問でお騒がせしておりますが,よろしくお願いします。
Dreamweaverで制作を行っております。Dreamweaverでは,データベースに登録する「レコードの挿入」を行うと,下のようなコードが作成されます。

1 $editFormAction = $_SERVER['PHP_SELF'];
2 if (isset($_SERVER['QUERY_STRING'])) {
3 $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
4 }
5 if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
6   $insertSQL = sprintf("INSERT INTO users_t (US_name, US_tel, US_fax,) VALUES (%s, %s, %s)",
                       GetSQLValueString($_POST['US_name'], "text"),
                       GetSQLValueString($_POST['US_tel'], "text"),
                       GetSQLValueString($_POST['US_fax'], "text"));
7   mysql_select_db($database_RenShi, $RenShi);
8   $Result1 = mysql_query($insertSQL, $RenShi) or die(mysql_error());
9   $insertGoTo = "******.php";
10   if (isset($_SERVER['QUERY_STRING'])) {
11     $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
12     $insertGoTo .= $_SERVER['QUERY_STRING'];
13   }
14  header(sprintf("Location: %s", $insertGoTo));
15 }

この中の1~4行目,5行目,10行目~13行目の3箇所について意味を解説していただきたいです。

1行目~4行目にある$_SERVER['QUERY_STRING']とはどんな値を示しているのでしょうか?「ページがアクセスされた際にもし検索引数があればそれが格納されます。」とマニュアルには書いてありますが,検索引数というものが分かりません。そして,なぜ,ファイル名の後に”?”や検索引数というものをくっつけなければならないのでしょうか?
また5行目で,$_POST["MM_insert"] == "form1"であることをわざわざ確認する必要があるのでしょうか?
さらに10行目~13行目でも遷移するページのファイル名に”?”や$_SERVER['QUERY_STRING']を付けています。ここでは何が行われているのでしょうか?必要なことなのでしょうか?
よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01NurseAngelhttp://www.hogehoge.com/index.php?US_name=aaa&MM_i
 ┗A01-1horowasanNurseAngelさんありがとうございました。 なるほど,

回答一覧

並び替え:

A01 満足
answererNurseAngel [6月24日 10:11] (最終編集:6月24日 10:11)

http://www.hogehoge.com/index.php?US_name=aaa&MM_insert=form1&US_tel=0120444444&US_fax=0120555555

というURLをアドレス欄に打ち込んだ場合、
実際にアクセスされるのはhttp://www.hogehoge.com/index.phpです。
?以下の情報は↑にパラメータとして渡されます。

$_SERVER['QUERY_STRING']で
「US_name=aaa&MM_insert=form1&US_tel=0120444444&US_fax=0120555555」
という文字列を取得することができます。

また、$_GET["MM_insert"]で
「form1」という文字列を取得できます。

質問のプログラムでは、$_GET["MM_insert"]に「form1」という文字列が入っていた場合、そこの処理を行うようになっています。

http://www.hogehoge.com/index.php?US_name=aaa&MM_insert=form2&US_tel=0120444444&US_fax=0120555555
たとえばこのようなURLでアクセスすると、
$_GET["MM_insert"]の中身は「form2」になるので、上記の処理の部分は行われないことになります。


プログラムに対して簡単にパラメータを渡せるためよく使われる手法です。
左側のamazonとか。


#質問文はGETじゃなくてPOSTですが同じようなものなので気にしない。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerhorowasan [6月24日 22:55]

NurseAngelさんありがとうございました。
なるほど,$_SERVER['QUERY_STRING']は,GET送信されるデータを取得する方法だったのですね。どのように使うのかは,私にはあまり想像付かないですけれど,秘匿すべきデータでない限りは,GET送信でも良いのでしょうね。このようなときには,このようにしてデータをやり取りするのが簡単な方法なのでしょうね。これからもよろしくお願いします。
本当にありがとうございました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
マジッククォートとmysql_real_escape_string
 このエントリーをはてなブックマークに追加 
A
magic_quotes_gpcでは、SQLインジェクション対処は十分できません。主な理由として、以下が上げられます。 ・magic_quotes_gpcは文字コードを考慮しないで処理するので、Shift_JISを使っている場合、SQLインジェ...

>>続きを読む

SQLインジェクション対策は時と場合で使う関数が変わります。その時にあったものを使いましょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)