私はまだ学習の初期段階にあり、頭を壁にぶつけて手がかりを探しています。無駄にマニュアルを読んでいました。
phpAcadamyチュートリアルの「登録とログイン」に基づいてユーザーログインシステムを構築しています。チュートリアルでは mysql_connect を使用していますが、私は mysql への PDO 接続を使用しています。
1) 関数 user_id_from_username はuser_id
、投稿された $username のエントリを返す必要があります。私はそうではありません。単にエントリを返す方法について混乱しています。少しのガイダンスと説明が必要です。
2) ログイン機能は機能しますが、セッションを設定できるように、TRUE の場合は $user_id を返す必要があります。
ここに私のコードがあります:
<?php
function user_id_from_username(PDO $db, $username) {
$stmt = $db->prepare('SELECT `user_id` FROM `users` WHERE `username` = 1');
$stmt->bindParam(1, $username);
$stmt->execute();
return ($stmt->fetchColumn());
} //??? I NEED THIS FUNCTION TO RETURN THE `user_id` ENTRY FOR $username
function login(PDO $db, $username, $password) {
$user_id = user_id_from_username($db, $username);
$password = md5($password);
$stmt = $db->prepare('SELECT COUNT(`user_id`) FROM `users` WHERE `username` = ? AND `password` = ?');
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $password);
$stmt->execute();
return (bool) $stmt->fetchColumn();
} //??? I NEED THIS FUNCTION TO RETURN $user_id IF TRUE (to set session)
//---------------------login.php-----------------------
if (empty($_POST) === false) {
$username = $_POST['username'];
$password = $_POST['password'];
if (empty($username) === true || empty($password) === true) {
$errors[] = 'You need to enter a username and password.';
} else if (user_exists($db, $username) === false) {
$errors[] = 'We can\'t find that username. Have you registered?';
} else if (user_active($db, $username) === false) {
$errors[] = 'You haven\'t activated your account!';
} else {
$login = login($db, $username, $password);
if ($login === false) {
$errors[] = 'That username/password combination is incorrect.';
} else {
die($login);
}
}
print_r($errors);
}
したがって、このログイン スクリプトによると、ログインに成功した後 (適切なユーザー名とパスワード、および有効なアカウント)、$user_id 整数: "die($login)" が出力されます。
(他の 2 つの関数、user_exists と user_active は含めませんでした。これらは適切に機能しているためです)
この次のステップを除いて、エラー配列を正しく出力し、正常にログインします。
助けてくれてありがとう!