2016-05-22 8 views
1

resultIdが存在するかどうかをチェックしているため、ログインページにリダイレクトできません。私がSESSION変数について理解していることから、この情報は私のページに渡されるべきですが、そうではありません。今すぐログインした後、ページはホームページにリダイレクトされますが、セッション内の値がresultIdで見つからないため、ログイン画面に戻ります。SESSION変数が渡されない

マイログインページ:

<?php 
    session_start(); 
    // Define variables and set to empty values 
    $usernameErr = $passwordErr = $loginErr = ""; 
    $loginName = $loginPass = ""; 

    if ($_SERVER["REQUEST_METHOD"] == "POST") { 
     $valid = True; 

     if (empty($_POST['loginName'])) { 
      $usernameErr = "Please enter your username"; 
      $valid = False; 
     } else { 
      $loginName = test_input($_POST['loginName']); 
      $_SESSION['loginName'] = $loginName; 
     } 

     if (empty($_POST['loginPass'])) { 
      $passwordErr = "Please enter your password"; 
      $valid = False; 
     } else { 
      $loginPass = test_input($_POST['loginPass']); 
      $_SESSION['loginPass'] = $loginPass; 
     } 

     // If valid connect to database 
     if ($valid) { 
      $username = "root"; 
      $password = ""; 
      $servername = ""; 

      try { 
       $pdo = new PDO("mysql:host=$servername; dbname=capstonedb", $username, $password); 
       // Set the PDO error mode to exception 
       $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      } catch (PDOException $e) {echo "Connection failed: " . $e->getMessage();} 

      // Select username and password from database 
      // and compare with user input. 
      $sql_login = "SELECT id FROM login 
         WHERE username = '$_SESSION[loginName]' 
         AND password = '$_SESSION[loginPass]'"; 
      $result = $pdo->query($sql_login); 
      $resultId = $result->fetch(); 
      $_SESSION['resultId'] = $result->fetch();   

      if ($resultId['id'] != null) { 
       // Login successful 
       // Redirect to home.php 
       header('location: home.php'); 
      } else { 
       $loginErr = "Incorrect login/password"; 
      } 

      // Close the connection 
      session_destroy(); 
      $pdo = null; 
     } 
    } 

    // Function to sanitize data 
    function test_input($data) { 
     $data = trim($data); 
     $data = stripslashes($data); 
     $data = htmlspecialchars($data); 
     return $data; 
    } 


?> 

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
     <meta name="viewport" content="width=device-width, initial-scale=1"> 
     <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 
     <meta name="description" content=""> 
     <meta name="author" content=""> 
     <link rel="icon" href="../../favicon.ico"> 
     <title>Childcare Facilities</title> 
     <!-- Bootstrap core CSS --> 
     <link href="css/bootstrap.min.css" rel="stylesheet"> 
     <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 
     <!--[if lt IE 9]> 
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> 
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
     <![endif]--> 
     <link href="mystyles.css" rel="stylesheet"> 
     <style> 
      .error { 
       color: red; 
      } 
     </style> 
    </head> 


    <body> 
     <div class="jumbotron" style="margin-bottom:100px"> 
      <div class="container"> 
       <img src="Mountain.jpg" width="138px" height="138px" alt="logo" style="float:right" class="main-logo"> 
      <h1 style="color: white" style="float:clear">Smileside Childcare Facilities</h1> 
      </div> 
     </div> 

     <div class="col-md-4"></div> 
     <div class="col-md-4"> 
      <div class="panel panel-default" style="margin-bottom:50px;"> 
       <div class="panel-heading" style="background-color: #9ad3de; text-align:center;"> 
        <h3><strong>Login</strong></h3> 
        <span class="error"><strong><?php echo $loginErr ?></strong></span> 
       </div> 
       <div class="panel-body"> 
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post"> 
         <div class="form-group"> 
          <label for="loginName" class="col-sm-3 control-label">Username: </label> 
          <div class="col-sm-8"> 
           <input class="form-control" type="text" name="loginName" /> 
           <span class="error">* <?php echo $usernameErr; ?></span> 
          </div> 
         </div><br /><br /> 
         <div class="form-group"> 
          <label for="loginPass" class="col-sm-3 control-label">Password: </label> 
          <div class="col-sm-8"> 
           <input class="form-control" type="password" name="loginPass" /> 
           <span class="error">* <?php echo $passwordErr; ?></span> 
          </div> 
         </div> 
         <br /> 
         <br /> 
         <input type="submit" class="btn btn-primary pull-right" value="Log In" /> 
        </form> 
       </div> 
      </div> 
     </div> 

     <div class="navbar navbar-default navbar-fixed-bottom"> 
      <div class="container"> 
       <p class="navbar-text pull-left">© 2016 - Built By Michal Patriak 
       </p> 
      </div> 
     </div> 


     <!-- Bootstrap core JavaScript 
     ================================================== --> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
     <script src="js/bootstrap.min.js"></script> 
    </body> 
</html> 

マイホームページ、PHP(それがこの問題を引き起こして一部のみです):

<?php 
    session_start(); 
    if(empty($_SESSION['resultId'])) {  
     header("Location: index.php"); // Redirect to login page if not logged in 
    } 
?> 
+0

を試してみてください。 – JesusTheHun

+0

いいえ、このプロジェクトの簡単なパスワードですが、ヘッドアップに感謝します。 – slickset

+0

あなたはvar_dump($ _ SESSION); ? – JesusTheHun

答えて

0

チェックこのコード 代わりの

$_SESSION['resultId'] = $result->fetch(); 

それ

012あなたは、セッションかどうかを確認する必要があり

が存在し、その後

if(!isset($_SESSION)){ 
    session_start(); 
} 
if(!isset($_SESSION['resultId'])){ 
    header("Location: index.php"); // Redirect to login page 
} 
+0

このコードはもともとそのように設定されていましたが、SESSION変数が値を受け取っていないことを認識したとき、フェッチから直接引き出すことを考えました。 – slickset

+0

@MichalPatriak私はいくつかの変更を加えて確認してください。 –

+0

これを行い、$ resultId = $ result-> fetch(PDO :: FETCH_ASSOC)をチェックすることができます。 –

0

セッションを開始するあなたのSQLクエリにそれを適用し、その後変数にセッションを保存する必要があり、この

if (session_status() !== PHP_SESSION_ACTIVE) 
    { 
     session_start(); 
    } 


if(!isset($_SESSION['resultId'])){ 
    header("Location: index.php"); // Redirect to login page 
} 
0

を試してみてください。一重引用符( ')エラーを減らすことができます。

$uname=$_SESSION['loginName']; 
    $pw=$_SESSION['loginPass']; 

    $sql_login = "SELECT `id` FROM `login` WHERE `username` = '$uname' AND `password` = '$pw'"; 
    $result = $pdo->query($sql_login); 
    $resultId = $result->fetch(); 

それは他にどこ無使用であると思います、あなたが平文でパスワードを左この:)

関連する問題