• ベストアンサー

$_REQUEST とphpファイルでphp?item=500&xt=100とか言うああいうページと関連があるのでしょうか

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1437399 で$_REQUEST の理解を深めたく質問中ですが $_REQUEST の[ ]の中の変数は結局、 ?item=500&xt=100の部分を作るためのものなんでしょうか とくにDBとの関連で必要でしょうか たとえば stage.phpのコードで <?php …$name=$_REQUEST['name']… if($name='a'){echo'<html>a</html>'} if($name='b'){echo'<html>b</html>'} stage.php?name=a stage.php?name=b というページができるという理解でしょうか? (すいません、質問に個所でしてしまって)

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

質問を読む限り、大きな勘違いをしているように思います。 $_REQUEST変数は、スクリプトの外部から値を得るための変数です。例えばstage.php?a=1 というリクエストがあったら、stage.php内の$_REQUEST["a"]に1が入っています。ただそれだけの変数です。 外部から値を得る変数は他にも$_POST,$_GET,$_COOKIEなどあります。これは例えばPOSTメソッド送られたパラメータ、COOKIEの値など、外部の値の種類によって変数が違います。$_REQUEST変数はこれらが全部含まれているんです。仮に$_POST["a"]に1、$_COOKIE["b"]に2という値が入っていたとすると、#_REQUEST["a"]=1,$_REQUEST["b"]=2という値が同時に現れます。 個人的にはほとんど使わない変数ですね。なぜならその値がどこから来たのかはわからないので、下手をするとセキュリティホールになり得るからです。$_REQUEST変数を研究する前に、$_POST,$_GET,$_COOKIEあたりを先に理解した方がいいと思いますし、スクリプト上の実装もこれらを使った方が良いと思います。 どこまで噛み砕いて書けばいいのかわからないのですが、これでもわからなければ初心者向けの入門本で基本的なところを学んだ方が良いかも知れません。

SariGEnNu
質問者

お礼

非常にありがとうです こういうことだんたんだ という実感が持てました 実際に使えました ということはファイル名の?name=aの部分については $_FILESを使おうと思います 一つよく分らないのは、これはスクリプト内部でも変数を読ませることができると思います この場合の変数を読ませる順番は外部が先で内部が後と理解しておけばいいんでしょうか

その他の回答 (2)

回答No.3

No1です。 >ということはファイル名の?name=aの部分については $_FILESを使おうと思います おっと、$_FILESは違いますよ。これはフォームでファイルをアップロードした場合に、そのファイル名などが入る変数です。普通にURLの後ろに?name=aを付けたとしたら$_GETです。 >一つよく分らないのは、これはスクリプト内部でも変数を読ませることができると思います >この場合の変数を読ませる順番は外部が先で内部が後と理解しておけばいいんでしょうか $_REQUEST変数において、という事ですよね?いい質問ですね。variables_orderという設定項目で順番を設定する事ができます。 とここまで書いて、こういう事を聞いているのではない感じがしてきました・・・。「変数を読ませる順番」って表現がちょっと変ですね。「変数とは何ぞや」って部分で勘違いしているという事はないですか?

SariGEnNu
質問者

お礼

ありがとうございます $_FILESはアップロード関係だったんですね. $_GETで理解します >「変数を読ませる順番」って表現がちょっと変ですね。 はい、仰せのとおりでございます 私の気持ちが切羽詰っていて取り乱し放題です 変数はデータを格納するようなものなので $_REQUEST変数に入るデータの順番 という言い方が正確だと思います >とここまで書いて、こういう事を聞いているのではない感じがしてきました そんなことありません、こういうことが理解できたので スッキリ理解することができました ですが、variables_orderという設定はまだ使う予定がありません いずれ使えるようになりたいと思います.そのころには忘れず思い出して使えるようにしておきたいと思います

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

実際のコードで実験してみたほうが分かりやすいと思います。 変数を読む順番はPHPで記述された上から順番に処理されるので、外部とか内部とかの優劣はありません。 まぁ、外部から読み込めばPHPを開いた時点で変数に入るので内部で記述するよりは早いと言うことかもしれませんが、そこはあまり気にするところではないですね。 要はどのように処理するか。ですから。 ちなみに$_FILESはなんか間違っているような・・・ (一旦$_FILESは忘れてください) 一般的に最初は $_POST か $_GET しか使いません。 <form action="x.php" method="POST"> <input type="text" name="a" value="1"> <input type="submit"> </form> とすれば $_POST['a']に「1」が入ります。 x.php?a=1 とすれば $_GET['a']に「1」が入ります。 POST か GET か分からない場合は $_REQUEST を使えばどちらとも対応しますよ、と言うことです。 これをPHP内部で $_GET['a'] = 2; とすれば $_GET['a'] は「2」になります。 つまり、最後に指定した物が有効になるのです。 最初が大切ではなく、最後が大切なんですね。

SariGEnNu
質問者

お礼

本当にありがとうございます 少しはREQUEST,POST,GETの区別ができるようになりました これからも頑張っていきます

関連するQ&A

  • 二つのPHPファイルを上手く一つにしたいのですが

    ラジオボタンABCDを選択して上のNEXTボタンを押したとき、回答をSESSIONの配列に蓄えつつ次の問題へ進みたいのですがなかなか上手くいきません。 助けて頂けると嬉しいです。 ちなみに上のtest.phpでは問題を進んだり戻ったりの表示ができ、下のsession.phpではSESSION配列にクリックした分の回答を格納することができます。 //test.php <?php session_start(); ?> <html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <body> <p>&nbsp;</p> <p> <?php $max=$_POST["next"]; if($max==null){ $max=1; }else{ $max++; } ?> </p> <p>&nbsp; </p> <form method="post" action="test.php"> <input TYPE="radio" NAME="name2" VALUE="1" CHECKED>ア <input TYPE="radio" NAME="name2" VALUE="2">イ <input TYPE="radio" NAME="name2" VALUE="3" CHECKED>ウ <input TYPE="radio" NAME="name2" VALUE="4">エ <input type="submit" name="max_1" value="Next"> <input type="button" value="最初から" onClick="location.href='test.php'"> <input type="button" value="Back" onClick="history.back()"> <input type="hidden" name="next" value="<?php print $max?>"> </form> <TEXTAREA readonly cols="100" rows="20" name="e"> <? mb_language("uni"); mb_internal_encoding("utf-8"); //内部文字コードを変更 mb_http_input("auto"); mb_http_output("utf-8"); $db=mysql_connect("localhost","接続ID","パスワード"); mysql_query("SET NAMES utf8",$db); //クエリの文字コードを設定 mysql_select_db("データベース名"); //データベースに接続 if (!$con = mysql_connect("localhost", "接続ID", "パスワード")) { echo "接続失敗" ;   exit ; } //データベースを選択 if (!mysql_select_db("データベース名", $con)) { echo "データベース選択失敗" ;   exit ; } $sikenbango=111; $mondaibango=$max; if (!$res = mysql_query("SELECT * FROM `MONDAI` WHERE SIKENBANGO='$sikenbango' AND MONDAIBANGO='$mondaibango'",$con)) { echo "SQL失敗<BR>" ;   exit ; } //検索した結果を全部表示 while ($row = mysql_fetch_array($res)) { echo $row["mondai"]; echo $row["kaito"]; echo "<BR>" ; } //結果セットの開放 mysql_free_result ($res) ; //データベースから切断 mysql_close($con) ; ?> </textarea> //session.php <?php session_start(); ?> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <?php if (!isset($_SESSION['answer'])) { $_SESSION['answer'] = array(); } if (isset($_POST['submit'])) {//クリックしたとき $qno = intval($_POST['qno']);//整数が入る if (($qno >= 1)and($qno <=80)) { $_SESSION['answer'][$qno] = $_POST['answer']; // セッションに追加 // データベースへも保存したければここに記述 } } else { $qno = 0; } if ($qno == 80) { print "<pre>"; print_r($_SESSION); print "</pre>"; } else { $qno++; print '<form action="session.php" method="post">' . PHP_EOL; print '<input type="hidden" name="qno" value="' . $qno . '" />' ; print '<input TYPE="radio" NAME="answer" VALUE="1" CHECKED>A'; print '<input TYPE="radio" NAME="answer" VALUE="2">B'; print '<input TYPE="radio" NAME="answer" VALUE="3" CHECKED>C'; print '<input TYPE="radio" NAME="answer" VALUE="4">D'; } print '<input type="submit" name="submit" value="NEXT">' . PHP_EOL; print '</form>' . PHP_EOL; print "<hr />"; print "<pre>"; print_r($_SESSION); print "</pre>"; ?>

    • 締切済み
    • PHP
  • PHPとMysqlのページ分割表示について

    以前こちらで質問させて頂きまして htmlの検索フォームから入力した情報をデータベースから引っ張ってきて 表示するまでは出来たのですが、表示制限を10個にして、次のページ、前のページと移動させるようなシステムにしたいのですが、うまくいきません(エラーが出てしまいます) どうか、お力をお貸し願えないでしょうか。 search.html <html> <head><title>検索</title></head> <body> <form action="/search/"method="post"> /*page_numを入れた*/ <input type="hidden" name="page_num" value="0"> <li>会社名</li> <li><input type="text"name="name"></li> <li>電話番号</li> <input type="text"name="phone" maxlength="11"> <input type="submit" name="submit" value="検索"> </body> </html> index.php(データベースから情報を引っ張り出す) <?php $host="localhost"; if(!$conn=mysql_connect($host,"usr","passwd")){ die("データベース認証エラー.<br />"); } mysql_select_db("usr",$conn); $condition=""; if(isset($_POST["name"])&&($_POST["name"]!="")){ $name=mysql_real_escape_string($_POST["name"]); $name=str_replace("%","\%",$name); $condition="WHERE name LIKE \"%".$name."%\""; } if(isset($_POST["phone"])&&($_POST['phone']!="")){ $phone=mysql_real_escape_string($_POST["phone"]); $phone=str_replace("%","\%",$phone); if($condition==""){ $condition="WHERE phone LIKE \"%".$phone."%\""; }else{ $condition.="AND phone LIKE \"%".$phone."%\""; } } $tmp=$page_num*10; $sql="SELECT * FROM table".$condition."ORDER BY id limit".$tmp.",10"; while($row=mysql_fetch_array($res)){ print("<table border=\"1\">"); print("<tr><td>会社名</td><td>電話番号</td></tr>"); print("<tr>"); print("<td>".$row['name']."</td>"); print("<td>".$row['phone']."</td>"); print("</tr>"); print("</table>"); } $cnt=$row[0]; //ページ表示 if(!$cnt>10){ echo ceil($cnt/10), "ページの中の",$page_num+1,"ページ目を表示<br>"; } //前の10件 if ($page_num!=0){ echo "<a href=index.php?name=",$name,".$page_num -1.">"; echo "&lt</a>; echo "前の10件"; } //次の10件 if (($page_num+1)*10<$cnt){ echo "<a href=index.php?name=",$name,".$page_num +1.">"; echo "次の10件"; echo "&g</a>t"; } mysql_free_result($res); //データベースから切断 mysql_close($conn); ?> ちなみにエラーが出ている行はここの //前の10件 if ($page_num!=0){ echo "<a href=index.php?name=",$name,".$page_num -1.">"; echo "&lt</a>; echo "前の10件"; } >>echo "&lt</a>; この部分がエラーになっています。

    • ベストアンサー
    • PHP
  • エラーページをPHPで作成したい

    サーバーから返されるエラーメッセージを、SSIで作成した場合 閲覧できないURLなど表示する事が出来ますが http://<!--#echo var="SERVER_NAME" --><!--#echo var="REQUEST_URI"--> これをPHPで表示させる事は可能ですか? もし出来るようでしたら、ご教授お願いいたします。

    • 締切済み
    • PHP
  • Ajax.requestでphpファイルを習得するとwhileが実行されない。

    プログラミング初心者です。初歩的な見落とし等あるかもしれませんがどうぞよろしくお願いします。 現在、AJAX、phpおよびMySQLを使ってWebアプリケーション(もどき)を製作しています。 元のファイル(便宜上a.htmlとします)にてprototype.jsのAjax.Requestを使ってphpファイル(db.phpとします)に向けて送ったパラメータによって処理を分けつつ、db.phpにてMySQLから取得して表示させたデータをさらにresponseTextで取得してa.html上に表示させるというという挙動を期待してコードを書いていました。 しかし取得したresponseTextの内容から推測するに、db.php単体で表示させると機能するwhileが、Ajax.requestでphpファイルにアクセスした場合には機能していないのです。 もう少し詳しく説明しますと、データを格納しているテーブルに対して、select* from [テーブル名] のクエリを投げたあと、 while($row= mysql_fetch_row($result)){ echo row["カラム名"]; } を行ってテーブルの内容を出力していたのですが、 phpファイルのurlをブラウザに直に打ち込んで表示させた場合は全レコードの内容が表示されるのに対し、Ajax.Request→responseTextでphpファイルの内容を取得した場合には、1行目にレコードの内容しか表示されないのです。 while文の後に出力した文字も表示されているのでwhile文の途中でコードの実行が止まったわけではないと思うのですが、いかんせん知識不足の私には対処法が思いつきません…。 誰か対処法について気が付く点等ありましたらご教授願います。

  • phpのページ送りについて

    既出の質問で大変恐縮ですが、どうしても自分の理解力が足りないため、教えてください。 phpでページ送りの機能をつけようと思います。 100件だけ取り出して、あとを 前のページへ|1|2|3|…|次のページへ のようにするのはどうしたらよいのでしょう。 いま組んでいるベースを書きます。 初心者で勉強をしているのですが頭が悪く、できれば下記に合わせて作っていただけますと幸いです。 ================================================================================== $sql2 = "select * from creater"; $result2 = mysql_query($sql2); $rows2 = mysql_num_rows($result2); if($rows2 == 0){ echo "<p>該当データがありません。</p>"; } else { while($row2 = mysql_fetch_array($result2)){ echo "<p><a href=\"creater.php?createrid=",$row2["createrid"],"\">"; echo $row2["creater"]; echo "</a>"; echo "</p>"; } } ================================================================================== 実際のページは ttp://www.game-minzoku.jp/all-creater2.php です。 何とぞ、よろしくお願いいたします。

    • 締切済み
    • PHP
  • phpで別のファイルの変数に代入する方法

    ちょっとややこしくなりますが、よろしくお願いします。 [a.php]と[b.php]というファイルを用意します。 [a.php] ------------------ <?php echo $hogehoge ; ?> ------------------ [b.php] ------------------ <?php $hogehoge = 'hogehoge' ; require('a.php') ; ?> ------------------ という風にして結果を ------------------ hogehoge ------------------ としたいのですが、他のファイルを呼び出す時に変数を指定するにはどうしたら良いのでしょうか。 また、その際に気をつけなければならないことがあれば教えて下さい。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP入力フォームについて

    現在入力フォームを作っています。 流れとしてはDBに入っている会員情報をフォーム上に呼び出して(各inputにはDB内の会員の情報が表示される)各会員が自分の情報を編集できるというフォームです。 ここで質問なのですが、会員の人が自分の入力内容を変更した際に入力漏れがあるとフォーム画面に戻るのですがその際に入力した内容が表示されるのではなくDB内のデータが表示されてしまいます。 これをDB内のデータではなく入力した内容にしたいのですが、どうしたらよろしいでしょうか? ソースは下記になります。 form.php <?php DB呼び出し・・・ $_SESSION['name'] = $row['name']; ・・・ ?> <?php echo $_SESSION['err_name']; ?> <input type="text" name="name" value="<?php echo $_SESSION['name']; ?>" /> confirm.php <?php $name = htmlspecialchars($_REQUEST['name']); if(!strlen($name)) { $_SESSION['err_name'] = '氏名を入力してください。'; $errFlag = true; } else { unset($_SESSION['err_name']); } エラーの時はform.phpに戻る ?> <?php echo $name; ?> としています。 とても省略していますが、お分かりの方がいらっしゃいましたら教えていただけると助かります。

    • 締切済み
    • PHP
  • うまくPHPファイルを読み込めない

    下記の2つのクラスがあり、AClass.phpからBClass.phpをincludeしています。 AClass.php └include BClass.php ところが、AClass.phpからうまくBClass.phpをincludeできないため、 ところどころデバッグ文を仕込んで調査したところ、 静的に変数を呼び出すところがあると、うまくincludeできないようでした。 具体的には、 AClass.php内で static public $AParam = array(...); とstaticな変数を定義しています。 BClass.php内で、 $name = get_class($this); // ここでAClass.phpの名前を取得しています if(isset($name::$AParam)){... // ★AClass.phpのstatic変数、$AParamを呼び出そうとしています★ ★の部分のように、「クラス::パラメータ」があると、 どうやらAClass.phpからBClass.phpをincludeできずに終わってしまい、 ★の部分がなければ、きちんとincludeされるようです。 何かお心当たりありませんでしょうか。 設定等でも何かお心当たりありましたら、ご教示いただければ幸いでございます。 PHP Version => 5.3.0 Server version: Apache/2.2.13 (Unix)

    • ベストアンサー
    • PHP
  • ハンドルネームの%はどういう意味ですか

    ハンドルネームの@に関する質問↓を見て思ったのですが、 http://okwave.jp/kotaeru.php3?q_id=1765226 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1765226 ハンドルネームの%は何を意味するのでしょうか? 以前、A@B%Cだったか、A%B@Cだったか忘れたのですが、このような形のハンドルネームを複数見かけました。 ご存知の方がおられましたら、お教えください。よろしくお願いします。

  • PHP の ファイルアップロード

    私は以下のスクリプトを実行しましたがエラーが出ました。誰か教えてください。 --------------------------------------------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>ファイルアップローダー2</title> </head> <body> <form method="post" enctype="multipart/form-data" action="09_03_fileup.php"> <input type="file" name="data" size="30"> <input type="submit" value="表示!"> </form> <!--ここからPHPが始まります。--> <?php $updir = "./updir/";            //ファイルを保存するフォルダ $filename = $_FILES['data']['name']; if(file_exists($_FILES['data']['tmp_name'])){         //ファイルの存在を確認 tempの状態で確認  $filesize = filesize($_FILES['data']['tmp_name']);     //ファイルサイズを取得 tempの状態で取得  if($filesize <= 100000){   if(ereg("(^[a-zA-Z0-9_-]+)\.(jpg)|(^[a-zA-Z0-9_-]+)\.(gif)",$filename)){ //jpgかgifしかアップできない    move_uploaded_file($_FILES['data']['tmp_name'], $updir.$filename); //ファイルをuploadフォルダに保存     echo "ファイル名 " . $filename . " アップロード成功!";     echo $_FILES['data']['error'];     echo "<br><br>";     echo "<img src='./$updir/$filename'>";   } else {     echo "jpg かgif のファイルしかアップできません。或いはハイフン以外の記号があります。";   }  } else {     echo "$filesize Byte ファイルサイズが大きすぎます。<br>100000 Byte 以下にしてください。";  } } else {    echo "ファイルをアップした順にテーブルに並べていきます。20枚でお終い。<br>"; } //ここから保存されたファイルの表示部分の記述です。 if ($handle = opendir($updir)) {    //フォルダを開きます。  echo "<table border='1'>";  $cnt = 1;     //カウント用の数字です。   while (false !== ($file = readdir($handle))) {      //ファイルがあればすべて順に読みこむ    if ($file != "." and $file != "..") {     //.と..を読まないようにします。      if($cnt % 5 == 0){    //カウントが5で割って0なら右端なので</tr>を付ける       echo "<td><img src='$updir/$file' width='112'></td></tr>";      } else if($cnt % 5 == 1){   //5で割って1なら左端なので<tr>を付ける       echo "<tr><td><img src='$updir/$file' width='112'></td>";      } else {       echo "<td><img src='$updir/$file' width='112'></td>";      }    $cnt++;    }    if($cnt > 20){   //カウントが20を超えたら終了      break;    }   }  closedir($handle);      //フォルダを閉じます }    //ここからテーブルがぴったり右端で終わらなかった時の処理 if(!(($cnt-1) % 5 == 0)){  //右端ぴったりで終わらなかったら  $cvr = 5-($cnt-1) % 5;   for($a=1;$a<=$cvr;$a++){  //足りない分だけ補う    echo "<td width='112'> </td>";   } echo "</tr>"; } echo "</table>"; ?> <!--これでPHPは終わりです。--> </body> </html> --------------------------------------------------------------- エラーが以下の通りです --------------------------------------------------------------- Parse error: parse error, unexpected T_VARIABLE in /home/wwwbest/public_html/09_03_fileup.php on line 20 --------------------------------------------------------------

専門家に質問してみよう