После попытки установить простую систему входа с php и MySQL, мне сообщили об амортизации MySQL, поэтому я начал изучать mysqli.
Я все еще новичок в PHP и подключаюсь к базам данных, поэтому я нашел несколько онлайн-руководств, и мне удалось установить простой скрипт входа, который работает (я использовал этот учебник http://w3epic.com/php-mysql-login-system-a -super-simple-tutorial/). Есть одна часть, которую я потерял.
Вот код с моей страницы входа:
<html>
<head>
<title>User Login Form - PHP MySQL Ligin System | W3Epic.com</title>
</head>
<body>
<h1>User Login Form - PHP MySQL Ligin System | W3Epic.com</h1>
<?php
if (!isset($_POST['submit'])){
?>
<!-- The HTML login form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" name="submit" value="Login" />
</form>
<?php
} else {
require_once("db-const.php");
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
# check connection
if ($mysqli->connect_errno) {
echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
exit();
}
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * from clients WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
$result = $mysqli->query($sql);
if (!$result->num_rows == 1) {
echo "<p>Invalid username/password combination</p>";
} else {
echo "<p>Logged in successfully</p>";
// do stuffs
}
}
?>
</body>
</html>
Он работает, и я могу войти в систему.
Тем не менее, я хотел бы перенаправить пользователя на другую страницу, основываясь на том, если он находит совпадение в базе данных или нет
Моя мысль заключалась в том, чтобы сделать что-то вроде:
if (!$result->num_rows == 1) {
echo "<p>Invalid username/password combination</p>";
header( 'Location: http://www.galactek.com/support/offmaint.html' );
} else {
echo "<p>Logged in successfully</p>";
// do stuffs
header("Location:output.php");
}
Однако это вызывает ошибку:
Предупреждение. Невозможно изменить информацию заголовка - уже отправленные заголовки (вывод запущен в /home4/galactek/public_html/test/login.php:7) в /home4/galactek/public_html/test/login.php в строке 38
Как я могу успешно перенаправить пользователя?
Вам нужно сделать проверку пароля в самой верхней части страницы. Вам не разрешено изменять заголовок, если что-либо уже записано на выходе (например, HTML и заголовки перед вашим PHP). Кроме того, просмотрите параметризованные SQL-запросы, так как это поможет предотвратить инъекции SQL, которые вы в настоящее время также используете
<?php
header("Location: " . my_url);
<?php
$failed = false;
if (isset($_POST["username"]) && isset($_POST["password"])) {
require_once("db-const.php");
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
# check connection
if ($mysqli->connect_errno) {
echo "<p>MySQL error no {$mysqli->connect_errno} : {$mysqli->connect_error}</p>";
exit();
}
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * from clients WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
$result = $mysqli->query($sql);
if ($result->num_rows == 1) {
//redirect the user to their account page since they logged in!
header("Location: http://example.com/youraccount");
} else {
$failed = true;
}
}
?>
<html>
<head>
<title>User Login Form - PHP MySQL Ligin System | W3Epic.com</title>
</head>
<body>
<h1>User Login Form - PHP MySQL Ligin System | W3Epic.com</h1>
<!-- The HTML login form -->
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" name="submit" value="Login" />
</form>
<?php
if ($failed) {
echo "<p>Invalid username/password combination</p>";
}
?>