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

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

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

Server+は、IT業界団体CompTIAが認定しているサーバー業務に関する資格です。サーバーのHW/SW構築・メンテナンス・仮想化など、サーバー運営上の運用・管理において幅広く対応できるスキルを評価します。

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

3回答

909閲覧

php header('Location:URL'); ページに飛ばず画面が真っ白になってしまいます。

t_takahashi0302

総合スコア7

Server+

Server+は、IT業界団体CompTIAが認定しているサーバー業務に関する資格です。サーバーのHW/SW構築・メンテナンス・仮想化など、サーバー運営上の運用・管理において幅広く対応できるスキルを評価します。

PHP

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

1グッド

0クリップ

投稿2019/12/30 06:40

前提・実現したいこと

phpでログイン機能を作成しています。
ローカル上では問題なく作動していたのですが、サーバーにアップしたところ
指定したリンク先に飛ばず画面が真っ白になってしまいます。

該当のソースコード

<!doctype html> <html> <head> <title>無題ドキュメント</title> <meta charset="UTF-8"> </head> <body> <?php try { $staff_code=$_POST['code']; $staff_pass=$_POST['pass']; $staff_code = htmlspecialchars($staff_code); $staff_pass = htmlspecialchars($staff_pass); $staff_pass = md5($staff_pass); require('../database.php'); $dbh = new PDO($dsn,$user,$password); $dbh->query('SET NAMES utf8n'); $sql = 'SELECT name FROM staff WHERE code=? AND password=?'; $stmt = $dbh->prepare($sql); $data[] = $staff_code; $data[] = $staff_pass; $stmt->execute($data); $dbh = null; $rec = $stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { print 'スタッフコードかパスワードが間違っています。<br/>'; print '<a href="staff_login.php">戻る<a/>'; } else { session_start(); $_SESSION['login']=1; $_SESSION['staff_code']=$staff_code; $_SESSION['staff_name']=$rec['name']; header('Location:staff_top.php'); exit(); } } catch(Exception $e) { print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit; } ?> </body> </html>

試したこと

heder内をリンク先のURLに変更しても、utf-8のbomの有無も確認しましたが問題解決に至りませんでした。
よろしく御願い致します。

DrqYuto👍を押しています

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

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

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

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

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

madone99

2019/12/30 07:34

エラーログに何か出ていませんか?
m.ts10806

2019/12/30 08:01

Server+ はどう関係するのでしょうか。 あと「heder」というものはないですよ。
guest

回答3

0

リダイレクトを本当にやるなら、
コード冒頭の

php

1<!doctype html> 2<html> 3<head> 4<title>無題ドキュメント</title> 5 <meta charset="UTF-8"> 6</head> 7<body> 8 <?php

を出力したあとでは遅いです。
HTMLコードを1文字も出力しないまま耐えて、
リダイレクトしないと確定したなら出力するよう、
処理を見直ししてください。

投稿2019/12/30 09:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

単にローカルとサーバーでエラー出力の設定が違うんでしょう。
そもそもローカルでもエラーが何も出ないとは思えません。

PHPマニュアル:header()

覚えておいて頂きたいのは、header() 関数は、** 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要がある**ことです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

PHPタグ以外は全て「出力」として扱われるので、「出力の前にコールする必要がある」というルールに触れます。
サンプルコードにも書かれています。

php

1<html> 2<?php 3/* これはエラーとなります。この上に出力があることに注目してください。 4 * それはheader()のコールより前であるということになります */ 5header('Location: http://www.example.com/'); 6exit; 7?>

じゃあ、どうすればいいか?
というと、ロジック部分はhtml出力に含めないことです。

php

1// includeとか 2// このファイルで使う変数の初期化とか 3// なんやかんや処理 4// リダイレクトもする 5// try-catchで捕捉されるExceptionは「異常」なんだからそこまでしっかりhtml組まなくても良いのでは。 6 7 8// HTMLの出力 9// 出力に使う変数だけechoするとかでっかいヒアドキュメントにしてしまうとか見やすい工夫を。

簡易例

php

1<?php 2$color_code = 1; 3$color = ""; 4if($color_code === 1){ 5 $color = "red"; 6}else{ 7 $color = "blue"; 8} 9 10echo <<<EOF 11<!doctype html> 12<html> 13<head> 14<title>無題ドキュメント</title> 15 <meta charset="UTF-8"> 16</head> 17<body> 18<span style="color:{$color};">test</span> 19</body> 20</html> 21EOF; 22

投稿2019/12/30 09:22

編集2019/12/30 09:24
m.ts10806

総合スコア80765

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

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

0

冒頭のhtml削除後、php.iniのoutput_bufferingをonにしましたら無事動くようになりました。
ありがとうございます。

投稿2019/12/30 22:49

t_takahashi0302

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問