PHPで条件によって飛ばすページを変える方法

このQ&Aのポイント
  • 条件によって異なるページにリダイレクトするためのPHPコードを作成しましたが、うまく動作しません。どこを修正すればよいでしょうか?
  • 作成した【jyouken.php】では、名前が入っている場合はname.phpにリダイレクトし、空欄の場合はid.phpにリダイレクトするようにしましたが、常にname.phpにリダイレクトされてしまいます。
  • 独学でPHPを学んでいるため、基本的な設定が抜けている可能性があります。修正すべき点があれば指摘していただけると助かります。
回答を見る
  • ベストアンサー

条件により飛ばすページを変える

PHP独学者です。 PHPで条件によって飛ばすページを変えたいと思っています。 ユーザーがあるボタンをクリックすると、ユーザーによって クエリー結果が出てきます。 例1 http://hoge.jp/jyouken.php?id=123&name=hara 例2 http://hoge.jp/jyouken.php?id=124&name= 上記のようにidは必ず入ってますが、名前は入っているものと空欄のものがあります。 今回作る【jyouken.php】について 名前が入っているものはname.phpへ → name.php?name=hara 名前が空欄のものは、id.phpへ     → id.php?id=124 とリロードすることを考えました。 下記のPHPで試したところ、分岐されないばかりか、結果としては必ず name.php?name=1 にロケーションされてしまいます。 もちろん1などという名前はどこにもありません。 どこを訂正すれば宜しいでしょうか? また、独学のため当たり前に設定すべきことが抜けているかもしれません。もし そのようなことがございましたら同時にご指摘いただけましたら幸甚です。 宜しくお願い致します。 【jyouken.php】 <?php $type = $_GET['id']; $type2 = $_GET['name']; if ($type=="") { header("HTTP/1.1 301 Moved Permanently"); header("Location: id.php?id=$type[id]"); } else { header("HTTP/1.1 301 Moved Permanently"); header("Location: name.php?name=$type2[name]"); exit(); }; ?>

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

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

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

こんにちは。 クエリーパラメータとして、「id」と「name」というキーは必ず来る想定ですか? つまり、 isset($_GET['id']) →TRUE isset($_GET['name']) →TRUE ですかね? これだと、Valueがemptyになるので、 $type = $_GET['id']; $type2 = $_GET['name']; if (empty($type2)) { header("HTTP/1.1 301 Moved Permanently"); header("Location: id.php?id=$type"); exit(); } else { header("HTTP/1.1 301 Moved Permanently"); header("Location: name.php?name=$type2"); exit(); }; ですかね・・・。

tajix14
質問者

お礼

有難うございました。 出来ました!! 助かりました。 心より御礼申し上げます。

関連するQ&A

  • Locationでアンカーに飛ばしたい

    下記のPHPを作り、 name_idがなかったらname.php?a1=user_idに飛ばす、 name_idがあったらuser.php?a2=name_idに飛ばしています。 ここまでは問題ありません。 今回、 name.php?a1=user_id#name user.php?a2=name_id#name と、それぞれのページの#nameのアンカーが付いているところに飛ばしたいと考えています。 しかしながら、単純に下記を header("Location: name.php?a1=$type#name:"); のようにアンカーを追加したたでけでは思う行に飛ばすことができません。 Location で他のページのアンカーに飛ばすにはどうすば良いでしょうか? 宜しくお願い致します。 <?php $type = $_GET['user_id']; $type2 = $_GET['name_id']; if (empty($type2)) { header("HTTP/1.1 301 Moved Permanently"); header("Location: name.php?a1=$type:"); exit(); } else { header("HTTP/1.1 301 Moved Permanently"); header("Location: user.php?a2=$type2:"); exit(); }; ?>

    • ベストアンサー
    • PHP
  • Docomoでサイトが移動しました(301)が消えない

    お世話になっています。 携帯向けサイトを制作しているのですが、Docomo機種で「サイトが移動しました(301)」が消えずに困っています。 サイトはPHPで制作している為、拡張子が「.php」になります。 各所でheader移動しているのですが、そこで301表示が出てしまいます。 header移動は以下のように記述しています。 if(preg_match("/DoCoMo/",$_SERVER['HTTP_USER_AGENT'])){ header("HTTP/1.1 301 Moved Permanently"); header("Location: index.php?".SID); } else { header("Location: index.php"); } exit; セッションを利用している為、スラッシュで終わる事が出来ません。 POSTでSIDを渡す場合は問題なく移動出来ています。 文字コードはShift-JIS、確認を行った機種は70シリーズの3種類の携帯です。 header部分は「header('Status: 301 Moved Permanently');」と言う様にも試してみましたが解決しませんでした。 301表示を消す他の方法がありましたら、ご教授願えませんでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • 301リダイレクトをするとドコモだけ末尾に「/」を入れてもサイトが移動

    301リダイレクトをするとドコモだけ末尾に「/」を入れてもサイトが移動しました。となってしまいます。 301リダイレクトさえできれば どのような方法でもできればいいのですが色々試してみても サイトが移動しましたと表示されています。 ■cgiで行ったこと print "Status: 301 Moved Permanently\n"; print "Location: http://******.co.jp/\n\n"; exit; ■PHPで行った事 header("HTTP/1.1 301 Moved Permanently"); header("Location: http://******.co.jp/"); ■apacheで行った事 RewriteCond %{HTTP_HOST} ^(*****\.com)(:80)? RewriteRule (.*) http://******.co.jp/[R=301,L] 1つ1つ別にやってみましたが、最後にスラッシュを入れる、絶対パスをいれても 表示されてしまいます。 302リダイレクトはどうしても入れることが出来ないので 大変困っております。 どうぞ宜しくお願い致します。

  • HTTP Response Header 違う文字コードが表示される

    htaccessで redirect permanentを使ってリダイレクトしています http://www.aaa.com/ から http://www.aaa.com/wiki/メインページ  ドメインのHTTP Response Headerを調べると以下のようになっており HTTP Status Code: HTTP/1.1 301 Moved Permanently Location: http://www.aaa.com/wiki/mojibake Content-Type: text/html; charset=iso-8859-1 utf-8ではなくiso-8859-1になるのでurlの末尾が文字化けして困っています。 metaタグではutf-8になってるのですが、何か解決できる方法はありませんか?

    • ベストアンサー
    • PHP
  • 会員制ログインページ

    会員制ログインページを製作しているのですが なかなかうまくいきません <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); //データベースに接続するphpです require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } //照合しているのですが、いろいろ試した結果ここが おかしいようなのですが if($_POST["action"]=="login"){ $sql = "select * from users where login_id = '".mysql_real_escape_string($_POST["login_id"])."' and state = '0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date ='".date('Y-m-d H:i:s')."' where login_id='".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • ログインページ

    PHPとMySQLで ログインするときに、ログインIDとパスワード(md5処理)を 入力する普通のログインページをつくったのですが 照合するときに例えば ログインIDがphp パスワードが178だとログインできず ログインIDがabe パスワードがabeだとログインできる ログインIDがパスワード一致の場合だけ何故かログインできて しまうのですが、自分で書いていてなんなんですが 以下のプログラムではそういう風になってしまうんでしょうか。 <?php if($_POST["keep_login"] != ""){ session_set_cookie_params(365*25*3600); }else{ session_set_cookie_params(0); } session_start(); require("config.php"); if($_POST["passwd"]==""){ $_POST["passwd"]=time(); } if($_POST["action"]=="login"){ $login_id = mysql_real_escape_string($_POST["login_id"]); $sql="select * from users where login_id= '$login_id' and state='0'"; $result=mysql_query($sql); $users=mysql_fetch_array($result); if($users["passwd"]==md5($_POST["passwd"])){ $_SESSION["login_id"]=$_POST["login_id"]; $_SESSION["auth_code"]=md5($magic_code.$_POST["login_id"]); $_SESSION["name_kanji"]=$users["name_kanji"]; $sql="update users set login_date = '".date('Y-m-d H:i:s')."' where login_id= '".mysql_real_escape_string($_POST['login_id'])."' and state='0'"; $result=mysql_query($sql); if($_GET["redirect"] !=""){ header("Location:".$_GET["redirect"]); exit; }else{ header("Location:".$site_url); exit; } }else{ $message='<br><br><font color="red">ログインできませんでした</font><br>'; } } ?>

    • 締切済み
    • PHP
  • 会員ページ SESSIONについて

    レンタルサーバはさくらインターネット、プランはプレミアムです。 PHPは5.2.171、MySQLは5.1です。 login.phpから各メンバーのIDとPWを入力してデータベース内ののデータと一致したら、main.phpにLocationでとぶようにしています。 2日前ほどからログインができなくなり、大変困っています。(それまでは問題なくログインができた。) 原因はわからないのですが、色々検証したところ、 login.phpでログインしたときにmain.phpでIDが取得できていないということがわかりました。 コードは下記のようになります。 login.php if ($uid != "" || $upass != "") { $link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS); mysql_select_db($DB_NAME,$link); $uid = mysql_real_escape_string($uid, $link); $upass = mysql_real_escape_string($upass, $link); $userQuery = sprintf("SELECT count(*) as `cnt` FROM `member` WHERE `id`='%s' AND `password`='%s'",$uid,$upass); $userResult = mysql_query($userQuery, $link) or die(mysql_error()); if ($row = mysql_fetch_assoc($userResult)) { $count = $row['cnt']; if ($count == 1) { session_start(); $_SESSION['ok_flg'] = 1; $_SESSION['uid'] = $_REQUEST['id']; header("Location: main.php"); exit; } else { $msg = '<p class="error">ユーザーIDまたはパスワードが違います。</p>'."\n"; } } else { $msg = '<p class="error">ユーザーIDまたはパスワードが違います。</p>'."\n"; } } 省略部分が少しありますが、特に問題ないと思います。 main.php session_start(); if ($_SESSION['ok_flg'] != 1) { header("Location: /"); exit; } if (!isset($_SESSION['uid'])) { header("Location: /"); exit; } $uid = mysql_real_escape_string($_SESSION['uid'], $link); $userQuery = sprintf("SELECT * FROM `member` WHERE id='%s' ",$uid); $userResult = mysql_query($userQuery, $link) or die(mysql_error()); if ($row = mysql_fetch_assoc($userResult)) { $user_name = $row['user_name']; } echo $user_name; としています。 ここからが問題なのですが、 1.ログインするとSESSIONファイルが2つ発行されてしまう。  1つ目は空のファイル。2つ目がIDなどが記載されているファイル。 main.phpのsession_start()を取ると1つのみの発行。(IDなどが記載されている方。) 2.main.phpに切り替わったときに$_SESSION['ok_flg']と$_SESSION['uid']の値が取得できないためlogin.phpに戻される。 3.main.phpのsession_start()を取ればページは表示されるが、session_id()も$_SESSION['ok_flg']と$_SESSION['uid']の2つも取得できない。 3.main.phpでsession_start()を取れば他のページはsession_idは取得できるが$_SESSION['ok_flg']と$_SESSION['uid']が取得できない。 4.session_start()と併用で$_GETも使用しているページがあるが$_GETを使用しているページも2と同じ現象になる。 以上ですが、お分かりになる方がいらっしゃいましたら、教えていただけないでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • php フォーム入力のあと同じページ内に移行

    <?php session_start(); $error_message = ""; if(isset($_POST["login"])) { if($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") { $_SESSION["user_name"] = $_POST["user_name"]; $login_success_url = "login_success.php"; header("Location: {$login_success_url}"); exit; } $error_message = "※ID、もしくはパスワードが間違っています。<br> もう一度入力して下さい。"; } ?> ① $login_success_url = "login_success.php"; ② $error_message = "※ID、もしくはパスワードが間違っています。<br> もう一度入力して下さい。"; 同ページ内でのPOSTの受け渡しをしたいのですが、どうしたら良いでしょうか?

    • 締切済み
    • PHP
  • Basic認証

    初めまして、karuwazaといいます。 PHPとDB(Postgres)の勉強を始め、現在Basic認証の勉強をしています。 以下が自分が記載したコードなのですが、なぜ上手くいかないのか? 自分では解りません。 どこがどう間違っているのかなどのご指摘が頂ければと思い投稿させて 頂きました。 ご教授宜しくお願いします。 <?php include("./tools/common.php"); $con=db_connect(); //スーパーグローバル変数対策 if(!isset($PHP_AUTH_USER)){ $PHP_AUTH_USER = $_SERVER['PHP_AUTH_USER']; } if(!isset($PHP_AUTH_PW)){ $PHP_AUTH_PW = $_SERVER['PHP_AUTH_PW']; } if(!isset($PHP_AUTH_USER)){ header("WWW-Authenticate: Basic realm=\"WebSystem\""); header("HTTP/1.0 401 Unauthorized"); exit; }else{ $sql="SELECT id, pass FROM テーブル名 ORDER BY id"; $res=pg_query($con, $sql); $num=pg_num_rows($res); for($i=0; $i<$num; $i++){ $name=pg_fetch_row($res, $i, 's_name'); $pass=pg_fetch_row($res, $i, 'pass'); if($name==$PHP_AUTH_USER && $pass==$PHP_AUTH_PW){ session_start(); $_SESSION['s_name'] = $name; $url = // 指定URLへジャ~ンプ header('Location: '. $url); // HTTPヘッダを送信する }else{ header("WWW-Authenticate: Basic realm=\"WebSystem\""); header("HTTP/1.0 401 Unauthorized"); echo "<CENTER><FONT COLOR='red'>ユーザー認証が必要です。</FONT>\n"; exit; } } } db_close($con); ?>

    • 締切済み
    • PHP
  • mod_rewrite的なことをphpで実現させたいが空白ページが表示されてしまう

    www.example.com/ほげほげ にアクセスされたら、 example.com/ほげほげ へ urlをかきかえ、 さらに、 $_SERVER["REQUEST_URI"] がスラッシュで終わる(2個以上のスラッシュも考慮)ときは、これらのスラッシュをとりのぞいたurlへかきかえ、 そして、このurlへ301ステータスコードでリダイレクトさせる(ただし、get methodの場合に限る) というコードをphpで書いたのですが、 なぜか、urlは書き換わらず、空白のページが表示されてしまいます。 どこがいけないのでしょうか? お助けくださいませ。         if ($_SERVER["REQUEST_METHOD"] == "GET"){             #HTTP_HOST (exclude www.)             preg_match_all("/^(www\.)(.*)$/", $_SERVER["HTTP_HOST"],$matches_HTTP_HOST);             if ($matches_HTTP_HOST[1] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_HTTP_HOST = $matches_HTTP_HOST[2];             }             else{                 $strAfterRedirect_HTTP_HOST = $_SERVER["HTTP_HOST"]             }             #REQUEST_URI (,which includes query string)             preg_match_all("/^(\/)(.*)(\/+)$/", $_SERVER["REQUEST_URI"],$matches_REQUEST_URI);             if ($matches_REQUEST_URI[3] != ''){                 $bWillBeRedirected = true;                 $strAfterRedirect_Request_URI = $matches_REQUEST_URI[1] . $matches_REQUEST_URI[2];             }             else{                 $strAfterRedirect_Request_URI = $_SERVER["REQUEST_URI"];             }             #redirect with 301 status code if needed             if($bWillBeRedirected){                 #Protocol                 if ($_SERVER["HTTPS"] == "on"){                     $strProtocol = "https";                 }                 else{                     $strProtocol = "http";                 }                 $url = $strProtocol . "://" . $strAfterRedirect_HTTP_HOST . $strAfterRedirect_Request_URI;                                                   header("HTTP/1.1 301 Moved Permanently");                 hearder(”Location: “.$url);                 header(”Connection: close”);             }         }

    • ベストアンサー
    • PHP

専門家に質問してみよう