• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:次のような処理をしたいんですがエラってしまいます)

PHPで$_REQUESTを変数として扱う方法とは?

このQ&Aのポイント
  • PHPで$_REQUESTを変数として扱う場合、注意が必要です。
  • エラーが発生する原因は、配列$_REQUESTに値を代入する前に、配列のインデックス変数$iを定義していないことです。
  • 解決策は、forループの初期化文で$i=0として、配列$_REQUESTに値を代入することです。

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

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

まずPOSTとGETについて理解した方がいいですね。ブラウザからサーバーに「WEBの内容を送って下さい」とお願い(リクエスト)する方法は2つあります。POSTとGETです。ブラウザに普通にURLを打ち込んだ状態、またはAタグでリンク先に飛ぶ場合はGETという方法でサーバーにリクエストしています。 もう一つのPOSTですが、フォームを使ったリクエストがありますね、この<form>タグにmethod="xxxx"という属性があると思いますが、ここにmethod="post"と書くとPOSTという形式でリクエストをします。method属性を省略した場合またはmethod="get"と書いた場合はフォームでもGETになります。フォームであればinputタグ、selectタグなどが、URLのリクエストであれば?name=10というような尻尾の事をパラメータと呼ぶ事にしましょう。この時、受け取る側のスクリプトでは、GETが使われていれば$_GET,POSTであれば$_POSTにそのパラメータが$_GET["名前"]="値"、$_POST["名前"]="値"という形式で入ります。そして$_REQUESTにはGETであってもPOSTであっても$_REQUEST["名前"]="値"という形式で同時に入ります。 ちなみにGETとPOSTの違いですが、GETですとパラメータの長さに制限があるのに対し、POSTでは制限がありません。大きなデータを送るならPOSTです。また、GETはパラメータが全部URLの形で見えてしまいますが、POSTは一応隠されています。パラメータをあまり見せたくないという理由でPOSTを使う事もあります。 $_REQUEST変数の使用が推奨されないというのは以下の理由です。$_REQUEST変数に表れるパラメータはPOST,GET以外にもクッキーの値、サーバーの環境変数なども入ります。$_REQUEST変数の値を見ているだけでは、その値がどこから来たのか判断できません。例えばサーバーの環境変数を見ているつもりで$_REQUESTの値を参照している箇所があるとしますね?もし悪意があってスクリプトの内容を知っている人がいたら、サーバーの環境変数と同じ名前と任意の値をGETで送りつける事で、スクリプトを勘違いさせる事もできてしまいます。これが場合によってはセキュリティホールになり得ると言った意味です。 リクエスト元がGETなのかPOSTなのかが解っているのであれば、$_GET,$_POSTを使うべきだと思います。

SariGEnNu
質問者

お礼

とってもありがとうございます 実は私も$_POSTと$_GETの違いが気になっていたんです わたしは、wakame0729様の言う違いだなんて思ってませんでした.もっとこう、データもとの違いなのかなと思ってました.URLの尻尾のデータなのかフォームから得られるデータなのかとか、ですが、このような説明を聞くと $_GETで使えなかったら$_POSTを使えというつまり、$_POSTの方が一般的なような気に思えました これからは$_REQUESTよりも$_GETや$_POST,$_COOKIEなどを使うようにします

SariGEnNu
質問者

補足

次のような処理がもし分れば教えて下さい まず、mysqlのDBがあります 恋人DBの男テーブルがあるとします 男テーブルには次のデータが入ってます  ID  Name  birthday  年収  肩書  1  さとし  19840508  192  プー  2  ひろし  19840806  206  土方作業  3  ともひさ 19830203  36   ストリート  4  こうじ  19850321  567  設計士     5  権助   19431011  3257  市長 次に profile.phpというページに オプションボックスがあってリストが次のようになっています 1 さとしのプロフを見る 2 ひろしのプロフを見る 3 ともひさのプロフを見る 4 こうじのプロフを見る 5 権助のプロフを見る ここで例えば2のひろしを選んだとするとつぎのようになります profile.php?loverid=2  name ひろし  年収 206万円  年  20歳(今年の8月で21歳になる)  肩書 土方作業 というページに表示が変わります こういうのを作りたいのですが私は次のように考えてます profile.phpのソース  mysql_connect(恋人DB、pw,user);  $man=mysql_query(select * from 男);  $num_man=mysql_num_rows($man);  //オプションボタンを作る  if(!$num_man=0){  echo"<select name=man>  for($i=1;$i<=$num_man;$i++){ $name=mysql_result($man,$i,"name"); echo"<option value=$i>  $i<space>$nameのプロフを見る"</option>;}  else{echo"男いない";}  //オプションで選択したときの処理  この後がときに悩んでます  ここで$_POSTを使うと思いますがテーブルのキーとして反映させるかがよく分ってません アドバイスを是非お願いします

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

最初の質問とは完全に内容が変わっちゃってますので、別な質問を立てましょう。それから、おっしゃってる処理はどこにでもあるものです。入門書などにサンプルが載ってる場合もあるでしょう。ここまでできるだけわかりやすく答えて来ましたが、このレベルから教えなければならないとなると、そのうち一本のプログラムを僕が書かなければならなくなりそうです。 実際のところ、補足にあるスクリプト、こちらで問題点を指摘するレベルではなく、一から正しいものを書かなければならないほどおかしなものになっています。いきなり独学で(というか、ここに頼りっきりで)開発しようとしないで、適当な本やサンプルなど見つけて、この程度の基本的な処理は動かせるようになってから、その上で具体的な質問をするようにしたらどうですか?ちょっとこれではこのようなQ&Aサイトでできる事を超えてると思いますよ。 冷たいようですが、基本的な知識がなければこちらもわかって頂く自信がありません。ご考慮下さい。 P.S 補足にある質問は$sql = "select * from 男 where ID = ".$_POST["loverid"];がヒントです。実際には入力チェックをしないと実用性に問題があるでしょう。

SariGEnNu
質問者

お礼

ありがとうございました ヒントだけでも嬉しいです 入門書を読みながら勉強していきます

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

まずスクリプトのコーディングがめちゃめちゃです。めちゃめちゃすぎてどこから説明すれば良いのかわからないくらいです・・・。 それとまだ$_REQUESTが何なのかを大きく勘違いしているみたいです。もともと$_REQUEST変数の使用自体推奨されてないみたいですし、一旦$_REQUEST変数の事は忘れましょう。なんか根本的に勘違いがあるみたいですよ。そもそも配列自体をわかってないように思います。この状態でスクリプトを書くのには無理があるので、一度入門書のサンプル等を組みながらひとつひとつ意味を調べて行ったほうがよいのでは?基本的な知識がないと、このような所でいくら質問をしても、その回答自体を理解できないんじゃないでしょうか。 ちなみにやりたい事をサクっと書くと for($i=1;$i<=100;$i++){ echo "jiroが$i人いる<br>\n"; } これだけじゃないですかね。$_REQUESTだのなんだのは、全く関係ないと思いますよ。

SariGEnNu
質問者

お礼

ありがとうございます すいません、たしかにjiroの処理に$_REQUESTは不要で wakame0729様の処理が一番です 私も質問した後に気がつきました. 本当にやりたいことは オプションから選んだ項目に対して それに応じた処理をするものですが もう少しやりたい処理の内容を整理して また$_REQUESTが本当に必要が否か検討して質問しなおさせてくださいませ

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ループ処理について

    テキストファイルにある数字が存在するかしないかの判断をしたいですがうまくいきません、どこが悪いのでしょうか・・・。 <?php $log=file("1.txt"); for($i=1;$i<count($log);$i++){ echo"<a href=1.php?no=$i>$i</a> ";} echo"<BR><BR><BR><BR><BR>"; if ($_GET["no"]) { $no = $_GET["no"]; $log=file("1.txt"); for($i=0;$i<count($log);$i++){ $list=explode("<>",$log[$i]); if($no==$list[1]){echo"$list[0]"."はOk<BR>";} elseif($no!=$list[1]){echo"";} } if($no!=$list[1]){echo"存在しません";} } ?> 1.txtの中身は 7<>7<> 8<>7<> 5<>5<> 6<>5<> 3<>3<> 4<>3<> 1<>1<> 2<>1<> 右の数字(7・5・3・1)が存在確認対象で、 ?no=数字で呼び出し、getでの呼び出し数字が右に存在すれば左の数字を表示します。 存在しなかったら 存在しません という言葉を1回だけ表示します。 no=1とno=2 no=4 no=6だけ上手くいくのですが、他はokと存在しませんが両方混在してしまいます。no=3 5 7も1 2のようにしたいのですが、 どう記述すれば上手い具合にいくでしょうか? よろしくお願い致します。

    • 締切済み
    • PHP
  • phpで5で割って余りを表示させない方法

    phpで5で割って余りを表示させない方法を探しています。 例えば <?php for ($i = 1; $i < 15; $i++) { echo $i; if ($i % 5 == 0) { echo "<br />"; }} ?> を実行させた場合 12345<br/> 678910<br/> 11121314 となりますが、この場合11から14までを表示させないようにすればどうすればできますか?

    • 締切済み
    • PHP
  • 値の引継ぎについて

    下記のスクリプトについてなのですが… <?php $data=array("1","2","3","4","5","6","7","8","9","10","11","12"); for($i = 0; $i < 3; $i ++){ $index = fopen("$i.php", "w"); for($n = 0; $n < 4; $n ++){ fwrite($index,$data[$n]); } fclose($index); } for($i = 0; $i < 3; $i++){ echo "<a href=\"./$i.php\">$i</a><br>"; } ?> 0.php、1.php、2.phpのファイルができるのですが、1で表示されるのが5~8、2で表示されるのが9~12となるにはどのようにしたら良いでしょうか?

    • ベストアンサー
    • PHP
  • フォームを使った配列変数の受け渡し

    PHP初心者です、よろしくお願いします。 フォームからPHPで配列変数を受け渡すことを考えています。 一次元配列はうまく渡せましたので、これを二次元にしましたところ、 うまく渡せません。基本的なPHPの文法がわかってないので、つまづい ています。多分、配列変数の記述方法がおかしいのだと思うのですが・・。 ご教授よろしくお願いします。 <html> <body> <form method = "POST" action ="test2.php" > <?php //データ渡し側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10'>\n"); echo ("<br>\n"); } echo ("</tr>\n"); } ?> <input type="submit" name ="sbmit" value="data_input" > </form> </body> </html> <?php //データ受け側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j < 2;$j ++ ){ $tmp_data[$i][$j] = $_POST["data"][$i][$j]; echo ("$tmp_data[$i][$j] <br>\n"); } } ?> <html> <body> <form method = "POST" action ="test2.php" > <?php for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10' value='$tmp_data[$i][$j]'>\n"); echo ("<br>\n"); } } ?> </table> <input type="submit" name ="sbmit" value="in" > </form> </body> </html> 実行結果は、 Array[0] Array[1] Array[0] Array[1] と表示されて、実際の入力した値が反映されません。

    • ベストアンサー
    • PHP
  • phpの結果をjavaスクリプトタグで表示したい

    phpの変数を含んだ処理結果をHTMLに埋めこんだjavaスクリプトタグで表示したいです。 php側のプログラム <?php header("Content-type: application/x-javascript"); $a = array('abc', 'def', 'ghi'); rsort($a); foreach ($a as $tmp) { echo "document.write(\"<P>$tmp</P><br>\")"; } ?> 表示側のHTML <html> <body> <script type="text/javascript" src="http://www.aaa.com/hoge.php"></script> </body> </html> echo "document.write(\"<P>$tmp</P><br>\")"; の箇所が変数でなければ、記入した文字が表示されます。。 例: echo "document.write(\"あああ\")"; 変数に対応した書き方でないと思いますが、、、アドバイスいただけないでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHP&mysqlで、選択したcheckboxを次ページで表示させる方法

    php&mysqlの初心者です。 現在、以下の様なホームページを考えています。 (1)DB内を検索 (2)DBアクセスし、検索結果を表で表示。  その際、checkboxを左につける。 (3)チェックされたレコードを再表示。 (1)から(2)まではうまくいくのですが、 checkboxでチェックされたレコードを再表示させる部分で 悩んでいます。 具体的には以下のような感じです。 ●(2)の部分 while($row = mysql_fetch_array($result)) { echo "<tr><td>"; echo "<input type=checkbox name=d_decide value="; $row{renban}; echo ">"; echo "</td><td>"; echo $row{"renban"}; echo "</td><td>"; echo $row{"namae"}; … ●(3)の部分 for($i=0; $i<count($d_decide);$i++) { echo $i; echo $d_decide{$i}; echo $_POST[d_decide]{$i}; echo "<br>"; } … これで表示されません。 何とか解決する方法を教えてください。

    • 締切済み
    • PHP
  • phpの値の受け渡し方法について

    b.phpの <dl> <form action='a.php' method='post'> <dt>生年月日</dt> <dd> <select name="Y"> <?php $start = 1920; //始まりの年 $end = 2020; //終わりの年 $select = 2000; //最初に選択された状態で表示したい年 for ($i=$start;$i<=$end;$i++){ if($i==$select){ echo "<option value=\"$i\" selected=\"selected\">$i</option>\n"; }else{ echo "<option value=\"$i\">$i</option>\n"; } } ?> </select> 年 <select name="M"> <?php for ($i=1;$i<=12;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select> 月 <select name="D"> <?php for ($i=1;$i<=31;$i++){ echo "<option value=\"$i\">$i</option>\n"; } ?> </select> 日 </dd> </dl> <input type="submit" value="送信する" /> </form> というコードで取得した生年月日をa.phpに渡し、表示させます。 a.phpファイルで <?php print('誕生日は:' . ($_REQUEST['Y']. '年',ENT_QUOTES)); print(($_REQUEST['M']. '月',ENT_QUOTES)); print(($_REQUEST['D']. '日',ENT_QUOTES)); ?> と、コードを入力しましたら、 誕生日は:1985年1月31日 という値を受け取り、ブラウザ上で表示することはできたのですが、他のコードで表示する方法はないのかと考えております。 もし、他のコードで表示できる方法がありましたらぜひ教えてください。お願いします。

    • ベストアンサー
    • PHP
  • phpで次の場合なぜ3が表示されず、2までなんでし

    phpで次の場合なぜ3が表示されず、2までなんでしょうか? <?php for($i = 0; $i <= 4; $i ++){ if($i == 3) { break; } echo $i."\n"; } ?>

    • ベストアンサー
    • PHP
  • PHPで配列に格納されたデータを表示させるには。

    PHPで配列に格納されたデータを表示させるには。 全ての配列の要素を表示させることは下のようにすればできるのはわかります。 <?php for($i=0;$i<sizeof($data);$i++){ echo $data[$i]; echo "<br>"; } ?> 配列の0~9まで(10個)をまず表示させて、「次へ」のようなリンクで次の10~19までを表示させるようにしたいのですが、どのようにすればよいのでしょうか。

    • ベストアンサー
    • PHP
  • フォームの値をまとめて取得する関数

    以下のようなフォームから値を取得するときに、(2)のような関数化したいと思っていますが、思うように取得できません。どこが問題かアドバイスください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=sjis" /> <title>sample</title> </head> <body> <form action="" method="post"> 名前:<br /> <input type="text" name="name" size="30" value="" /><br /> コメント:<br /> <textarea name="comment" cols="30" rows="5"></textarea><br /> <br /> <input type="submit" value="登録する" /> </form> </body> </html> (1)問題なく表示できる <?php  foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) {   ${$k}=$v;  } echo "名前:$name<br>"; echo "コメント:$comment<br>"; ?> (2)表示できない? <?php function Request() {  foreach(${"_" . $_SERVER["REQUEST_METHOD"]} as $k=>$v) {   ${$k}=$v;  } } Request(); echo "名前:$name<br>"; echo "コメント:$comment<br>"; ?>

    • 締切済み
    • PHP