Недавно я узнал, как правильно добавлять имя пользователя и пароль в базу данных. Моя база данных – usersys, а таблица, хранящая пользовательскую информацию, называется userdb. Таблица имеет два столбца – имя пользователя (первичный), пароль.
Форма регистрации работает отлично, правильно вводит пользователя в базу данных, а также проверяет, находится ли пользовательское имя пользователя в базе данных или нет.
С учетом сказанного, я спрашиваю, может ли кто-нибудь помочь мне создать скрипт входа. Пока это то, что у меня есть:
$username = $_POST['username']; $password = $_POST['password']; $displayname = $_POST['username']; $displayname = strtolower($displayname); $displayname = ucfirst($displayname); echo "Your username: " . $displayname . "<br />"; mysql_connect("localhost", "root", "******") or die(mysql_error()); echo "Connected to MySQL<br />"; mysql_select_db("usersys") or die(mysql_error()); echo "Connected to Database <br />"; $lcusername = strtolower($username); $esclcusername = mysql_real_escape_string($lcusername); $escpassword = mysql_real_escape_string($password); $result = mysql_query("SELECT * FROM userdb WHERE username='$esclcusername' AND password='$escpassword'") or die(mysql_error()); $row = mysql_fetch_array( $result ); $validateUser = $row['username']; $validatePass = $row['password'];
Данные POST находятся на предыдущей странице входа в систему. Я хочу, чтобы этот скрипт проверял таблицу (userdb) и нашел строку имени пользователя, введенную пользователем из предыдущей формы, и убедитесь, что введенный пароль соответствует паролю имени пользователя, установленному в этой строке, в таблице userdb.
Я также хочу, чтобы какой-либо способ проверить, существует или нет, если введенное имя пользователя существует, чтобы сообщить пользователю, что введенное имя пользователя не существует, если оно не может быть найдено в таблице.
Это не прямой ответ на этот вопрос, а полезное добавление. Вы должны использовать функцию MYSQL SHA1 для шифрования пароля перед сохранением в базе данных.
$user = $_POST['userid']; $pwd = $_POST['password']; $insert_sql = "INSERT into USER(userid, password) VALUES($user, SHA1($pwd))"; $select_sql = "SELECT * FROM USER WHERE userid=$user AND password=SHA1($pwd))";
Вы можете использовать сеансы. Сессии – это глобальные переменные, которые при установке остаются с пользователем во время просмотра сайта.
Поскольку вы изучаете PHP, попробуйте этот учебник на официальном сайте.
Но то, что вы будете делать в теории, – это когда имя пользователя и пароль совпадают, вы устанавливаете переменную сеанса
$_SESSION["auth"] = true; $_SESSION["user_id"] = $row["user_id"];
Затем выполните проверку, чтобы проверить, не аутентифицирован ли пользователь.
Один из способов сделать это (ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: не обязательно лучшая практика):
$result = mysql_query("SELECT id FROM userdb WHERE username='$esclcusername' AND password='$escpassword'") or die(mysql_error()); $row = mysql_fetch_array( $result ); $id = (int)$row['id']; if($id > 0) { //log in the user session_start(); $_SESSION['userId'] = $id; $_SESSION['username'] = $displayname; }
… и на страницах, требующих проверки подлинности:
session_start(); if(!isset($_SESSION['userId'])) { die('You need to be logged in!!!'); } else { echo 'Welcome ' . $_SESSION['username']; }
Подробнее о сеансах PHP.
Мне нравится использовать как $_SESSION
и MYSQL
Checks с любым POST входа. Это должно помочь начать несколько вещей.
$username = mysql_real_escape_string($_POST[username]); $password = strip_tags($_POST[password]); $password = sha1($password); if(isset($username) && isset($password) && !empty($username) && !empty($password)) { $sql = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'"); //Check the number of users against database //with the given criteria. We're looking for 1 so //adding > 0 (greater than zero does the trick). $num_rows = mysql_num_rows($sql); if($num_rows > 0){ //Lets grab and create a variable from the DB to register //the user's session with. $gid = mysql_query("SELECT * FROM users_column WHERE username = '$username' AND password = '$password'"); $row = mysql_fetch_assoc($gid); $uid = $row[userid]; // This is where we register the session. $_SESSION[valid_user] = $uid; //Send the user to the member page. The userid is what the //session include runs against. header('Location: memberpage.php?userid='.$userid); } //If it doesn't check out -- throw an error. else { echo 'Invalid Login Information'; } }
ПРИМЕЧАНИЕ. Вам нужно будет запустить файл страницы с помощью session_start()
и создать отдельную проверку сеанса с указанием session_start()
а затем ваши прогрессии, например, if($_SESSION[valid_user] != $userid)
что-то делать.
Вы можете использовать инструкцию select для возврата из MySQL пароля для указанного имени пользователя. Если у вас есть пустой набор результатов, то у вас нет имени пользователя в таблице.
Если вам нужно, чтобы пользователь был аутентифицирован более чем на одной php-странице, то один из вариантов, который должен использовать сеансы ( http://www.php.net/manual/en/function.session-start.php ).
Кроме того, я думаю, вы должны думать о безопасности, то есть предотвращать SQL-инъекцию:
$variable = mysql_real_escape_string($_POST['variable'])
и избегать «умирать» (обрабатывать ошибки и возвращать удобные для пользователя сообщения из сценария).
Я также подумал бы о том, чтобы не хранить пароли в вашей базе данных. Один из способов хэшей с MD5 или SHA1 – это способ добавления уровня безопасности на уровне db.
См. http://php.net/md5 или http://php.net/sha1 для получения дополнительной информации.
Я согласен с идеей использования переменных SESSION при аутентификации пользователя.
Простой способ аутентификации пользователя выглядит следующим образом
//connect the mysql_db $mysql_connect() $mysql_select_db() //reading from mysql table $res="SELECT * FROM table WHERE name=$username AND password=$password"; $val=mysql_query($res); //authentication $count=mysql_num_rows($val); if($count==1) //authenticate the user else through an error