- ベストアンサー
PHPで$_REQUESTを変数として扱う方法とは?
- PHPで$_REQUESTを変数として扱う場合、注意が必要です。
- エラーが発生する原因は、配列$_REQUESTに値を代入する前に、配列のインデックス変数$iを定義していないことです。
- 解決策は、forループの初期化文で$i=0として、配列$_REQUESTに値を代入することです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず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を使うべきだと思います。
その他の回答 (2)
- wakame0729
- ベストアンサー率32% (245/765)
最初の質問とは完全に内容が変わっちゃってますので、別な質問を立てましょう。それから、おっしゃってる処理はどこにでもあるものです。入門書などにサンプルが載ってる場合もあるでしょう。ここまでできるだけわかりやすく答えて来ましたが、このレベルから教えなければならないとなると、そのうち一本のプログラムを僕が書かなければならなくなりそうです。 実際のところ、補足にあるスクリプト、こちらで問題点を指摘するレベルではなく、一から正しいものを書かなければならないほどおかしなものになっています。いきなり独学で(というか、ここに頼りっきりで)開発しようとしないで、適当な本やサンプルなど見つけて、この程度の基本的な処理は動かせるようになってから、その上で具体的な質問をするようにしたらどうですか?ちょっとこれではこのようなQ&Aサイトでできる事を超えてると思いますよ。 冷たいようですが、基本的な知識がなければこちらもわかって頂く自信がありません。ご考慮下さい。 P.S 補足にある質問は$sql = "select * from 男 where ID = ".$_POST["loverid"];がヒントです。実際には入力チェックをしないと実用性に問題があるでしょう。
お礼
ありがとうございました ヒントだけでも嬉しいです 入門書を読みながら勉強していきます
- wakame0729
- ベストアンサー率32% (245/765)
まずスクリプトのコーディングがめちゃめちゃです。めちゃめちゃすぎてどこから説明すれば良いのかわからないくらいです・・・。 それとまだ$_REQUESTが何なのかを大きく勘違いしているみたいです。もともと$_REQUEST変数の使用自体推奨されてないみたいですし、一旦$_REQUEST変数の事は忘れましょう。なんか根本的に勘違いがあるみたいですよ。そもそも配列自体をわかってないように思います。この状態でスクリプトを書くのには無理があるので、一度入門書のサンプル等を組みながらひとつひとつ意味を調べて行ったほうがよいのでは?基本的な知識がないと、このような所でいくら質問をしても、その回答自体を理解できないんじゃないでしょうか。 ちなみにやりたい事をサクっと書くと for($i=1;$i<=100;$i++){ echo "jiroが$i人いる<br>\n"; } これだけじゃないですかね。$_REQUESTだのなんだのは、全く関係ないと思いますよ。
お礼
ありがとうございます すいません、たしかにjiroの処理に$_REQUESTは不要で wakame0729様の処理が一番です 私も質問した後に気がつきました. 本当にやりたいことは オプションから選んだ項目に対して それに応じた処理をするものですが もう少しやりたい処理の内容を整理して また$_REQUESTが本当に必要が否か検討して質問しなおさせてくださいませ
お礼
とってもありがとうございます 実は私も$_POSTと$_GETの違いが気になっていたんです わたしは、wakame0729様の言う違いだなんて思ってませんでした.もっとこう、データもとの違いなのかなと思ってました.URLの尻尾のデータなのかフォームから得られるデータなのかとか、ですが、このような説明を聞くと $_GETで使えなかったら$_POSTを使えというつまり、$_POSTの方が一般的なような気に思えました これからは$_REQUESTよりも$_GETや$_POST,$_COOKIEなどを使うようにします
補足
次のような処理がもし分れば教えて下さい まず、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を使うと思いますがテーブルのキーとして反映させるかがよく分ってません アドバイスを是非お願いします