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

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

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

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

jQuery Mobile

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

Android

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

PHP

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

JavaScript

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

Q&A

解決済

2回答

668閲覧

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

engine3

総合スコア13

HTML5

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

jQuery Mobile

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

Android

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

PHP

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

JavaScript

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

0グッド

3クリップ

投稿2017/09/28 10:41

編集2017/09/30 11:00

###前提・実現したいこと
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/ツール等のバージョンなど)

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

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

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

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

投稿2017/09/28 13:04

oskbt

総合スコア1895

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

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

engine3

2017/09/28 14:13

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

2017/09/28 15: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の現象とは無関係でしょうが
engine3

2017/09/29 10:42

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

0

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

投稿2017/10/04 14:08

engine3

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問