【问题标题】:Including form in view file to controller file PHP将视图文件中的表单包含到控制器文件 PHP
【发布时间】:2017-01-04 23:33:19
【问题描述】:

我正在为我的网站创建简单的注册表单,但在显示错误时遇到了问题。当我在表单中输入不正确的数据并单击提交按钮时,没有任何反应,只有当我再次单击它时(即使文本框为空)才会显示错误消息。包含文件是否有问题,如何在不将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>

【问题讨论】:

    标签: php forms


    【解决方案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() 重定向等,具体取决于结果。

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      相关资源
      最近更新 更多