2017-01-04 11 views
0

私のウェブサイトへの簡単な登録フォームを作成していますが、エラーの表示に問題があります。フォームに間違ったデータを入力して[送信]ボタンをクリックすると、何も起こりません。テキストボックスが空の場合でも、再度クリックするとエラーメッセージが表示されます。それはファイルを含めること、PHPロジックとhtmlレイアウトをまとめずに修正する方法に問題がありますか?

register.phpビューファイルからコントローラファイルへのフォームのインクルード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> 

答えて

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'])) 
{ 
    ... 

あなたはビューにを含めていますbeforeフォーム送信を処理しているロジック。したがって、初めてセッション変数は設定されません。

ifの文の後にrequire 'views/register_view.php';を移動する必要があります。

通常は、ブラウザに出力を開始する前に、常に処理を行う必要があります。これにより、結果に応じてセッションを開始し、header()リダイレクトなどを使用することもできます。

関連する問題