スレッド表示 | フラット表示〕 全トピック 920 件中 46 番目 次≫ ≪前

DBの情報取得について

created: 2008-07-12 15:47 | modified: 2008-07-13 01:16 | reply: 4

[4199] DBの情報取得について

user: REIRA | created: 2008-07-12 15:47
投稿者:REIRAさん

はじめまして
プログラム初心者なのですが現在PHPとMYSQLでログイン認証を製作中なのですがいくら調べても解決できないで困っています。

<?php

$db_host = "localhost";

//データベースユーザ
$db_user = "********";

//パスワード
$db_pass = "********";

//データベース名
$db_name = "********";

//データベース接続
$dbh = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db("$db_name") or exit("データベースが選択できません。");

$result = mysql_query("SELECT * FROM ********") or exit("クエリーの実行に失敗しました。");

$t_id = $_POST["id"];
$t_pass = $_POST["pass"];


while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$id = $row['id'];
$user = $row['user'];
$pass = $row['pass'];
}

if ($t_id == $user and $t_pass == $pass){
print "OK";
}else {
print "NG";
}

mysql_close($dbh);
?>


素人の発想で考え制作しているのでまったく駄目なのかもしれませんが
DBに登録している最終行のID PWなら OK と表示されますが
それ以前のデーターでログインを行うと NG になります。

すべてのデーターと照合しログインしたいのですが
教えていただけないでしょうか?
よろしくお願いします。

※いろいろ参考になるサイトなど調べていましたがなかなか見つかりません。良かったら参考サイトなども教えていただけると助かります。
reply: 4200 返信 編集 削除

[4200] データベースを使った認証処理案

user: ゆうじ | created: 2008-07-12 17:18
こんにちは。

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$id = $row['id'];
$user = $row['user'];
$pass = $row['pass'];
}

このループのところは、ひたすらレコードの獲得と初期化を
繰り返すだけなので、ループを抜けた時には
最後のレコードで初期化されることになります。
なので最終レコードのみが認証OKとなるのでしょう。


> すべてのデーターと照合しログインしたいのですが

ユーザ認証なら、1ユーザにたいして
IDとパスワードが1つでしょうから
全てのレコードを獲得することも無いと思います。

SQL文に WHERE で条件を付け加えれば
最小限のレコードが獲得できます。

該当するレコードがあれば「認証OK」
レコードが無ければ無効なIDとパスワードなので
「認証不可」って具合に判断できます。

$sql  = "select * from `authTable` where ";
$sql .= "`id` = '". mysql_escape_string($t_id). "' and ";
$sql .= "`pass` = '". mysql_escape_string($t_pass). "'";

$result = mysql_query($sql, $dbh);
if (mysql_errno()) {
echo mysql_error();
exit();
}

if (0 < mysql_num_rows()) {
// Good!
} else {
// NG
}
Parent: 4199  reply: 4201 返信 編集 削除

[4201] DBの情報全てでNGが

user: REIRA | created: 2008-07-12 18:08
ありがとうございます。

素人で本気で悩んでします。
回答の内容に書き換えたのですがDBにある情報もない情報もNGになりあます。書き方がわるいのでしょうか?

<?php

$db_host = "localhost";

//データベースユーザ
$db_user = "*******";

//パスワード
$db_pass = "*******";

//データベース名
$db_name = "*******";

//データベース接続
$dbh = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db("$db_name") or exit("データベースが選択できません。");

$result = mysql_query("SELECT * FROM aki") or exit("クエリーの実行に失敗しました。");


$t_id = $_POST["id"];
$t_pass = $_POST["pass"];

$sql = "select * from `aki` where ";
$sql .= "`id` = '". mysql_escape_string($t_id). "' and ";
$sql .= "`pass` = '". mysql_escape_string($t_pass). "'";

$result = mysql_query($sql, $dbh);
if (mysql_errno()) {
echo mysql_error();
exit();
}


if (0 < mysql_num_rows()){
$_SESSION['ID'] = $id;

print "OK";
}else {
unset($_SESSION['ID']);
print "NG";
}

print $_SESSION['ID'];

mysql_close($dbh);
?>

セッション管理も付け加えていますが

print $_SESSION['ID'];

のところで
例)ID  222  でログインすると

2 表示されません。
セッションの保持しているページも確認したのですがセッションを保持していますがID ネームがやはり 2しか表示されていません。

すいません。いろいろと
よろしくお願いいたします。
Parent: 4200  reply: 4202 返信 編集 削除

[4202] 訂正します

user: ゆうじ | created: 2008-07-12 22:59
var_dump() でデバッグプリントすると
問題個所が発見できると思います。

その前に私の間違いがありましたので訂正します。

この行はここではいりませんよね。
$result = mysql_query("SELECT * FROM aki") or exit("クエリーの実行に失敗しました。");


以下のところ間違いがありました。
mysql_num_rows に引数がありませんでした。失礼。
$_SESSION['ID'] = $id; の $id は $t_id の間違い?

if (0 < mysql_num_rows()) {
$_SESSION['ID'] = $id;
print "OK";
} else {
unset($_SESSION['ID']);
print "NG";
}

訂正
if (0 < mysql_num_rows($result)) {
$_SESSION['ID'] = $t_id;
print "OK";
} else {
unset($_SESSION['ID']);
print "NG";
}
Parent: 4201  reply: 4203 返信 編集 削除

[4203] 動作しました。

user: REIRA | created: 2008-07-13 01:16
ありがとうございます。

動作するようになりました。
PHPをはじめて日が浅いので関数なんかも知らない部分がおおいためすごく助かりました。

本当にありがとうございます。
Parent: 4202  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 46 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑