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

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

ただいまの
回答率

90.76%

  • PHP

    19247questions

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

  • JavaScript

    15354questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Android

    6252questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • HTML5

    3742questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • jQuery Mobile

    24questions

    jQuery Mobileとはスマートフォンとタブレット用に最適化されたフレームワークです。様々な携帯端末にjQueryで作られたユーザーインターフェイスシステムを提供します。

PHPのheader("Location:の挙動について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 620

engine3

score 7

前提・実現したいこと

PHPとJavascriptでWebシステムを作っています。
ログイン画面でHTMLのformを用いPOSTし、その値を別のPHPファイルで受け取りログイン判定可否をし、PHPのheader("Location: ・・・);でURLを書き換え、画面遷移させたいです。

発生している問題・エラーメッセージ

スマートフォンでも動作させる必要があるので、動かしてみたところ、Androidのみ10回に1回の割合でURLが書き換わらず、最初からやり直すはめになってしまいます。何度もパソコンやスマートフォンで動かしていますが、Androidのみ(タブレットと携帯型スマホで動作確認しました)この様な動作をしてしまいます。

該当のソースコード

PHP
login.php
<?php
$msg="";
session_start();
$loginId=$_SESSION['id'];
$loginPwd= $_SESSION['pwd'];
$cheak="";
$msg = $_SESSION['msg'];
?>
<body>
<div data-role="page" id="login">
<form method="POST" action="signin.php">
<h3 id="header">ログイン</h3>
<h3 id="errorHeader">
<?php
//空("")でなければ実行
if(!empty($msg)){
echo $msg;
}
?>
</h3>
<table>
<tr>
<td>ID</td>
</tr>
<tr>
<td>
<input type="text" name="loginId" class="loginInput" value="<?php echo $loginId;?>">
</td>
</tr>
<tr>
<td>PWD</td>
</tr>
<tr>
<td>
<input type="password" name="loginPwd" class="loginInput" value="<?php echo $loginPwd;?>">
</td>
</tr>
<?php
session_destroy();
?>
<tr>
<td>
<input type="submit" name="submitLogin" class="loginInput" value="ログイン"class="btn" onClick="submit()">
</td>
</tr>
</table>
</form>
</div>
</body>

post先↓
sigin.php(一部抜粋)
if ($result === true) {
header("Location: Index.php#page6");
exit();
}else {
$_SESSION['id'] = $ID;
$_SESSION['pwd'] = $PWD;
$_SESSION['msg'] = "IDもしくはパスワードに誤りがあります";
header("Location: login.php");
exit();
}

試したこと

パスを変えて動作させても結果は同じでした。

補足情報(言語/FW/ツール等のバージョンなど)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

情報が少ないので想像で書きますね。

可能性1.
http haederは出力の最初に書かないと駄目なのに、10回に1回何かしらのエラーメッセージをheaderの前に出力している。

可能性2
リダイレクト関係なくAndroidのネットワークで10回に1回エラーが発生している、DNSで名前解決できませんでした的な。

あと、例示だからだとは思いますが、header(location: はhttp://(https://)から書くのが標準化された形です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/28 23:13

    ご回答ありがとうございます。
    一つ質問があるのですが、header(location: はhttp://~~(https://)の後ろはフルパスでしょうか?
    また、このエラーが発生している時のURLを見ると、POST先のURL、つまりsigin.phpになっております。すみません、言い漏れていましたが、画面遷移はできています。
    画面遷移はできていても、URLがsigin.phpのままなので画面遷移先時のJavascriptのFunctionを呼び出しても、未定義です。とエラーが出ます。

    キャンセル

  • 2017/09/29 00:17

    RFCっていう「インターネットの標準化はこうだ!」みたいな意図の文章群が世の中にはあるのですが、その中のひとつにHTTPでの転送はこうやろうぜみたいなものもあります。
    http://www.rfc-editor.org/rfc/rfc2616.txt
    その中にlocationを使うなら絶対パスで書けよっていうのがあります。

    その章の引用
    14.30 Location

    The Location response-header field is used to redirect the recipient
    to a location other than the Request-URI for completion of the
    request or identification of a new resource. For 201 (Created)
    responses, the Location is that of the new resource which was created
    by the request. For 3xx responses, the location SHOULD indicate the
    server's preferred URI for automatic redirection to the resource. The
    field value consists of a single absolute URI.

    Location = "Location" ":" absoluteURI

    An example is:

    Location: http://www.w3.org/pub/WWW/People.html

    Note: The Content-Location header field (section 14.14) differs
    from Location in that the Content-Location identifies the original
    location of the entity enclosed in the request. It is therefore
    possible for a response to contain header fields for both Location
    and Content-Location. Also see section 13.10 for cache
    requirements of some methods.
    引用終わり

    だから、基本的には絶対パスで書いたほうが良いです。世の中のブラウザとかは標準とされている仕様よりも柔軟に対応してくれることが多いので、相対パスでも対応してくれるものも多いですが、ルール違反はしないほうが無難です。

    まあ、10回中9回動いているので、今回のAndroidの現象とは無関係でしょうが

    キャンセル

  • 2017/09/29 19:42

    詳しい解説ありがとうございます。

    絶対パスに変更しました。
    ですが、変わらず同じ挙動をします。
    他にURLを書き換える方法などあれば是非教えてほしいです。
    よろしくお願いします。

    キャンセル

0

本番環境に移して実行してみたところ、あっさりなくなりました。
oskbtさんありがとうございます!あなたの未来に幸あれ!!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 受付中

    PHPのセッションを利用したフォームについて

    PHPの入力フォームからセッションを利用してエラーチェックがない場合 次の確認画面にページ遷移させたいと思っています。 POSTでやった場合は、エラーチェック後確認画面へページ推

  • 解決済

    php ログインについて

    お世話になります。 現在phpでログイン画面を作っているのですがうまくいかず困っています。 ********** <?php require_once 'h.php'; # 

  • 解決済

    [PHP]お問い合わせフォームの未入力チェック

    お問い合わせフォームで未入力項目があるまま確認(送信)ボタンを押した場合に、 1.未入力かどうかのチェックをする 2.未入力があった場合、入力フォームのページへリダイレクト

  • 解決済

    【PHP】リダイレクト時のメッセージと文字判定

    form.php→check.php→send.phpの3つのファイルを使ったお問い合わせフォームで、 未入力の場合の(check→formへ)リダイレクトは成功したのですが、 1

  • 解決済

    二つのサイトに重複するデータを同時に登録したい

    お世話になっております。 題名の通り、サイトAで会員の登録をした際、サイトBにも共通項を登録したいです。 CURLのセッションを引き継ぐ方法を参考にして ・サイトAで必要事項を

  • 解決済

    PHPとMySQLについて

    ](fadebad2fd9a28a1fd4d1ebd714c7f9b.png) 今、PHPとMySQLを使った認証システムを作成しているのですが、ここで質問があります。

  • 解決済

    簡単なログイン機能[初心者]

    前提・実現したいこと PHPで簡易ログイン機能を作りたいです。 login.htmlでidとpassを入力して、ボタンを押したら session1.phpに情報を送信して処理

  • 解決済

    【PHP】ログイン機能の実装

    PHP初心者です。 PHPの勉強がてら、会員制のページを作成してます。 新規会員登録機能は実装できていますが、 ログイン機能の実装がうまくいきません。 やりたいことを実

同じタグがついた質問を見る

  • PHP

    19247questions

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

  • JavaScript

    15354questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Android

    6252questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • HTML5

    3742questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • jQuery Mobile

    24questions

    jQuery Mobileとはスマートフォンとタブレット用に最適化されたフレームワークです。様々な携帯端末にjQueryで作られたユーザーインターフェイスシステムを提供します。