2013-07-24 3 views
0

Я работаю над своим сайтом, и я включил форму входа на домашнюю страницу, а не отдельную страницу. Он отлично работает, если у вас нет ошибки «введите неверную информацию». Затем отображаемые ошибки испортили поля формы и форматирования. Поэтому я хотел бы перенаправить его на отдельную страницу (login.php), если пользователь ввел неправильные данные. Мой вопрос, как это сделать, а также можно сохранить отображаемые эррос? Благодаря передовой, ДжошВойти Не удалось Перенаправить на другую страницу

Вот мой код для обработки ошибок:

/** 
    * login - The user has submitted his username and password 
    * through the login form, this function checks the authenticity 
    * of that information in the database and creates the session. 
    * Effectively logging in the user if all goes well. 
    */ 
    function login($subuser, $subpass, $subremember){ 
     global $database, $form; //The database and form object 
    /* Username error checking */ 
    $field = "user"; //Use field name for username 
    if(!$subuser || strlen($subuser = trim($subuser)) == 0){ 
    $form->setError($field, "* Username not entered"); 
    } 
    else{ 
    /* Check if username is not alphanumeric */ 
    if(!preg_match("/^([0-9a-z])*$/i", $subuser)){ 
     $form->setError($field, "* Username not alphanumeric"); 
    } 
    } 

    /* Password error checking */ 
    $field = "pass"; //Use field name for password 
    if(!$subpass){ 
    $form->setError($field, "* Password not entered"); 
    } 

    /* Return if form errors exist */ 
    if($form->num_errors > 0){ 
    return false; 
    } 



    /* Checks that username is in database and password is correct */ 
    $subuser = stripslashes($subuser); 
    $result = $database->confirmUserPass($subuser, md5($subpass)); 

    /* Check error codes */ 
    if($result == 1){ 
    $field = "user"; 
    $form->setError($field, "* Username not found"); 
    } 
    else if($result == 2){ 
    $field = "pass"; 
    $form->setError($field, "* Invalid password"); 
    } 

    /* Return if form errors exist */ 
    if($form->num_errors > 0){ 
    return false; 
    } 

    /* Username and password correct, register session variables */ 
    $this->userinfo = $database->getUserInfo($subuser); 
    $this->username = $_SESSION['username'] = $this->userinfo['username']; 
    $this->userid = $_SESSION['userid'] = $this->generateRandID(); 
    $this->userlevel = $this->userinfo['userlevel']; 

    /* Insert userid into database and update active users table */ 
    $database->updateUserField($this->username, "userid", $this->userid); 
    $database->addActiveUser($this->username, $this->time); 
    $database->removeActiveGuest($_SERVER['REMOTE_ADDR']); 

    /** 
    * This is the cool part: the user has requested that we remember that 
    * he's logged in, so we set two cookies. One to hold his username, 
    * and one to hold his random value userid. It expires by the time 
    * specified in constants.php. Now, next time he comes to our site, we will 
    * log him in automatically, but only if he didn't log out before he left. 
    */ 
    if($subremember){ 
    setcookie("cookname", $this->username, time()+COOKIE_EXPIRE, COOKIE_PATH); 
    setcookie("cookid", $this->userid, time()+COOKIE_EXPIRE, COOKIE_PATH); 
    } 

    /* Login completed successfully */ 
    return true; 

}

ответ

0
Make an array for error like: 
$error = array(); 

if($result == 1){ 
    $field = "user"; 
    $form->setError($field, "* Username not found"); 
    $error[] = "Username not found"; 
    } 
    else if($result == 2){ 
    $field = "pass"; 
    $form->setError($field, "* Invalid password"); 
    $error[] = "Invalid password"; 
    } 

    /* Return if form errors exist */ 
    if($form->num_errors > 0){ 
    return false; 
    } 


And in the last count error array like: 

if(count($error) > 0){ 
echo implode("<br />",$error); 
} 


if there is no error then like: 

if(count($error)==0){ 
header("location:redirectpage.php"); 
} 
0

Вы можете использовать функцию переадресации еще несколько раз на вашем сайте, я предлагаю вам создать класс или функцию для этого:

это работает, если вы работаете с переменным меню в URL: (рабочий пример)

class myHeader { 

    function redirect($menu) { 
    $this->host= $_SERVER['HTTP_HOST']; 
    $this->uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); 
    $extract="http://$this->host$this->uri/?menu=$menu"; 
    $this->head($extract); 
    } 

    function head($extract) { header("Location: $extract"); exit; } 

    } 
    $header = new myHeader(); 

, чтобы отобразить сообщение об ошибке для пользователя, и вы хотите, чтобы придать ему особый взгляд вы можете работать с сессиями:

if($result == 1) { 
$_SESSION['fail_user'] = 1; 
} 

if($result == 2) { 
$_SESSION['fail_password'] = 1; 
} 

затем на вашем login.php:

<?php 
if($_SESSION['fail_user'] == 1) { 
?> 
<p style="color:red; font-weight:bold;">Please enter a valid Username</p> 
<?php 
} 
?> 
Смежные вопросы