2014-03-20 3 views
-1

Я сделал функцию входа в систему, но при первой регистрации я не переадресую ее на нужную страницу. У кого-то есть ключ к решению этой проблемы?не перенаправляется после входа в систему

Вот часть кода для моей формы входа.

session_start(); 
if(isset ($_SESSION['loggedin'])) 
{ 
    header("Location: account.phtml") ; 
} 

if (isset($_POST["submit"])) 
{ 
    $username = $_POST ["username"]; 
    $password = $_POST ["password"]; 

    if ($username && $password) 
    { 
     $query = mysql_query("SELECT * FROM user WHERE username='$username'"); 

     if($query) 
     { 
      $numrows = mysql_num_rows($query); 
      if($numrows != 0) 
      { 
       while ($row = mysql_fetch_assoc($query)) 
       { 
        $dbusername = $row ['username']; 
        $dbpassword = $row ['password']; 
       } 
       if ($username == $dbusername && $password == $dbpassword) 
       { 
        $_SESSION['username'] = $dbusername; 
        $_SESSION['loggedin'] = true; 
        header("Location: account.phtml"); 
       } 
      } 
     } 
     else{} 
    } 
} 

Это часть моего регистрационного формуляра.

<form class="form-horizontal" role="form" method="post" target="account.phtml"> 
     <!-- here comes my loginform --> 
    </form> 

ответ

0

Наиболее вероятная причина в том, что ваши заголовки уже отправлены к моменту выдачи перенаправления. Если это так, то PHP будет выдавать предупреждающее сообщение - почему вы не видите его? Следовательно, первым шагом будет явное инициирование предупреждения перед session_start() и убедитесь, что отчет об ошибках работает правильно.

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

Следующая проблема заключается в том, что вы не останавливаете выполнение кода после функции head ('Location: ...) (подсказка: если вы поместите инструкцию печати между заголовком() и выйдите, вы сможете чтобы получить некоторую диагностическую информацию о том, что делает код).

Следующая проблема заключается в том, что ваш код широко открыт для SQL-инъекции. Подумайте, что произойдет, если

$_POST ["username"]="nouser' UNION SELECT 'admin' AS username, '' AS password " 
        ."WHERE 'a'='a"; 

Следующий вопрос здесь:

if(isset ($_SESSION['loggedin'])) 

Что делать, если $ _SESSION [ 'LoggedIn'] == ложь?

+0

Большое спасибо, вы действительно очень помогли мне с вашим ответом! – cwi93

0
<?php 
if (isset($_SESSION['user_id']) && $_SESSION['user_id']) { 
    header('Location: user.php?id=' . $_SESSION['user_id']); 
    exit; 
} 
+0

Взятые из http://stackoverflow.com/a/9143071/46675 –

1

изменить это ..

header("Location: account.phtml"); 

в

header("Location: {you want to navigate page}") 

с URL вы хотите перейти. Я думаю, что вы перенаправляете на рабочую страницу. Ваша целевая форма и URL-адрес навигации одинаковы.

+1

как @ Аджай-Патель говорит: <форма ... цель = "account.phtml"> и заголовок ("Location: счет. PHTML "); То же самое ... Изменить заголовок («Расположение: на страницу, которую вы хотите посетить после входа в систему. – Danny

Смежные вопросы