2016-06-11 7 views
-1

Ich habe eine Website in PHP, die mySQL verwendet, um Konten zu erstellen und ermöglichen Benutzern, sich an- und abzumelden. Alles funktioniert gut. Wenn sich der Benutzer anmeldet, ändert er seinen ENUM-Wert "loggedin" auf 1, was bedeutet, dass er eingeloggt ist. Aber wenn er sich abmeldet, ändert er sich nicht zu 0. Ich habe den Logout-Link zu einem Logout-PHP und das ist der Code von das logout php.PHP-Sitzung wird nicht aktualisiert, wenn der Benutzer loggt

<?php // Create connection include_once 'credentials.php'; 

$conn = new mysqli($db_hostname, $db_username, $db_password, $db_database); // Check connection if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 

}else{ 

session_start(); 

session_destroy(); $sql = ("UPDATE users SET loggedin = '0' WHERE id = '$userid'"); 
    mysqli_query($conn, $sql); header("Location: ../index.php"); exit; } 

?> 

aber es scheint nicht zu funktionieren. Wenn sich der Benutzer beim ersten Mal anmeldet, wird der eingeloggte Status in mySQL geändert, aber auf der Website wird er nicht angezeigt, wenn der Benutzer sich abmeldet und dann wieder einloggt.

+1

Ich denke, Ihre '$ userid'-Variable fehlt in Ihrem Logout-Skript –

+0

Dieser Ansatz wird nicht Spaß langfristig sein. Einige Benutzer schließen die Seite, ohne sich abzumelden, und Sie haben 1s, wo Sie 0s haben sollten. – ceejayoz

+1

** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und [' bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Abfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

-1

Sie müssen Ihre Aktualisierungsabfrage in mysql-Anwendung (zB: phpmyadmin) überprüfen, um sicherzustellen, dass die Abfrage gut läuft. Dann versuchen, () dieser Linie $sql = ("UPDATE users SET loggedin = '0' WHERE id = '$userid'"); so zu entfernen $sql = "UPDATE users SET loggedin = '0' WHERE id = '$userid'"; Für die letzte, stellen Sie sicher, dass der Pfad der Header-Position richtig ist. Hoffentlich wird es Erfolg sein :)

+0

Die Klammern sind in Ordnung. Unnötig, aber gut. – ceejayoz

+1

@ceejayoz Die Parens sehen aus wie eine Art Cargo- Kult-Programmierung. – tadman

Verwandte Themen