• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで ?seq= の後に続く数に応じてUR転送するには?)

PHPでUR転送する方法

このQ&Aのポイント
  • PHPで ?seq= の後に続く数に応じてURL転送する方法を紹介します。
  • 旧サーバで動いていたPHPは外部から張ってあるリンクをそのまま新サイトで活かすことができないため、URL転送の方法を模索しています。
  • 先程探し当てたPHPのソースコードを書き換えることで、?seq= の後の数に応じてURL転送を実現することができます。

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

  • ベストアンサー
  • 20091110
  • ベストアンサー率66% (2/3)
回答No.3

ページ間のデータ送信方法でよく使われるのが「GET」「POST」 読みはそれぞれゲットとポストです。 違いはここでは割愛して、http://www.okwave.ok/test.php?seq=1 を例に見てみます。 seq=1 はGET送信の書き方です。 受け取り先のPHP(test.php)内、GETで送られたデータ「seq」は$_GET['seq']と表現します。これの値として「1」が入っています。 この値を使って飛び先を分岐させます。 switch文を使ってもよいのですが、ifの方が色々ラクだと思いますので今回if文で書いてみます。 ※1行文の先頭にある「//」はその行はコメント・注釈ですよ、という意味です。 //$_GET['seq']の中身がからっぽではなくて(関数の前の!は否定を表す)、値はセットされているし、しかもその値は数字だったら以下の処理を行う if(!empty($_GET['seq']) && isset($_GET['seq']) && is_numeric($_GET['seq'])){ if($_GET['seq']==1){ //もし$_GET['seq']の中身が「1」だったら header('Location:http://www.okwave.jp/'); //このURLに転送 exit(); //処理を終了する }else if($_GET['seq']==2){ //じゃなくて、もし$_GET['seq']の中身が「2」だったら header('Location:http://www.goo.ne.jp/'); //このURLに転送 exit(); //処理を終了する }else if($_GET['seq']==3){ //ではなくて、もし$_GET['seq']の中身が「3」だったら header('Location:http://www.yahoo.co.jp/'); //このURLに転送 exit(); //処理を終了する } } 処理内容はyambejpさんのソースと意味的に同じです。 ご質問内容にありましたソース内「array_shift(array_keys($_GET))」の箇所ですが、このように書くこともあるんだねー、という感じです。

chack
質問者

お礼

丁寧なご回答ありがとうございます。 実は、後から、外部からのリンクに記載ミスが見つかり、?seq だけでなく?faq でアクセスされた場合も対応しなければならないことが判明したので、発展型まで教えて頂いたおかげ様をもちまして対応が可能となり、大変助かりました。 元々のソースを殆どいじらない形ですと、getする内容が複数になると対応できなかったので。 どうもお世話になりました!

その他の回答 (2)

  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.2

んー、正直 そちらが探し当てたソースも なんで 一行目がそんな書き方なのか謎ですが、とりあえず、何か事情があったんだろうと思って、おいて置くとして。。 > seq= と指定してしまうと、PHPのコマンドに関係してしまって、 初耳です。多分、平気です。 とりあえず、難しく考えないで すごく初歩的な質問なんだろうと解釈して答えます。 > switch(array_shift(array_keys($_GET))) { を switch($_GET[seq]) { と 置き換えてください。

chack
質問者

お礼

ご回答ありがとうございました。 > なんで 一行目がそんな書き方なのか謎ですが あ、そうなんですか。 目的はおかげさまで達することが出来ましたが、その1行目の件が不思議というご指摘も今後のために参考になりました。 急場は切り抜けたので、この後、これがどういうことなのかを時間をかけて勉強してみたいと思います。 どうもありがとうございました!

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

微妙に意図がわからないのですが、こういうことですか? <?php switch(isset($_GET["seq"])?$_GET["seq"]:array_shift(array_keys($_GET))) { case "1": // ?1もしくはseq=1 のとき header("Location:http://www.okwave.jp/"); break; case "2": // ?2 もしくはseq=2のとき header("Location:http://www.goo.ne.jp"); break; default: // その他の時 header("Location:http://www.yahoo.co.jp/"); break; } ?>

chack
質問者

お礼

ご回答、ありがとうございました。 そうですそうです。 教えて頂いた形で上手く行きました。 お世話になりました!

関連するQ&A