2014-02-07 14 views
0

header("location")으로 공식을 쓰려고합니다.PHP 리다이렉트 (데이터 리다이렉트)

그리고 한 가지를 제외하고는 아무 문제가 없습니다. 메신저가 메시지를 보유하고있는 세션을 설정하려고 할 때 세션을 설정하지만, 그것을 쓰려고 할 때 .. 문제가 시작될 때 ..

그는 쿠키를 지우면 쿠키를 지우고

if (isset($_SESSION['sess_error'])) { 
    echo '<div class="alert alert-danger">'; 
    foreach ($_SESSION['sess_error'] as $val) { 
     echo $val.'<br>'; 
    } 
    unset($_SESSION['sess_error']); 
} 

if (empty($_POST['username'])) { $error[] = 'Du måste fylla i ett användarnamn...'; }  
if (empty($_POST['password'])) { $error[] = 'Du måste fylla i ett lösenord...'; } 
elseif ($sql->num_rows == 0) { $error[] = 'Något fel uppstog, du kunde inte bli inloggad...'; } 
if (count($error) > 0) { 
    $_SESSION['sess_error'] = $error; 
} 

누구나 이런 일이 왜 어떤 아이디어를 가지고 무엇을 내가 그것을 방지하기 위해 수행 할 수 있습니다 여기에

내 코드입니다 .. 경우 다시 거기에 도착 할려고?

전체 스크립트 :

<?php 
SESSION_START(); 
    if (isset($_POST['login'])) { 
      $error = null; 
      $username = $_POST['username']; 
      $password = $_POST['password']; 
      $sql = $mysqli->query("SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"); 
      if (empty($_POST['username'])) { $error[] = 'Du måste fylla i ett användarnamn...'; } 
      if (empty($_POST['password'])) { $error[] = 'Du måste fylla i ett lösenord...'; } 
      elseif ($sql->num_rows == 0) { $error[] = 'Något fel uppstog, du kunde inte bli inloggad...'; } 
       if (count($error) > 0) { 
        $_SESSION['sess_error'] = $error; 
       } 
       else { 
        while ($r = $sql->fetch_array()) { 
         $_SESSION['sess_username'] = $r['username']; 
         $_SESSION['sess_userID'] = $r['userID']; 
         $_SESSION['sess_admin'] = $r['admin']; 
         $_SESSION['sess_logg'] = 1; 
        } 
       } 
       header("Location: ./"); 
      } 
?> 
+0

언제 리디렉션을 사용합니까? 리디렉션 부분도 추가하십시오. –

+0

리디렉션 전에 오류가 표시되는 것 같습니다. 페이지가 리디렉션되면 세션이 설정되지 않고 리디렉션 된 페이지에 메시지가 표시되지 않습니다. – shanavascet

+0

양식 유효성 검사를 작성하고 있습니까? 그렇다면 같은 페이지에 머물면서이 오류를 양식 필드에 추가하십시오. – Ruben

답변

0

나는 전체 문제를 해결했다. 나는 단지 출구 만 추가해야했다. 헤더 ("") 뒤에; 그리고 그것은 잘 작동했습니다!

-1

재 지정 후, 양식 오류를 설정하려는 페이지에 누락 된 start_session()가있을 수 있습니다.

파일 : "login.php"

<?php 
    session_start(); 
    var_dump($_SESSION); 

    if(isset($_SESSION['session_logg']) && $_SESSION['session_logg'] === '1') { 
     echo 'Logged in :' . $_SESSION['session_username']; 
    } elseif (isset($_SESSION['sess_error'])) { 
     var_dump($_SESSION['sess_error']); 
     echo '<div class="alert alert-danger">'; 
     foreach ($_SESSION['sess_error'] as $val) { 
      echo $val.'<br>'; 
     } 
     echo '</div>'; 

     unset($_SESSION['sess_error']); 
    } 

    if (isset($_POST['login'])) { 
       $error = array(); 
       $username = isset($_POST['username']) ? $_POST['username'] : false; 
       $password = isset($_POST['password']) ? $_POST['password'] : false; 

       // no username or password given 
       if ($username === false or $password === false) 
       { 
        $_SESSION['sess_error'][] = 'Login Error.'; 
        header("Location: login.php"); 
        exit(); 
       } 

       // username, pw given, lets ask db for that guy 
       $sql = $mysqli->query("SELECT * FROM users WHERE username='".$username."' AND password='".$password."' LIMIT 1"); 

       // user not found in db, goodbye 
       if ($sql->num_rows == 0) { 
        $_SESSION['sess_error'][] = 'Något fel uppstog, du kunde inte bli inloggad...';  
        header("Location: login.php"); 
        exit(); 
       } 

       // user found 
       else { 
        $r = $sql->fetch_array()) { 
        $_SESSION['sess_username'] = $r['username']; 
        $_SESSION['sess_userID'] = $r['userID']; 
        $_SESSION['sess_admin'] = $r['admin']; 
        $_SESSION['sess_logg'] = 1; 
        header("Location: index.php"); 
        exit();        
       }      

    } 
    ?> 

보조 노트 : 당신의 문제에 releated되지 않음 : 결코 로그인에 대한 올바른 오류를 표시하지 않습니다. : "username xy"대신 "login failed"가 표시됩니다.

+0

session_start() –

+0

session_start는 페이지 상단에 있습니다. 나는 그것을 게시해야 할까? – Tommy

+0

예! 그것은 당신의 질문의 중요한 부분입니다. –