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

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

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

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

Q&A

解決済

1回答

1238閲覧

PHPのリダイレクトしない件についてご質問です。

takeshi1907

総合スコア54

PHP

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

0グッド

0クリップ

投稿2021/12/22 09:57

PHPでログイン画面を作成しています。
MySQLの接続は成功しているのですが、header("Location: ./mypage.php");で「データベースの接続に成功しました。」は表示されるのですが、その後、どうしてもリダイレクトしてくれません。
原因がわからず質問させていただきました。

試したこととして、フルパスで書いてみましたが、やはりリダイレクトしてくれませんでした。

お力添え、よろしくお願いいたします。

<?php session_start(); $pdo = mysqli_connect('※※※※※※※※※※', '※※※※※※※', '※※※※', '※※※※※※※※※'); if (mysqli_connect_errno()) { die("データベースに接続できません:" . mysqli_connect_error() . "\n"); } else { echo "データベースの接続に成功しました。\n"; } if (isset($_SESSION["login"])) { session_regenerate_id(TRUE); // ※リダイレクトしない header("Location: ./mypage.php"); exit(); } if (count($_POST) === 0) { $message = ""; echo "ポストされていない\n"; } else { if(empty($_POST["uname"]) || empty($_POST["pass"])) { $message = "ユーザー名とパスワードを入力してください"; } else { $query = "SELECT id, name, pass FROM users;"; if ($result = mysqli_query($pdo, $query)) { foreach ($result as $row) { var_dump($row); } session_regenerate_id(TRUE); $_SESSION["login"] = $_POST['uname']; // ※リダイレクトしない header("Location: ./mypage.php"); exit; } } } $message = htmlspecialchars($message); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>ログインページ</title> <link href="login.css" rel="stylesheet" type="text/css"> </head> <body> <h1>ログインページ</h1> <div class="message"><?php echo $message;?></div> <div class="loginform"> <form action="login.php" method="post"> <ul> <li>ユーザー名:<input name="uname" type="text"></li> <li>パスワード:<input name="pass" type="password"></li> <li><input name="送信" type="submit"></li> </ul> </form> </div> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

header()

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

エラー表示ONにしたらWarningが出てると思います。
Warning: Cannot modify header information - headers already sent by ~~~

投稿2021/12/22 10:02

m.ts10806

総合スコア80850

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

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

takeshi1907

2021/12/22 10:16

どうも、ありがとうございます。 エラー表示ONにしたところ、Warning: Cannot modify header information - headers already sent by (output started at ............ というエラーが出ているようで、調べています。P HPは初心者のため、解決策がまだ見つかっていませんが、もう少しエラー内容を調べてみるようにしたいと思います。
m.ts10806

2021/12/22 10:34

太字で引用した文言のように、ブラウザへの出力(echoやvar_dump())をしなければ良いだけかと。
takeshi1907

2021/12/22 10:48

echo をコメントアウトしたらリダイレクトしました。 出力をするとリダイレクトしなくなるのですね。 大変勉強になりました。 どうも、ありがとうございました。
m.ts10806

2021/12/22 11:27

>出力をするとリダイレクトしなくなるのですね。 理解を間違っています。 header()の仕様の問題です。 リダイレクトのためだけのものではありませんし。 他にも出力が影響する機能は少なからずあるので、やはりPHPマニュアルでの機能確認は必須です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問