Я пытаюсь создать многостраничные формы PHP, и я использую сессии PHP для этой цели.
Однако, когда при вводе пользователя происходит ошибка, и я хочу, чтобы форма попросила пользователя снова заполнить форму с правильными данными, поле формы не будет содержать данные, которые пользователь уже ввел, поэтому пользователь должен начать работу. снова и снова
Как сделать формы липкими с сессией php?
Спасибо
Мой код как ниже
<?php
// Session starts here.
if (!isset($_SESSION)) session_start();
?>
<form action="registration.php" method="post">
<center><h8>Please create your user name and password</h8></center>
<div class="imgcontainer">
<img src="phone.gif" alt="Welcome" class="avatar">
</div>
<div class="container">
<label><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="username" required value="<?php if(isset($_POST['username'])) echo $_POST['username'];?>">
<label><b>Password</b></label>
<input type="Password" placeholder="Enter Password" name="password" required>
<label><b>Confirm Password</b></label>
<input type="Password" placeholder="Confirm Password" name="confirm" required>
<span id="error" width=100%>
<!---- Initializing Session for errors --->
<?php
if (!empty($_SESSION['error'])) {
echo "<error>".$_SESSION['error']."</error>";
unset($_SESSION['error']);
}
if (isset($_POST['username'])){
$_SESSION['username'] = $_POST['username'];
echo $_SESSION['username'];
echo $_POST['username'];
}
?>
</span>
<br>
<input type="reset" value="Reset" />
<input type="submit" value="Next" />
</div>
а регистрация php содержит
<?php
if (!isset($_SESSION)) session_start();
// Checking first page values for empty,If it finds any blank field then redirected to first page.
if (isset($_POST['username']))
{
if (($_POST['password']) === ($_POST['confirm']))
{
foreach ($_POST as $key => $value)
{
$_SESSION['post'][$key] = $value;
}
}
else
{
$_SESSION['error'] = "Password does not match with Confirm Password.";
if (isset($_POST['username'])){
$_SESSION['username'] = $_POST['username'];
echo $_SESSION['username'];
echo $_POST['username'];
}
header("location: createlogin.php"); //redirecting to first page
}
}
Что-то вроде этого:
<input name="var" value="<?= isset($_SESSION['var']) ? $_SESSION['var'] : null ?>" />
Попробуйте наоборот. Привязка действия формы к текущей странице, и если все поля действительны; перенаправить его на следующую страницу (registration.php). Таким образом, у вас останутся все пост-данные, вы сможете обработать все, что нужно сохранить в сеансе, и вы сможете перенаправить после того, как вся логика будет выполнена.
Мои два цента будут держать ту же страницу, чтобы проверить содержание и форму.
Вы можете включить другие файлы PHP с одной страницы в зависимости от того, является ли форма действительной.
Таким образом, вы сохраняете одинаковый $ _POST между обеими страницами и вам не нужно хранить опубликованные данные в переменной сеанса.
В противном случае, если вы хотите сохранить ту же архитектуру, вам нужно использовать $_SESSION
переменные вместо $_POST
во входном значении, например, ответом delboy.
Заменить:
<?php if(isset($_POST['username'])) echo $_POST['username'];?>
С:
<?php if(isset($_SESSION['username'])) echo htmlspecialchars($_SESSION['username']); ?>
^ Примечание: htmlspecialchars используется для предотвращения отраженного XSS, если пользователь вводит "
как имя пользователя.
Проблема в том, что ваши данные размещены в registration.php, поэтому вы не можете получить опубликованное значение в исходном файле. Вы пытаетесь использовать $ SESSION, но это не рекомендуется и не правильно. Все ваше решение неверно.
Забудьте о сессионных и разделенных файлах, поместите все вместе в файл registration.php.
Вы можете проверить, опубликовал ли пользователь переменную $ _SERVER [‘REQUEST_METHOD’] или нет.
if($_SERVER['REQUEST_METHOD'] == 'POST'){
print 'Something just posted';
}
PS: не забудьте сохранить пароль, прежде чем хранить его! 🙂