2016-04-17 6 views
1

Ich lerne PHP (als Hobby) und wollte eine einfache Anmeldeseite zum Üben erstellen.Sitzungsvariablen werden nicht transportiert

Ich habe ein Formular:

<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> 

Posting an den PHP-Code:

<?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"); 
       } 

?> 

Es setzt die Session-Variable "islogged" auf true, so dass andere Seiten können Benutzer-Informationen Diplay.

In der Kopfzeile der Webseite habe ich dies:

<?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>"; 
     } 

?> 

Wenn die Variable „islogged“ auf „true“, sollte die Seite, um den Links-Panel und Logout angezeigt werden, anstelle der Anmeldung und Anmelden Einsen. Aber ich bekomme immer wieder Login und Anmeldung. Es scheint, dass die Sitzungsvariablen nicht "transportiert" werden.

Jede Art von Hilfe wird geschätzt.

PS: Sorry für schlechtes Englisch: P

Dank

+0

1. Sie können keine Variablen setzen * ('$ _SESSION [" username "]') * innerhalb einfacher Anführungszeichen muss es doppelte Anführungszeichen sein. 2. Sie sollten SQL Injection Prevention und vorbereitete Anweisungen mit PDO/Mysqli betrachten – ash

+0

Ich verwende einfache Anführungszeichen, denn wenn ich doppelte Anführungszeichen habe, bekomme ich eine 500 Error –

+0

Sind Sie Aufruf von 'session_start' vor der Überprüfung' $ _SESSION ["islogged" ] 'auf anderen Seiten? –

Antwort

1

Soweit ich etwas anderes weiß, müssen Nummern in einem ' ' eingeschlossen sein. Versuchen Sie es einfach

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

Ich hoffe, das funktioniert.

+0

Vielen Dank. Es funktionierte wie ein Zauber: P –

+0

@ João willkommen! Vergiss nicht, die Antwort zu akzeptieren, wenn es dein Problem gelöst hat. – geeksal

0

$_SESSION Variablen zu verwenden, laufen session_start() zuerst. In dem Beispiel, das Sie als "in der Kopfzeile der Website" markiert haben, führen Sie zuerst nicht session_start().

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

session_start() erzeugt eine Session oder setzt den aktuellen basierend auf einem Sitzungskennung über einen GET oder POST-Anfrage übergeben oder über ein Cookie übergeben.

Verwandte Themen