PHP Logout Session geht nicht

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Hallo zusammen,
ich schreibe grade ein lizenzsystem in oop und beim login hakt es, die login session "name" löscht ihren wert irgendwie nicht oder mein sql befehl geht nicht.
Habe auf google keine lösung zu meiner sql Query gefunden. Habt ihr ein lösungsansatz für mich?

index.php
Code:
<form class="" action="login.php" method="POST"> 
      <h2>Admin Login / Partner Login</h2>
          <div class="form-group"> 
              <label>Beutzername</label>
              <input type="text" name="username" class="form-control">
          </div>
          <div class="form-group"> 
                  <label>Password</label>
                  <input type="password" name="password" class="form-control">
          </div> 
          <div class="form-group"> 
        <input type="submit" name="login" value="Anmelden" class="form-control">
          </div> 
  </form>
login.php das prepare überprüft die variable ob schadcode drin ist)
PHP:
<?php
session_start();
require_once 'autoload.php';
if ($login->isLoggedIn()) {
  header("Location: admin.php");
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (isset($_POST['login'])) {
        $username = $base->prepareData($_POST['username']);
        $password = $base->prepareData($_POST['password']);
        $checkData = $conn->runQuery("SELECT am.username, am.password, pr.username, pr.password FROM admin am JOIN partner pr WHERE (am.username = '$username' AND am.password = '$password') OR (pr.username = '$username' AND pr.password= '$password')");
        $checkDataResult = mysqli_fetch_object($checkData);
        $checkDataResultNumRow = count($checkDataResult);
        if ($checkDataResultNumRow >= 1) {
            $_SESSION['name'] =  $checkDataResult->username;
            header("Location: admin.php");
        }
        else {
            echo "Kein Zugriff";
        }
    }
}
?>
login klasse (ich glaube das stück reicht aus)
PHP:
  function isLoggedIn()
  {
    if (isset($_SESSION['name'])) {
      $username = Base::prepareData($_SESSION['name']);
      $this->checkLogin = DATABASE::runQuery("SELECT admin.username, partner.username FROM admin, partner WHERE admin.username = '$username' OR partner.username = '$username'");
      if (mysqli_num_rows($this->checkLogin) > 0) {
        return true;
      }
      else {
        return false;
      }
    }
  }
    function    logout(){
            unset($_SESSION['name']);
            $destroy = session_destroy();
            if($destroy){
                return true;
            }
    }
logout.php
PHP:
<?php
error_reporting(-1);
session_start();
require_once 'autoload.php';
if ($login->isLoggedIn()) {
$logout = $login->logout();
if($logout == true){
     header("Location: index.php");
}
else {
     die("Fehler");
}
}
?>
 
Prüf doch mal ob in SESSION überhaupt was kommt ;)
PHP:
<?php
printf('<pre>%s</pre>', print_r($_SESSION, true));
?>


Zudem musst Du session_destroy keiner Variable zuweisen.
Das kannst Du auch direkt machen :)

Das unset() benötigst Du eigentlich nicht, nur das session_destroy ^^
 
Danke für deine Antwort, in der Session kommt zwar ein wert an aber immer der wert aus der tabelle partner.
session_destroy habe ich einer variable zugeordnet weil ich prüfen wollte ob die session auch gelöscht wird.
Kann das sein das meine sql query falsch ist denn ich kenne mich nicht mit abfragen über mehrere tabellen aus
 
Ja deine SQL Anfrage ist komplett falsch :)

SQL:
SELECT a.username, p.username FROM admin a LEFT JOIN partner p ON(a.username = p.username) WHERE a.username = username OR p.username = username
 
Habe in phpmyadmin etwas gebastelt was dort funktioniert aber in php nicht :
PHP:
SELECT * FROM admin a LEFT JOIN partner p ON(a.username = p.username) WHERE a.username = '$username' AND a.password = '$password' OR p.username = '$username' AND p.password = '$password'
 
Warum ist die SQL Abfrage fehlerhaft?
Du musst natürlich "username" durch deine Variable ersetzen :)

SQL:
SELECT
a.username, a.password, p.username, p.password
FROM admin a
LEFT JOIN partner p
ON(a.username = p.username)
WHERE (a.username = '$username' AND a.password = '$password')
OR (p.username = '$username' AND p.password = '$password')

Die Variablen solltest du ersetzen wenn Du andere verwendest :)

[EDIT]:
Bitte überarbeite deinen Beitrag statt Doppel-Posting zubetreiben :)
 
Ok ich habe es jetzt so wie du es geschrieben hast gemacht aber ich kann mich trotzdem nicht anmelden wenn ich mich als admin anmelde scheint es zu stimmen werde aber nicht weitergeleitet wenn ich mich als partner anmelde kommt "kein zugriff".

login klasse
PHP:
  function isLoggedIn()
  {
    if (isset($_SESSION['name'])) {
      $username = Base::prepareData($_SESSION['name']);
      $this->checkLogin = DATABASE::runQuery("SELECT
  a.username, p.password
  FROM admin a
  LEFT JOIN partner p
  ON(a.username = p.username)
  WHERE (a.username = '$username' OR p.username = '$username')
");
      if (mysqli_num_rows($this->checkLogin) > 0) {
        return true;
      }
      else {
        return false;
      }
    }
  }
    function    logout(){
            session_unset();
            session_destroy();
                return true;
    }
login.php
PHP:
<?php
session_start();
require_once 'autoload.php';
if ($login->isLoggedIn()) {
  header("Location: admin.php");
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (isset($_POST['login'])) {
        $username = $base->prepareData($_POST['username']);
        $password = $base->prepareData($_POST['password']);
        $checkData = $conn->runQuery("SELECT
a.username, a.password, p.username, p.password
FROM admin a
LEFT JOIN partner p
ON(a.username = p.username)
WHERE (a.username = '$username' AND a.password = '$password')
OR (p.username = '$username' AND p.password = '$password')
");
        $checkDataResult = mysqli_fetch_object($checkData);
        $checkDataResultNumRow = count($checkDataResult);
        if ($checkDataResultNumRow > 0) {
            $_SESSION['name'] =  $checkDataResult->username;
            header("Location: admin.php");
        }
        else {
            echo "Kein Zugriff";
        }
    }
}
?>
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge

Zurück