プロが教えるわが家の防犯対策術!

お世話になります。
header location がなぜが飛びません。
お分かりになる方ご教授お願いいたします。

・<?php の前にはスペースなどを入れておりません。
・エラー表示にはなりませんが、飛びません。

<?php
session_save_path("sess");
session_name("deri_user");
session_start();
require("class/User.class.php");
$end=null;


if($_POST[submit]=="送信"){
if(session_is_registered("sesdata1")){unset($_SESSION[sesdata1]);session_register("sesdata1");}
if(session_is_registered("sesdata2")){unset($_SESSION[sesdata2]);session_register("sesdata2");}

$_SESSION[sesdata1]=htmlspecialchars($_POST[user_name]);
$_SESSION[sesdata2]=htmlspecialchars($_POST[user_pass]);

$user=new User();
$usn=$user->owner_name();
$usp=$user->owner_pass();

if(trim($usn)==trim($_SESSION[sesdata1]) and trim($usp)==trim($_SESSION[sesdata2])){

header('location:./kanri_gamen.php');

exit();
}else{
$end= "<br>ユーザー名又はパスワードが正しくありません。";

}

$user->__destruct();
}
?>
<html lang="ja">
<head>
<title></title>
</head>
<body>
<center>
<h3>管理者ログイン画面</h3>
<form action="user_login.php" method="post">
<table style="border:3px ridge #333333">
<tr>
<td>名前
</td>
<td>
<input type="text" name="user_name" size="20">
</td>
</tr>

<tr>
<td>パスワード
</td>
<td>
<input type="text" name="user_pass" size="20">

</td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<input type="submit" name="submit" value="送信">
</table>
</form>
<?=$end?>
</center>
</body>
</html>

A 回答 (3件)

ちなみに、最初に



error_reporting(-1);
ini_set('display_errors', 'On');

を実行しておくと全てのエラーが表示されるようになります。ご提示のソースコードにはエラーを引き起こす要因が3種類含まれています。2つに関しては以下を読まれれば分かると思います。

PHP Manual - 配列ですべきこととしてはならないこと
http://php.net/manual/ja/language.types.array.ph …

Qiita - $_GET, $_POSTなどを受け取る際の処理
http://qiita.com/mpyw/items/2f9955db1c02eeef43ea

もう1つ問題なのは、session_is_registered関数を使用していることです。

PHP Manual - session_is_registered
http://php.net/manual/ja/function.session-is-reg …

この関数はPHP5.3の時点で非推奨です。PHP5.4以降では使用することすら出来ません。isset構文を使って調べましょう。なお、PHP5.3系のサポートももう切れていおり、認められる最も古いバージョンはPHP5.4系です。古いバージョンでは言語自体に脆弱性が発見されても修正が行われない等の問題点があります。「サポートの切れたWindowsXPを使っている」ぐらいの危機感を持ってください。
    • good
    • 1
この回答へのお礼

ありがとうございます。
大変ためになるご指導に心から感謝いたします。
早速に調べて対応していこうと思っております。
ありがとうございました。

お礼日時:2014/08/31 07:44

ソースはUTF-8ですよね?「BOM無し」と「BOM有り」の両方を扱えるテキストエディタでソースコードを閲覧して、どっちが適用されているかを確認してください。

もしくはバイナリエディタでファイイルを開き、先頭3バイトにBOMが混入していないかどうかを確かめてください。Windowsのメモ帳では「BOM有り」しか扱えませんが、PHPのソースコードは全て「BOM無し」であることが前提条件とされます。

header関数を使う場合、まだ1バイトも出力していない状態でなければなりません。BOMが含まれている場合それだけで3バイト出力していることになるので実行に失敗します。
    • good
    • 0
この回答へのお礼

ありがとうございます。
BOM無しでUTF-8で作成しております。
session_is_registered関数が、PHP5.4では削除されていることにたどり着き、その部分を書き換えましたら、lolipopサーバーでは問題なく動作しました。サクラサーバーでは、依然headerが飛ばない状況ですが、lolipopで使用しようと思います。
ご迷惑をおかけいたしました。
ご指導に感謝いたします。

お礼日時:2014/08/31 07:32

>header('location:./kanri_gamen.php');



./ という相対指定はどうなんでしょうね。

header('location: kanri_gamen.php');

ではどうなりますか?あるいはホスト名込みのURLで指定したらどうなりますか?

header('location: http://example.om/kanri_gamen.php');


>exit();

exit(); の代わりに、die('location header sent'); としたら、そのメッセージは表示されますか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
全て試したのですが、やはり、飛びません><。
die()で試しますと、location header sent は表示されます。
何故なのか・・・>< 苦戦しそうです><

お礼日時:2014/08/30 10:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!