Как заставить php перенаправлять каждого пользователя на свои соответствующие страницы? - PullRequest
0 голосов
/ 03 мая 2020

хорошо, поэтому у меня есть небольшая проблема с php. Я знаю, что есть много подобных вопросов, но те, которые я нашел, не помогли. Я не хочу использовать что-то более похожее на javascript или что-то в этом роде. Я установил mysql, есть 3 столбца ID, имя пользователя и пароль.

   <?php 

$username = $_POST['user'];
$password = $_POST['pass'];
$username = stripcslashes($username);
$password = stripcslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
mysql_connect("localhost","root","");
mysql_select_db("login");
$result = mysql_query("select * from users where username='$username' and password= '$password'") 
or die("failed to query DB".mysql_error());
$row = mysql_fetch_array($result);
if ($row['username'] == $username && $row['password'] == $password) {header(suc.html);
die();}else{header("Location: fail.html");die();}
?>

Этот код работает, но когда я не заполняю никакие детали и не нажимаю "Отправить", он возвращает меня к су c. html, который показывает успешный вход в систему. Теперь я хочу сделать следующее: я сделаю идентификатор похожим на имена каждого отдельного html, затем php будет go сопоставлять номер идентификатора с именем файла в каталоге, и покажу страницу для соответствующий пользователь. как скажем, user1. Логин userlol пароль 123 Идентификатор user1 файл user1. html Затем, какой код использовать, он идет и сопоставляет идентификатор user1 с именем. html, затем перенаправляет пользователя на свою собственную пользовательскую страницу. Есть ли способ? Что-то вроде начала работы с php, поэтому, пожалуйста, немного ослабьте :) PS Я знаю, что эти коды являются более старыми php кодами, но все работает лично для меня.

1 Ответ

1 голос
/ 03 мая 2020

Вы получаете такое поведение, потому что, когда имя пользователя и пароль не представлены, их соответствующие значения оцениваются как нулевые, и ваш запрос SQL успешен, но возвращает 0 строк, тем самым делая ваши $ row ['username'] и $ строка ['пароль'] должна быть нулевой. В общем, ваши $ row ['username'], $ row ['password'], $ username, $ password все будут равны нулю, что отвечает всем требованиям для перенаправления на "su c. html"

Чтобы решить эту проблему, просто проверьте, если mysql_num_rows ($ result) == 1, потому что обычно успешный вход в систему возвращает только одну строку из-за уникальных имен пользователей.

Но Я бы не советовал вам продолжать использовать устаревшие mysql и SQL чувствительные к инъекциям логи c. Пожалуйста, позвольте мне переписать вашу логику c следующим образом:

<?php 
$username = $_POST['user'];
$password = $_POST['pass'];
//    You don't have to escape or sanitize user inputs if you use Prepared Statement plus sanitizing user password is highly discouraged.
//    $username = stripcslashes($username);
//    $password = stripcslashes($password);
//    $username = mysql_real_escape_string($username);
//    $password = mysql_real_escape_string($password);

// Initiate a PDO connection and set your error mode to exception.
$conn=new pdo("mysql:host=localhost;dbname=login;","root","",array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

try{
    // Prepare your query and replace all values with ? which would be provided as an array in execute(); I added limit 1 to make sure we are getting a maximum of one row from our query.
    $result_stmt = $conn->prepare("select * from `users` where (`username`=? and `password`=?) limit 1");
    $result_stmt->execute([$username,$password]);
    // fatch() would return a single row just like mysql_fetch_array or mysql_fetch_assoc while fetchAll() would return all rows. 
    $result=$result_stmt->fetch();
    if(count($result)==1){
        // There is no need to check this again because your query to the database already did.
        // if ($row['username'] == $username && $row['password'] == $password) 
        // Redirect users to the same page but identify each user through session (recommended)
        header("location:suc.html");
    }else{
        header("location:fail.html");
    }
}catch(Exception $e){
    echo $e->getMessage();
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...