2016-07-29 2 views
0

Прежде всего, я хотел бы поблагодарить Codecourse за учебник. Все работает, но я хотел бы отобразить ошибки в таблице td. Может быть глупый вопрос, но я новичок и пытался работать это мой сам не повезлоPHP OOP Система регистрации/регистрации

<?php 
require_once 'core/init.php'; 

if(Input::exists()) { 
    if(Token::check(Input::get('token'))) { 

     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'username' => array('required' => true), 
      'password' => array('required' => true) 
     )); 

     if($validate->passed()) { 
      $user = new User(); 

      $remember = (Input::get('remember') === 'on') ? true : false; 
      $login = $user->login(Input::get('username'), Input::get('password'), $remember); 

      if($login) { 
       Redirect::to('index.php'); 
      } else 
       echo "Incorrect username or password"; 

     } else { 
      foreach($validate->errors() as $error) { 
       echo $error, '<br>'; 
      } 
     } 
    } 
} 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
    <body> 
     <form action='' method='post'> 
      <table> 
       <tr> 
        <td><!-- display errors here --></td> 
        <td><!-- and/or here --></td> 
       </tr> 
       <tr> 
        <td><label for='username'>Username</label></td> 
        <td><input type='text' name='username' id='username'></td> 
       </tr> 
       <tr> 
        <td><label for='password'>Password</label></td> 
        <td><input type='password' name='password' id='password'></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td><label for='remember'><input type='checkbox' name='remember' id='remember'>Remember me</label></td> 
       </tr> 
       <tr> 
        <td><input type='hidden' name='token' value='<?php echo Token::generate(); ?>'></td> 
        <td><input type='submit' value='Login'></td> 
       </tr> 
      </table> 
     </form> 
    </body> 
</html> 
+0

Просто перемещайте foreach, перебирая ошибки, туда, где вы хотите их показать. – JimL

+0

Назначьте все ошибки переменной ($ error_messages) и повторите ее там, где захотите. –

+0

@ JimL - Я не думаю, что это так просто, нам придется добавить ошибки в этом цикле к массиву, а затем сделать дополнительный цикл foreach – ArtisticPhoenix

ответ

1

Как это:

<?php 
require_once 'core/init.php'; 

$errors = array(); //storage variable 

if(Input::exists()) { 
    if(Token::check(Input::get('token'))) { 

     $validate = new Validate(); 
     $validation = $validate->check($_POST, array(
      'username' => array('required' => true), 
      'password' => array('required' => true) 
     )); 

     if($validate->passed()) { 
      $user = new User(); 

      $remember = (Input::get('remember') === 'on') ? true : false; 
      $login = $user->login(Input::get('username'), Input::get('password'), $remember); 

      if($login) { 
       Redirect::to('index.php'); 
      } else 
       $errors[] = "Incorrect username or password"; //add other errors in too! 

     } else { 
      foreach($validate->errors() as $error) { 
       $errors[] = $error; //add error to storage 
      } 
     } 
    } 
} 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Document</title> 
</head> 
    <body> 
     <form action='' method='post'> 
      <table> 
       <tr> 
        <td><!-- display errors here --></td> 
        <td> 
         <?php foreach($errors as $error) : ?> 
          <?php echo $error; // output ?> 
         <?php endforeach; ?> 
        </td> 
       </tr> 
       <tr> 
        <td><label for='username'>Username</label></td> 
        <td><input type='text' name='username' id='username'></td> 
       </tr> 
       <tr> 
        <td><label for='password'>Password</label></td> 
        <td><input type='password' name='password' id='password'></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td><label for='remember'><input type='checkbox' name='remember' id='remember'>Remember me</label></td> 
       </tr> 
       <tr> 
        <td><input type='hidden' name='token' value='<?php echo Token::generate(); ?>'></td> 
        <td><input type='submit' value='Login'></td> 
       </tr> 
      </table> 
     </form> 
    </body> 
</html> 

Просто хранить их в переменной, а затем выводить их, где вы хотите, довольно тянуть вперед.