重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

php初心者です。
レンタルサバ―なのですが、php4.4.7からphp5.2.9に変更後うまくいかなくて困っています。
header("Location: http://○○○/top.php");がうまく飛びません。
ページを実行すると真っ白の画面になってしまいます。

以前のバージョンですと、問題なく動いていました。

下記を見てください。

どうしたらよいのでしょうか?

<?php
mysql_query('SET NAMES ujis');

require_once( "function.php" );
session_start();

if ( $_REQUEST[ "SUBMIT" ] != "" ) {
if ( ( $_POST[ "VALUE_ID" ] != "" ) && ( $_POST[ "VALUE_PW" ] != "" ) ) {

$k_id = $_POST[ "VALUE_ID" ];
$k_pw = $_POST[ "VALUE_PW" ];

$con=mysql_connect('aaa','aaa','aaa') or die("MySQL接続エラー: ".mysql_error());
mysql_select_db('aaa',$con);


$sql= "select * from あああ where id='$k_id' and pw='$k_pw'";
$result=mysql_query($sql);
$rows=mysql_num_rows($result);

if($rows==1){
while($row=mysql_fetch_array($result)){
$d_id = $row["id"];
$d_pw = $row["pw"];
}
}
}
}



if ( !isset( $_SESSION[ "D_ID" ] ) ) {
$_SESSION[ "D_ID" ] = "";
}
$_SESSION[ "D_ID" ] = $d_id;

if ( !isset( $_SESSION[ "D_PW" ] ) ) {
$_SESSION[ "D_PW" ] = "";
}
$_SESSION[ "D_PW" ] = $d_pw;


if ( !isset( $_SESSION[ "K_ID" ] ) ) {
$_SESSION[ "K_ID" ] = "";
}
$_SESSION[ "K_ID" ] = $k_id;

if ( !isset( $_SESSION[ "K_PW" ] ) ) {
$_SESSION[ "K_PW" ] = "";
}
$_SESSION[ "K_PW" ] = $k_pw;



if ( ( $_SESSION[ "D_ID" ] == "" ) || ( $_SESSION[ "D_PW" ] == "" ) ) {
print( "<br><center>○○○○○○○○<br>" );
print( "<br>○○○○○○○○○○○○○○○○<br>" );
print( "<br>○○○○○○○○<br>" );
print( "<br><a href=\"index.html\">[ BACK ]</a></center>" );
exit();
}elseif( CheckID_PW( $_SESSION[ "K_ID" ], $_SESSION[ "K_PW" ],
$_SESSION[ "D_ID" ], $_SESSION[ "D_PW" ] ) == false ) {
print( "<br><center>○○○○○○○○<br>" );
print( "<br><center>○○○○○○○○○○○○○○○○<br>" );
print( "<br><center>○○○○○○○○" );
print( "<br><br><a href=\"index.html\">[ BACK ]</a></center></body>" );

} else {header("Location: http://○○○/top.php");}
?>

A 回答 (6件)

} else {header("Location: http://○○○/top.php");}



header()関数をごっぞり削除つまり

} else {}

みたいにして、ブラウザでアクセスして、ブラウザの「ソースコード表示」機能でソースをみてみましょう。

ここでいかなる文字といえども出力されていてはいけないわけです。スペース文字1個すら。

私の経験では、スペースだったり改行だったりエラーメッセージだったり(mysql関係とかsession関係とか)

余分な文字がわかったら、それを吐きだしているところはどこなのか、header()関数以前の行をチェックします。

余分な文字がエラーメッセージなら当たりが付けやすい。
もしスペースだったなら、ちと面倒。
例えば、<?phpと書く前にスペースやHTMLのタグなど書いてないか、
echo ""; のつもりが echo " ";になっていないか
includeやrequireしてる別ファイルで<?php で囲んだ範囲以外で何か書いていないか
全部チェック。
全部自分でやるもよし人に見てもらうもよし。岡目八目といいますからそのほうがぱっと見つかるかも。
    • good
    • 0
この回答へのお礼

どうしてもだめなので、下記で対応しました。

} else {
?>
<a href="http://○○○/top.php"> トップページへ </a>

<?php } ?>

ありがとうございました。

お礼日時:2012/06/28 20:45

とりあえずはphpinfo()で、error_reportingとdisplay_errorsの値がどうなっているか調べてください。

「真っ白な画面になる」ということなので何らかのエラーが発生していると思われますが、エラーが表示されない環境では調べようがありません。

#「Notice: Undefined index:」はたくさん出そうなソースですが(汗

提示されたソースの先頭がmysql_queryだったりと「これだけで動いているわけじゃないだろう」と思われますしね。
    • good
    • 0
この回答へのお礼

確認してみたのですが、

レンタルサバ―なので、php.iniがいじれません。

ありがとうございました。

お礼日時:2012/06/28 20:49

>実行すると画面が真っ白になってしまい、URLを直接入力すれば目的のページ入ることができます。


まさかと思うけどエラーを表示するように設定すらしてないのか?

>「==」以外ですと、『等しい』をあらわすものは?
公式リファレンス読めよ。
それと文字列比較の専用関数も知らないの?
それと文字列に関する「==」による危険性はネットで検索すれば情報はいくらでも出てくる。
    • good
    • 0
この回答へのお礼

>まさかと思うけどエラーを表示するように設定すらしてないのか?
すいません初心者なので、、、
で、結局どうなのでしょう?質問を回答するまでがめんどくさい方ですね。

>公式リファレンス読めよ。
>それと文字列比較の専用関数も知らないの?
>それと文字列に関する「==」による危険性はネットで検索すれば情報はいく>らでも出てくる。

もう少し勉強しますが、これだけ書くならシンプルに回答してもらいたいものです。

お礼日時:2012/06/27 22:07

まず、



header("Location: http://○○○/top.php");

だけで、飛ぶかどうかをチェックするところからはじめてください

headerはそれより前になにかデータが出力されると
エラーになるので、もしかしたらその辺の問題かも・・・

この回答への補足

ご回答ありがとうございます。

早速チェックしてみました。

header("Location: http://○○○/top.php");

だけで、実行する場合は正常に飛びます。

補足日時:2012/06/27 19:16
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2012/06/28 20:43

<?php


error_reporting(E_ALL);

↑加える
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

error_reporting(E_ALL);

を加えてみたのですが、やっぱり実行すると真っ白画面がでてしまいました。

またよろしくお願いします。

お礼日時:2012/06/27 19:14

まずどう動かない?



それとソース見ていて気になったこととして
文字列比較で「==」は使うな。
ソースを見る限りパスワードらしき値をそのままDBに格納しているのかPOSTパラメータで受けた値で直接比較しているけどこれもあり得ない。
DBに格納するのはハッシュ値を利用しておくのが定番。で、ハッシュ値同士を比較する。

この回答への補足

回答ありがとうございます。

>まずどう動かない?
実行すると画面が真っ白になってしまい、URLを直接入力すれば目的のページ入ることができます。

>文字列比較で「==」は使うな。
「==」以外ですと、『等しい』をあらわすものは?

>ハッシュ値同士を比較する。
そうなのですか。
これは勉強します。

補足日時:2012/06/27 19:12
    • good
    • 0

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