我正在为我的网站创建简单的注册表单,而且我遇到显示错误的问题。当我向表单输入不正确的数据并单击“提交”按钮时,没有任何反应,只有当我再次单击它时(即使文本框为空)也会显示错误消息。这是一个包含文件的问题,如何修复它而不将php逻辑和html布局放在一起?
的 register.php
<?php
session_start();
require_once 'business.php';
require 'views/register_view.php';
if (isset($_POST['email']) || isset($_POST['login']) || isset($_POST['pass1']))
{
$ok_flag=true;
$email = $_POST['email'];
$email2 = filter_var($email, FILTER_SANITIZE_EMAIL);
if ((filter_var($email2, FILTER_VALIDATE_EMAIL)==false) || ($email2!=$email))
{
$ok_flag=false;
$_SESSION['err_email']="Podaj poprawny adres e-mail";
}
$login = $_POST['login'];
if (strlen($login)<3)
{
$ok_flag=false;
$_SESSION['err_login']="Login musi posiadać od 3 do 20 znaków";
}
if (ctype_alnum($login)==false)
{
$ok_flag=false;
$_SESSION['err_login']="Login może składać się tylko z liter i cyfr (bez polskich znaków)";
}
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];
if ((strlen($pass1)<8) || (strlen($pass1)>20) || empty($pass1))
{
$ok_flag=false;
$_SESSION['err_pass']="Hasło musi posiadać od 8 do 20 znaków";
}
if ($pass1!=$pass2)
{
$ok_flag=false;
$_SESSION['err_pass']="Podane hasła nie są identyczne";
}
$pass_hash = password_hash($pass1, PASSWORD_DEFAULT);
//Zapamiętaj wprowadzone dane
$_SESSION['email'] = $email;
$_SESSION['login'] = $login;
$_SESSION['pass1'] = $pass1;
$_SESSION['pass2'] = $pass2;
if ($ok_flag==true) {
//dodaj gracza do bazy danych
}
}
?>
register_view.php
<h1>Rejstracja</h1>
<form method="post">
Adres e-mail:<br />
<input type="text" name="email"/><br />
<?php
if (isset($_SESSION['err_email']))
{
echo '<div class="error">'.$_SESSION['err_email'].'</div>';
unset($_SESSION['err_email']);
}
?>
Login:<br />
<input type="text" name="login" maxlength="20" /><br />
<?php
if (isset($_SESSION['err_login']))
{
echo '<div class="error">'.$_SESSION['err_login'].'</div>';
unset($_SESSION['err_login']);
}
?>
Hasło:<br />
<input type="password" name="pass1"/><br />
<?php
if (isset($_SESSION['err_pass']))
{
echo '<div class="error">'.$_SESSION['err_pass'].'</div>';
unset($_SESSION['err_pass']);
}
?>
Powtórz hasło:<br />
<input type="password" name="pass2"/><br /><br />
<input type="submit" value="Zarejestruj się"/>
</form>
答案 0 :(得分:1)
这是你的问题:
<?php
session_start();
require_once 'business.php';
// here you include the view
require 'views/register_view.php';
if (isset($_POST['email']) || isset($_POST['login']) || isset($_POST['pass1']))
{
...
您正在处理表单提交的逻辑 之前 。所以第一次没有设置会话变量。
您需要将require 'views/register_view.php';
移至if
声明之后。
通常,在开始输出到浏览器之前,应始终进行处理。这也将允许您启动会话,使用header()
重定向等,具体取决于结果。