У меня есть страница входа в систему. Я хочу, чтобы, когда пользователь вводит правильное имя пользователя и пароль, страница, которую он хочет открыть для него. и если пароль и имя пользователя неверны, он получает сообщение об ошибке на текущей странице. и еще одна проблема заключается в том, что при первом открытии страницы у вас есть неопределенная ошибка индекса PHP.
<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
<div class="data">
<label for="name">username: </label>
<input type="text" name="UserName"/>
</div>
<div class="data">
<label for="name">password: </label>
<input type="password" name="PassWord"/>
</div>
<input type="submit" value="Log In" name="submit" id="submit"/>
<?php
$dbUserName = "alex";
$dbPassWord = "1234";
$UserName = $_POST["UserName"];
$PassWord = $_POST["PassWord"];
if($UserName = $dbUserName&&$PassWord = $dbPassWord){
//the code which moves the user to another page.
}else echo "please enter the correct username and password";
?>
</form>
Благодарю.
Вы должны перенести свой PHP-код в начало своего файла, чтобы сделать его сервером (что было бы правильно делать), чтобы избежать ошибок с выходом перед настройкой заголовков. Кроме того, ваше условие присваивает значения переменных (=) вместо сравнения значений (==).
Пример (непроверенный) установки, которая могла бы работать:
<?php
$dbUserName = "alex";
$dbPassWord = "1234";
if(isset($_POST['UserName']))
{
$UserName = $_POST["UserName"];
$PassWord = $_POST["PassWord"];
if($UserName == $dbUserName && $PassWord == $dbPassWord)
{
header("Location: http://example.com/the/page/where/your/user/should/end/up");
exit;
}
else
{
$error = true;
}
}
?>
<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post">
<div class="data">
<label for="name">username: </label>
<input type="text" name="UserName"/>
</div>
<div class="data">
<label for="name">password: </label>
<input type="password" name="PassWord"/>
</div>
<input type="submit" value="Log In" name="submit" id="submit"/>
</form>
<?php if(isset($error)): ?>
please enter the correct username and password
<?php endif; ?>
В вашем случае if вы случайно ставите символ "=", когда он должен быть двойным:
if($UserName == $dbUserName&&$PassWord == $dbPassWord){
Попробуй это -
<?php
$dbUserName = "alex";
$dbPassWord = "1234";
if (isset($_POST["UserName"]) && isset($_POST["PassWord"])) {
$UserName = $_POST["UserName"];
$PassWord = $_POST["PassWord"];
if($UserName == $dbUserName && $PassWord == $dbPassWord){
header('location:path/location');
exit;
} else echo "please enter the correct username and password";
}
?>
Undefined index
ошибки приходит, потому что UserName
и password
не будет присутствовать там, пока форма была размещена. поэтому добавили чеки.
Как и другие, используйте ==
вместо =
.
Ответ на вопрос о перенаправлении см. В ответе Repox.
В вашем случае =
оператор присваивает значение переменной (оператор присваивания).
С помощью ==
и ===
вы делаете условие и проверяете значение.
if($UserName == $dbUserName&&$PassWord == $dbPassWord) {
if($UserName == $dbUserName && $PassWord == $dbPassWord){
Как сказал Фэнсен, вы фактически используете оператор присваивания, который всегда будет равен true.