2017-07-11 4 views
0

最近、私のアプリケーションを保護するためにプリペアドステートメントを使用するようにPHPコードを変更しました。私はログインページに苦労しています。私はログイン時にユーザーの "userlevel"をチェックしてから、ユーザーの適切なページにリダイレクトします。リダイレクトが多すぎます。プリペアドステートメントに変更した後でSESSIONの問題が発生しました。

Login.php

<?php 
session_start(); 

if(isset($_SESSION['usr_id'])!="" && $_SESSION['userlevel']=="1") { 
    header("Location: v1/ued/"); 
} else 
if(isset($_SESSION['usr_id'])!="" && $_SESSION['userlevel']=="2") { 
    header("Location: v1/ced/"); 
} 

include_once 'includes/database.php'; 

//Login 
    if (isset($_POST['login'])) { 

     $email = mysqli_real_escape_string($con, $_POST['user-name']); 
     $password = mysqli_real_escape_string($con, $_POST['user-password']); 
     $result = mysqli_query($con, "SELECT * FROM users WHERE idnumber = '" . $email. "' and password = '" . md5($password) . "'"); 

     if ($row = mysqli_fetch_array($result)) { 
      $_SESSION['usr_id'] = $row['id']; 
      $_SESSION['userlevel'] = $row['userlevel']; 
      $_SESSION['idnumber'] = $row['idnumber']; 

      if ($_SESSION['userlevel']=="1"){ 
        $_SESSION['firstnames'] = $row['firstnames']; 
        $_SESSION['surname'] = $row['surname']; 
        header("Location: v1/level1/index.php"); 
      } 
      else 
      if ($_SESSION['userlevel']=="2"){ 
       header("Location: v1/level2/index.php"); 
      } 

     } else { 
      $errormsg = "Incorrect Email or Password!!!"; 
     } 
    } 

?> 

と私のレベル1/index.phpをに:私は私のLogin.phpを変更した

​​

それは私の古いログインページにうまく働きました準備された文を次のように使用してください:

<?php 
session_start(); 

if(isset($_SESSION['usr_id'])!="" && $_SESSION['userlevel']=="1") { 
    header("Location: v1/ued/"); 
} else 
if(isset($_SESSION['usr_id'])!="" && $_SESSION['userlevel']=="2") { 
    header("Location: v1/ced/"); 
} 

include_once 'includes/database.php'; 

if (isset($_POST['login'])) { 
    $password = md5($_POST['user-password']); 
    $email = $_POST['user-name']; 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 
    $stmt = $mysqli->prepare("SELECT * FROM users WHERE idnumber = ? and password = ?"); 
    $stmt->bind_param('ss', $email, $password); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
     if ($row = $result->fetch_array()) 
     { 
      $_SESSION['usr_id'] = $row['id']; 
      $_SESSION['userlevel'] = $row['userlevel']; 
      $_SESSION['idnumber'] = $row['idnumber']; 
      $_SESSION['firstnames'] = $row['firstnames']; 
      $_SESSION['surname'] = $row['surname']; 
      if ($_SESSION['userlevel']=="1"){ 
       header("Location: v1/ued/"); 
      } 
      else 
      if ($_SESSION['userlevel']=="2"){ 
       header("Location: v1/ced/"); 
      } 
     }  
} 

?> 

今、ChromeでエラーERR_TOO_MANY_REDIRECTSが表示されます。私は問題が何であるか把握していないようです。私が得ることができるすべての助けに感謝します。

+0

する必要があります常にリダイレクトされることはありません。そして、あなたのデータベースクエリが予想されるデータを返すかどうか、それが期待されるブランチなどに入るかどうかを確認してください。 – CBroe

答えて

1

if($_SESSION['userlevel'] !== "1") {レビューこのライン

それはあなたが実際に何が起こっているか見ることができるように、デバッグ出力で場所ヘッダを交換...さて、いくつかの_basic debugging_を行う

if($_SESSION['userlevel'] != "1") {

+0

それは問題をソートしたようです!うわー、私はそれを見逃したのか分かりません。どうもありがとうございます! – Bruno

+0

まあ、時には私たちの頭と目がちょうど疲れている、それは大丈夫です、しかし、私たちは皆それが決して起こることは決してありません。あなたは歓迎です – cocostru

+0

ハハ、本当です。再度、感謝します。 – Bruno

関連する問題