ここから本文です

PHPとMySQLでログイン認証でヘッダーを使っているのですがエラーが出てしまいます。

このエントリーをはてなブックマークに追加

質問者

gsrbrkさん

2008/4/212:47:01

PHPとMySQLでログイン認証でヘッダーを使っているのですがエラーが出てしまいます。

現在ログイン認証→ログイン成功後headerを使って次のページにジャンプ。もしくはログイン失敗後headerを使ってログインページに戻るというプログラムを作っています。
プログラムは以下です。また私はまだ初心者ですのでセキュリティーの面で問題のあるプログラムである(かもしれない)ことをご了承ください。

//ログイン認証ページは省略します。

<?PHP

$user = addslashes($_POST['username']);
$pass = md5($_POST['password']);


$dbHost = "localhost";
$dbUser = "root";
$dbPass = "182054";
$dbDatabase = "mysql";


$db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database.");

mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database.");

$result=mysql_query("select * from users where username='$user' AND password='$pass'", $db);

$rowCheck = mysql_num_rows($result);
if($rowCheck > 0){
while($row = mysql_fetch_array($result)){

session_start();
session_register('username');

echo 'Login Succeeded!';
header("Location : upload.php");


}

}
else {

echo 'Incorrect login name or password. Please try again.';
header( "Location: loginPage.php" );
}


?>

ここで実行するとログイン認証はちゃんと成功したのですが、
header("Location : upload.php");部分で、
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\loginEx.php:26) in C:\xampp\htdocs\loginEx.php on line 27
というエラーが出ます。
headerの場合、プログラムの一番先頭に持ってこないとエラーがでやすいということは知っていましたが、このプログラムでheaderの部分だけ一番上に持ってくるとログイン失敗してもログイン成功後ページに行ってしまいますし
たとえばheaderの部分を[include---]に変えれば出来るのだろうと思いますが、個人的にheaderを使うもしくはなにかリンクを貼り付ける方法でやりたいと思っています。ただリンクを貼り付けるのであれば、ログイン成功するときだけ現れるリンク、失敗した際に現れるリンクのつくりかたがわかりません。

わかりにくい文章になってしまって申し訳ございません。上記の用にするためにはどおすればいいのかわかるかたがいらっしゃいましたらよろしくお願いします。

補足ちなみに$dbPass = "182054"; は適当なパスワードを打ってます。//でコメントするか「*****」とするべきでした。申し訳ございません。

閲覧数:
2,614
回答数:
1
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

グレード

カテゴリマスター

dozidenoromaさん

2008/4/212:58:43

echo 'Login Succeeded!';
header("Location : upload.php");

echo 'Incorrect login name or password. Please try again.';
header( "Location: loginPage.php" );

ヘッダーの前に出力をしてしまってはいけません。
http://php.mirror.camelnetwork.com/manual/ja/function.header.php
ここをよく読みましょう
>>
header() 関数は、 ~中略~、すべての実際の 出力の前にコールする必要があることです。
<<



また、
$db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database.");
等のような部分は PHPだと動いてしまいますが
$db = mysql_connect($dbHost, $dbUser, $dbPass ) or die ("Error connecting to database.");
こういう風に書きます
なぜ "" で囲むのか。 ""と '' の違い を理解していないとこういう記述をしてしまいがちです
一つ一つ意味を理解して先に進んでください。

$result=mysql_query("select * from users where username='$user' AND password='$pass'", $db);
こういう部分も
$result=mysql_query("select * from users where username='".$user."' AND password='".$pass."'", $db);
こう記述したほうが良いです。



あと、もひとつ
今は勉強のため良いとして、実際にこのような パスワード認証をしていたらかなりヤバいですよ
セキュリティ的に甘いつくりをしている状態だと、パスワード等が漏洩しますよ。

質問した人からのコメント

2008/4/3 02:58:41

降参 ありがとうございました。いろいろその後調べてみて解決しました。
そして調べていくうちに、dozidenoromaさんのご指摘どおりセキュリティてきにかなりまずいということが解りました。これからその解決法を学んで生きたいと思います。
本当にありがとうございました

  • このエントリーをはてなブックマークに追加
簡単にみんなで作るショート動画アプリ Yahoo!Chocotle for Android(無料)

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する