質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1352閲覧

phpでレスポンスコード301のリダイレクト処理をしたいのに200番が帰ってきてしまう

yamaoka

総合スコア27

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/05/26 06:57

【行っている処理】
id11(int) id22(int) moziretu(varchar)という3つのカラムを持ったテーブルがあります

id11または id22の値を入れて検索すると、その対象のカラムの入った行を取り出せるというプログラムを書いています。
id11と id22の値をそれぞれ別々に検索したときはレスポンスコード200が帰ってきます

【やりたいこと】
id11と id22を同時に検索したときレスポンスコード301を返すようにしたい

【困っていること】
301を返してほしいのに200が帰ってきてしまう

【対象のコードとレスポンス】
id11とid22用のフォームがそれぞれあり、そこから受け取ったデータを元に処理をしています。対象のコードの前にif文でそれぞれ別々に入力されたときの処理をしています

リダイレクトのために試したコードとそのコードが実行されたときのログは以下のとおりです
コード1

elseif(name=="id11" and name=="id22"){ // header('Status: 301 Moved Permanently'); header('Location: http://192.168.0.235/test.php', true, 301); exit(); } 192.168.0.57 - - [26/May/2017:15:36:55 +0900] "GET /hira_kairyou.php?id11=99&id22=88 HTTP/1.1" 200 246 "http://192.168.0.235/hira_kairyou.php?id11=6&id22=7" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

コード2

elseif(name=="id11" and name=="id22"){ header('Status: 301 Moved Permanently'); header('Location: test.php'); exit(); 192.168.0.57 - - [26/May/2017:15:33:36 +0900] "GET /hira_kairyou.php?id11=6&id22=7 HTTP/1.1" 200 246 "http://192.168.0.235/hira_kairyou.php?id11=55&id22=66" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

コード3

elseif(name=="id11" and name=="id22"){ header('Status: 301 Moved Permanently'); header('Location: http://192.168.0.235/test.php'); exit; 192.168.0.57 - - [26/May/2017:15:25:11 +0900] "GET /hira_kairyou.php?id11=77&id22=888 HTTP/1.1" 200 246 "http://192.168.0.235/hira_kairyou.php?id11=66&id22=77" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"

うまくいかない原因はこういうことが考えられる、や、こういう風に問題を切り分けて調査するとよいなど教えていただけませんでしょうか?

また、説明が足りないところがありましたらこういう説明がないとわからないというご指摘をしていただけるとありがたいです

よろしくお願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

yambejpさんの回答で尽きているのですが、デバッグの方法として、

(1)確かにheader関数が実行されていることの確認
デバッガが使えればかんたんにわかりますが、使えない場合は、header関数とexitのあいだに echo "header function done"; などのテスト用のecho文を入れて、表示されるか確認しましょう。

(2)header関数が実行されているのにリダイレクトしない場合の原因
よくある間違いとしては、header関数の実行前になんらかのHTTPレスポンスが出力されているケースです。エラーメッセージ等もふくれます。

投稿2017/05/26 07:21

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

elseif(name=="id11" and name=="id22"){

2点

  • nameは「$name」ではないのでしょうか?
  • 仮に$nameだとしても「$name=="id11" and $name=="id22"」は成り立たないでしょう

条件設定がおかしいのでは?

投稿2017/05/26 07:14

yambejp

総合スコア114583

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamaoka

2017/05/26 07:20

id11 と id22それぞれのフォームを作っているということに触れましたが、そのフォームというのが下記のようなものに成ります <form method="get" action="hira_kairyou.php"> <p> id1:<input type="text" name="id11"><br> id2:<input type="text" name="id22"><br> <input type="submit" value="検索"><br> </p> </form> ここで利用しているnameです。 nameにid11とid22が入力されたらという意味で書いたのですが・・・。条件設定再考します 回答ありがとうございました
yambejp

2017/05/26 07:31

ご提示の例では、送られてきたデータは「name」として参照されるわけじゃないですよね $_GET["id11"]と$_GET["id22"]で参照されます 入力されたらの考え方はいくつかあります。 たんに未入力で送られてくる場合の""と、仮に0を送ってくる場合、データはあるのかないのか? 判断する必要があります。もし0はデータがあるとするなら isset($_GET["id11")) and $_GET["id11"]!=="" and isset($_GET["id22")) and $_GET["id22"]!=="" で判断します。
yamaoka

2017/05/26 07:37

なるほど・・・。ちょっと勘違いしていた部分がありました。ありがとうございます
yambejp

2017/05/26 07:41 編集

挙動が怪しいときは、受け側で print_r($_GET); (もしくは$_POST)をして想定したデータが流れてきているか確認すると いいでしょう もしくはブラウザのF12開発ツールで、実際にどういったデータが 付加されているか確認するのも役に立ちます
yamaoka

2017/05/26 07:50

ブラウザでできるとは知りませんでした 試してみます。ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問