Я новичок в PHP. У меня проблема с моей страницей входа. все работало нормально, когда я выполнял код на моем локальном сервере (localhost). но так как я загружаю код на hostgator, я не могу войти в свою учетную запись.
Я предполагаю, что это проблема сеанса с сервером hostgator.
вот код, который я хочу запустить на hosgator
<?php
session_start();
require_once("functions.php");
require_once("db-const.php");
if (logged_in() == true) {
redirect_to("home.php");
}
?>
<html>
<head>
<title>Login</title>
<link rel="shortcut icon" href="images/WST.png" type="image/x-icon" />
<link rel="stylesheet" type="text/css" href="css/login.css" />
<span><img src="https://web-answers.ru/wp-content/uploads/2019/03/WST LOGO.png" width="290" height="115"></span>
</head>
<body>
<div class="login">
<h1><font size=5px; color="#030724";>Lo</font><font size=5px; color="#ffd700";>g</font><font size=5px; color="#d10b0b";>in</font></h1>
<!-- The HTML login form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="username" class="textbox" placeholder="Email" />
<input type="password" name="password" class="textbox" placeholder="Password" />
<input type="submit" name="submit" value="Login" /><br />
<input type="checkbox" name="remember" />Keep me logged in<br/><br/>
<a href="forgot.php">Forgot Password?</a> |
<a href="register.php">Sign Up</a>
</form>
<?php
if (isset($_POST['submit'])) {
$username = $_POST['username'];
$password = $_POST['password'];
// processing remember me option and setting cookie with long expiry date
if (isset($_POST['remember'])) {
session_set_cookie_params('604800'); //one week (value in seconds)
session_regenerate_id(true);
}
$encrypt_password=md5($password);
$sql = "SELECT * from users WHERE username ='{$username}' AND password ='{$encrypt_password}' LIMIT 1";
$result = $mysqli->query($sql);
if ($result->num_rows != 1) {
echo "<p><font color='red';>Invalid username or password!</font></p>";
} else {
// Authenticated, set session variables
$user = $result->fetch_array();
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];
// update status to online
$timestamp = time();
$sql = "UPDATE users SET status={$timestamp} WHERE id={$_SESSION['user_id']}";
$result = $mysqli->query($sql);
redirect_to("home.php?id={$_SESSION['user_id']}");
// do stuffs
}
}
if(isset($_GET['msg'])) {
echo "<p style='color:red;'>".$_GET['msg']."</p>";
}
?>
</div>
</body>
</html>
Пожалуйста, кто-нибудь, помогите мне.
заранее спасибо 🙂
Здесь много вопросов. Я надеюсь, что это не должно быть производственное приложение или иметь что-то безопасное за ним.
Изначально вы использовали LIKE. LIKE допускает шаблоны, поэтому, если бы кто-то ввел имя пользователя%, он соответствовал бы каждому имени пользователя, так что вы, по сути, выполняли только проверку пароля, и это только потому, что вы использовали md5 в качестве пароля.
$username = $_POST['username'];
$sql = "SELECT * from users WHERE username ='$username' password ='$encrypt_password' LIMIT 1";
Этот код допускает атаку SQL-инъекцией, которая может позволить хакеру манипулировать или уничтожать вашу базу данных. Ищите готовые заявления и используйте их. Никогда не используйте пользовательский ввод (POST / GET / COOKIE) в стандартных запросах.
WHERE username ='$username' password ='$encrypt_password'
Вам не хватает AND между именем пользователя и паролем.
Если вы используете это для изучения, то хорошо, если вы пытаетесь запустить что-то в работе, вам нужно нанять кого-нибудь, чтобы помочь вам исправить / обезопасить ваш код.
Может быть полезно убедиться, что все ошибки отображаются, добавьте этот код в начало вашего PHP:
ini_set("display_errors", "1");
error_reporting(E_ALL);
Других решений пока нет …