2016-04-17 34 views
1

私はlearnig PHP(趣味として)ですし、簡単なログインページを構築して練習したいと思っていました。セッション変数が転送されていません

私はフォームを持っている:PHPコードに

<form action="phpAction/checklogin.php" method="POST"> 
<p>Username:</p> 
<input type="text" name="username"> 
<p>Password:</p> 
<input type="password" name="password"> 
<br><br> 
<input type="submit" value="Submit"> 
<br><br> 
<a href="signup.php">You don't have an account yet?</a> 
</form> 

投稿:

<?php 

// Starts a MySQLi connection to the database 
include "../includes/mysqliConn.php"; 

// Starts a session to keep the user logged in 
session_start(); 

// Posts the username and password from the form and stores it into a session variable 

if (isset($_POST["username"]) && isset($_POST["password"])) { 
    $_SESSION["username"] = $_POST["username"]; 
    $_SESSION["password"] = $_POST["password"]; 
} else { 
    die("You cannot be here!"); 
} 
// Checks login 
$checklogin = 'SELECT * FROM users WHERE username = $_SESSION["username"] AND password = $_SESSION["password"]'; 
$result = $conn->query($checklogin); 
       if ($result->num_rows = 0){ 
        echo "<script language='javascript' type='text/javascript'>alert('Login and/or password wrong!');window.location.href='login.php';</script>"; 
        die(); 
       } else { 
        // Variable to other pages see that the user is logged in 
        $_SESSION["islogged"] = "true"; 
        // Redirects to the homepage 
        header("Location: ../index.php"); 
       } 

?> 

それは他のページは、ユーザーの情報をdiplayことができるようにtrueに "islogged" セッション変数を設定します。私はこれを持っているウェブサイトのヘッダーに

<?php 

     if ($_SESSION["islogged"] == "true") { 
      echo "<a href='#'>Panel</a>"; 
      echo "<a href='#'>Logout</a>"; 
     } else { 
     echo "<a href='login.php'>Login</a>"; 
     echo "<a href='#'>/</a>"; 
     echo "<a href='signup.php'>Sign Up</a>"; 
     } 

?> 

変数が「真」に設定され、ページが代わりにログインし、サインアップのため、リンクパネルおよびログアウトを表示しなければならない「islogged」ときもの。しかし、私はログインとサインアップを続けています。 セッション変数が "移送されていない"ようです。

何か助けていただければ幸いです。

PS:悪い英語のため申し訳ありません:P

おかげ

+0

1.変数*( '$ _SESSION [" username "]')*を一重引用符で囲むことはできません。二重引用符でなければなりません。 2. SQLインジェクション防止とPDO/Mysqliでの準備文を見てください。 – ash

+0

二重引用符を付けると500エラーが発生するので、一重引用符を使用しています –

+0

$ _SESSION ["islogged"をチェックする前に 'session_start'を呼び出していますか? ] '他のページで? –

答えて

1

私が知る限り、数字は' 'で囲む必要があります。これを試してみてください

$checklogin = "SELECT * FROM users WHERE username ='".$_SESSION['username']."' AND password ='".$_SESSION['password']."'"; 

私はこれがうまくいきたいと思います。

+0

ありがとうございます。それは魅力のように働いた:P –

+0

@Joãowelcome!それがあなたの問題を解決した場合、答えを受け入れることを忘れないでください。 – geeksal

0

$_SESSION変数を使用するには、最初のsession_start()を実行します。 「Webサイトのヘッダーに」とマークした例では、session_start()が最初に実行されていません。

http://php.net/manual/en/function.session-start.php

のsession_start()セッションを生成またはGETまたはPOST要求を介して渡されたセッションIDに基づいて、現在のを再開し、またはクッキーを介して渡されます。

関連する問題