• 締切済み

php5.2.9に変更後に不具合について

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");} ?>

みんなの回答

回答No.6

} else {header("Location: http://○○○/top.php");} header()関数をごっぞり削除つまり } else {} みたいにして、ブラウザでアクセスして、ブラウザの「ソースコード表示」機能でソースをみてみましょう。 ここでいかなる文字といえども出力されていてはいけないわけです。スペース文字1個すら。 私の経験では、スペースだったり改行だったりエラーメッセージだったり(mysql関係とかsession関係とか) 余分な文字がわかったら、それを吐きだしているところはどこなのか、header()関数以前の行をチェックします。 余分な文字がエラーメッセージなら当たりが付けやすい。 もしスペースだったなら、ちと面倒。 例えば、<?phpと書く前にスペースやHTMLのタグなど書いてないか、 echo ""; のつもりが echo " ";になっていないか includeやrequireしてる別ファイルで<?php で囲んだ範囲以外で何か書いていないか 全部チェック。 全部自分でやるもよし人に見てもらうもよし。岡目八目といいますからそのほうがぱっと見つかるかも。

inpctrch
質問者

お礼

どうしてもだめなので、下記で対応しました。 } else { ?> <a href="http://○○○/top.php"> トップページへ </a> <?php } ?> ありがとうございました。

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.5

とりあえずはphpinfo()で、error_reportingとdisplay_errorsの値がどうなっているか調べてください。「真っ白な画面になる」ということなので何らかのエラーが発生していると思われますが、エラーが表示されない環境では調べようがありません。 #「Notice: Undefined index:」はたくさん出そうなソースですが(汗 提示されたソースの先頭がmysql_queryだったりと「これだけで動いているわけじゃないだろう」と思われますしね。

inpctrch
質問者

お礼

確認してみたのですが、 レンタルサバ―なので、php.iniがいじれません。 ありがとうございました。

回答No.4

>実行すると画面が真っ白になってしまい、URLを直接入力すれば目的のページ入ることができます。 まさかと思うけどエラーを表示するように設定すらしてないのか? >「==」以外ですと、『等しい』をあらわすものは? 公式リファレンス読めよ。 それと文字列比較の専用関数も知らないの? それと文字列に関する「==」による危険性はネットで検索すれば情報はいくらでも出てくる。

inpctrch
質問者

お礼

>まさかと思うけどエラーを表示するように設定すらしてないのか? すいません初心者なので、、、 で、結局どうなのでしょう?質問を回答するまでがめんどくさい方ですね。 >公式リファレンス読めよ。 >それと文字列比較の専用関数も知らないの? >それと文字列に関する「==」による危険性はネットで検索すれば情報はいく>らでも出てくる。 もう少し勉強しますが、これだけ書くならシンプルに回答してもらいたいものです。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

まず、 header("Location: http://○○○/top.php"); だけで、飛ぶかどうかをチェックするところからはじめてください headerはそれより前になにかデータが出力されると エラーになるので、もしかしたらその辺の問題かも・・・

inpctrch
質問者

お礼

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

inpctrch
質問者

補足

ご回答ありがとうございます。 早速チェックしてみました。 header("Location: http://○○○/top.php"); だけで、実行する場合は正常に飛びます。

回答No.2

<?php error_reporting(E_ALL); ↑加える

inpctrch
質問者

お礼

ご回答ありがとうございます。 error_reporting(E_ALL); を加えてみたのですが、やっぱり実行すると真っ白画面がでてしまいました。 またよろしくお願いします。

回答No.1

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

inpctrch
質問者

補足

回答ありがとうございます。 >まずどう動かない? 実行すると画面が真っ白になってしまい、URLを直接入力すれば目的のページ入ることができます。 >文字列比較で「==」は使うな。 「==」以外ですと、『等しい』をあらわすものは? >ハッシュ値同士を比較する。 そうなのですか。 これは勉強します。

関連するQ&A