Привет, ребята, я новичок в создании сайта с php и mysqli. Я изучаю некоторые видеоуроки, основанные на mysqli. Я узнал, что использование подготовленных операторов более безопасно, и я пытаюсь создать систему входа в систему. Вот что я сделал до сих пор.
Этот код помогает мне полностью войти в систему.
<form action ="" method="post"> User Name:<br/> <input type='text' name='username' /> <br/><br/> Password:<br/> <input type='password' name='password' /> <br/><br/> <input type='submit' name='submit' value='login'> </form> <?php if(isset($_POST['submit'])){ $username = $_POST['username']; $password = md5($_POST['password']); $stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=? LIMIT 1"); $stmt->bind_param('ss', $username, $password); $stmt->execute(); $stmt->bind_result($username, $password); $stmt->store_result(); if($stmt->num_rows == 1) //To check if the row exists { while($stmt->fetch()) //fetching the contents of the row {$_SESSION['Logged'] = 1; $_SESSION['username'] = $username; echo 'Success!'; exit(); } } else { echo "INVALID USERNAME/PASSWORD Combination!"; } $stmt->close(); } else { } $con->close(); ?>
Но мне также нужно проверить, не был ли пользователь активирован или был заблокирован или отключен. Поэтому я сделал еще один код.
И вот код, который я сделал
<?php if(isset($_POST['submit'])){ $username = $_POST['username']; $password = md5($_POST['password']); $stmt = $con->prepare("SELECT username, password FROM users WHERE username=? AND password=? LIMIT 1"); $stmt->bind_param('ss', $username, $password); $stmt->execute(); $stmt->bind_result($username, $password); $stmt->store_result(); if($stmt->num_rows == 1) //To check if the row exists { $result=$con->query($stmt); $row=$result->fetch_array(MYSQLI_ASSOC); $user_id= $row['user_id']; $status = $row['status']; if($status=='d'){ echo "YOUR account has been DEACTIVATED."; }else{ $_SESSION['Logged'] = 1; $_SESSION['user_id'] = $user_id; $_SESSION['username'] = $username; echo 'Success!'; exit(); } } else { echo "INVALID USERNAME/PASSWORD Combination!"; } $stmt->free_result(); $stmt->close(); } else { } $con->close(); ?>
Когда я использую это, я получаю следующие ошибки:
Предупреждение: mysqli :: query () ожидает, что параметр 1 является строкой, объект указан в F: \ XAMPP \ htdocs \ login \ login.php в строке 33
Неустранимая ошибка: вызов функции-члена fetch_array () для не-объекта в F: \ XAMPP \ htdocs \ login \ login.php в строке 34
У меня есть столбцы таблицы базы данных
user_id, имя пользователя, пароль (md5), user_level, статус.
В user_level у меня есть следующее
a = admin m = member
В статусе
a = activated n = not activated d = deactivated b = banned
При входе в систему мне нужно проверить, является ли статус пользователя, и если он активирован, он должен перейти на индексную страницу, или если он должен показать, что пользователь был деактивирован, а также для других.
Может ли кто-нибудь помочь мне сделать это в подготовленных заявлениях.
И у меня это connect.php на всех страницах
?php //error_reporting(0); 'session_start'; $con = new mysqli('localhost', 'username', 'password', 'database'); if($con->connect_errno > 0){ die('Sorry, We\'re experiencing some connection problems.'); } ?>
Спасибо.
Я думаю, вам нужно взглянуть на то, как работает mysqli_. Это должно помочь вам в правильном направлении.
if(isset($_POST['submit'])){ $username = $_POST['username']; $password = md5($_POST['password']); $user_id = 0; $status = "" $stmt = $con->prepare("SELECT user_id, username, password, status FROM users WHERE username=? AND password=? LIMIT 1"); $stmt->bind_param('ss', $username, $password); $stmt->execute(); $stmt->bind_result($user_id, $username, $password, $status); $stmt->store_result(); if($stmt->num_rows == 1) //To check if the row exists { if($stmt->fetch()) //fetching the contents of the row { if ($status == 'd') { echo "YOUR account has been DEACTIVATED."; exit(); } else { $_SESSION['Logged'] = 1; $_SESSION['user_id'] = $user_id; $_SESSION['username'] = $username; echo 'Success!'; exit(); } } } else { echo "INVALID USERNAME/PASSWORD Combination!"; } $stmt->close(); } else { } $con->close();