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 {
// 未入力なら何もしない
}
}
?>
お礼
ご回答ありがとうございます。 >「手で打ち直す」のが原則だと思います。 そうですよね。 本件、やはりそうするしかないのでしょうか...