こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

php sqlでログイン認証システムについてです。

このようなソースを書いてログインシステムを書いています。
ここで接続はできたのですが、クエリーが失敗しましたと出てきます。
このソースをどのように修正すればよいのかアドバイスお願いできないでしょうか。よろしくお願いします。


<?php
session_start();

$link = mysql_connect('localhost', 'root', 'root');
if (!$link) {
die('接続失敗です。'.mysql_error());
}
$db_selected = mysql_select_db('mydb', $link);
if (!$db_selected){
die('データベース選択失敗です。'.mysql_error());
}
mysql_set_charset('utf8');

// エラーメッセージの初期化
$errorMessage = "";

// ログインボタンが押された場合
if (isset($_POST["login"])) {
// 1.ユーザIDの入力チェック
if (empty($_POST["userid"])) {
$errorMessage = "ユーザIDが未入力です。";
} else if (empty($_POST["password"])) {
$errorMessage = "パスワードが未入力です。";
}

// 2.ユーザIDとパスワードが入力されていたら認証する
if (!empty($_POST["userid"]) && !empty($_POST["password"])) {
// mysqlへの接続
$mysqli = new mysqli($db['localhost'], $db['root'], $db['root']);
if ($mysqli->connect_errno) {
print('<p>データベースへの接続に失敗しました。</p>' . $mysqli->connect_error);
exit();
}

// データベースの選択
$mysqli->select_db($db['mydb']);

// 入力値のサニタイズ
$userid = $mysqli->real_escape_string($_POST["userid"]);

// クエリの実行
$query = "SELECT * FROM db_user WHERE name = '" . $userid . "'";
$result = $mysqli->query($query);
if (!$result) {
print('クエリーが失敗しました。' . $mysqli->error);
$mysqli->close();
exit();
}

while ($row = $result->fetch_assoc()) {
// パスワード(暗号化済み)の取り出し
$db_hashed_pwd = $row['password'];
}

// データベースの切断
$mysqli->close();

// 3.画面から入力されたパスワードとデータベースから取得したパスワードのハッシュを比較します。
//if ($_POST["password"] == $pw) {
if (password_verify($_POST["password"], $db_hashed_pwd)) {
// 4.認証成功なら、セッションIDを新規に発行する
session_regenerate_id(true);
$_SESSION["USERID"] = $_POST["userid"];
header("Location: main.php");
exit;
}
else {
// 認証失敗
$errorMessage = "ユーザIDあるいはパスワードに誤りがあります。";
}
} else {
// 未入力なら何もしない
}
}

?>

投稿日時 - 2015-08-21 11:32:37

QNo.9033982

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>クエリーが失敗しましたと出てきます。

その文字列に続いて出力している $mysqli->error の内容はどうなっていますか?

>ソースをどのように修正すればよいのか

こちらでは配列$dbの内容もMySQLデータベースの設計もわかりませんので間違っているのがphpスクリプトなのかMySQLのデータなのか特定出来ません。db_userというテーブルがあるのかnameという文字列型の列があるのかすらわかりません。エラーメッセージ($mysqli->error)から推測するしかありませんので、その内容を転記してください。


(蛇足)
ソースの最初の方のネイティブなMySQL関数の記述は無駄ですよね。削除してください。

投稿日時 - 2015-08-21 18:09:03

ANo.1

「クエリーが失敗しました」の出力のところで、エラーメッセージを一緒に書き出すようプログラムされていますが、エラーメッセージには何て書いてありますか?
また、サーバ側のログにエラーメッセージは出ていませんか?

投稿日時 - 2015-08-21 15:15:42

あなたにオススメの質問