Я решил перейти к mysqli, поскольку я все время пылаю, когда люди указывают мой код mysql 🙂
Может ли кто-то проверить, что ниже правильно, все работает, но я просто хочу убедиться, что я не делаю что-то глупое или представляю угрозу безопасности, прежде чем переходить на остальные сайты. Это php для проверки имени пользователя и пароля при входе в систему.
<?php //Start session session_start(); //Include database connection details require_once('db_connect.php'); //Array to store validation errors $errmsg_arr = array(); //Validation error flag $errflag = false; // cleanup POST variables $username = mysqli_real_escape_string($mysqli, stripslashes(trim($_POST['username']))); $password = mysqli_real_escape_string($mysqli, stripslashes(trim($_POST['password']))); //Input Validations if($username == '') { $errmsg_arr[] = 'Username required'; $errflag = true; } if($password == '') { $errmsg_arr[] = 'Password required'; $errflag = true; } //If there are input validations, redirect back to the login form if($errflag) { $_SESSION['ERRMSG_ARR'] = $errmsg_arr; session_write_close(); header("location: logon.php"); exit(); } //Load and run query $result = mysqli_query($mysqli, "SELECT * FROM auth WHERE username='$username' AND password='$password'"); if ($result->num_rows) { //Login Successful session_regenerate_id(); //Set session variables $member = $result->fetch_assoc(); $_SESSION['SESS_MEMBER_ID'] = $member['ID']; $_SESSION['SESS_USERNAME'] = $member['username']; $_SESSION['SESS_FIRST_NAME'] = $member['fname']; $_SESSION['SESS_PASSWORD'] = $member['password']; $_SESSION['SESS_AUTH_LEVEL'] = $member['auth_level']; session_write_close(); header("location: index"); exit(); }else { //Login failed $errmsg_arr[] = 'user name or password not found'; $errflag = true; if($errflag) { $_SESSION['ERRMSG_ARR'] = $errmsg_arr; session_write_close(); header("location: logon.php"); exit(); } } mysqli_close($mysqli); ?>
Большое спасибо!
Ну, вы хотели бы использовать подготовленные инструкции здесь, потому что вы не выполняете статический SQL-запрос – для этого и должен использоваться mysqli_query()
.
Итак, вот что вам нужно сделать:
// cleanup POST variables
. //Load and run query
для использования подготовленного оператора. Во-первых, мы хотим его подготовить: http://php.net/manual/en/mysqli.prepare.php
$query = mysqli_prepare($mysqli, "SELECT * FROM auth WHERE username=? AND password=?");
Тогда мы хотим дать Mysqli, что? Знаки: http://www.php.net/manual/en/mysqli-stmt.bind-param.php
$query->bind_param('ss', $username, $password);
Затем используйте bind_result
и fetch
(см. Индекс по адресу http://www.php.net/manual/en/class.mysqli-stmt.php ), чтобы получить результат и сохранить в переменных сеанса.