• ベストアンサー
※ 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