• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

daten aus datenbank loeschen

Mad Dog

Mitglied
hey leute
habe ein problem mit meinem script und ich komme einfach nicht darauf, was da los ist.

zur erklaerung. es gibt eine tabelle mit id, username, password, sessionid und timestamp.
beim einloggen wird die sessionid und der timestamp in der tabelle gespeichert. (klappt alles)
beim ausloggen sollen beide wieder geloescht werden. hier klappt nur der sessionid loeschen teil!
dazu die scripts:

logout.php
PHP:
<?php
require_once '../../common.php';
if (isset($_COOKIE['PHPSESSID']))
{
    $_SESSION = array();
  setcookie('PHPSESSID', '', time()-42000, '/');

        if ('POST' == $_SERVER['REQUEST_METHOD'])
        {
                    $SessionID = $_COOKIE['PHPSESSID'];
                    $Database = new Database(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
                    if ($Database->checkSessionID($SessionID))
                    {
                        $Database->deleteTimestamp($SeesionID);
                        $Database->deleteSessionID($SessionID);
                        echo '
                            <?xml version="1.0" encoding="iso-8859-1"?>
                            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                                <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
                                <head>
                                          <title>New document</title>
                                         <meta http-equiv="refresh" content="5; URL=../../index.php">
                                    </head>
                                         <body>
                                sie wurden erfolgreich ausgeloggt!             
                                        </body>
                             </html>';
                    }
                    else
                    {
                        echo 'checkSessionID hat ne fehler festgestellt';
                    }

                }
                else
                {
                    echo 'schade!';
                }
                unset($SessionID, $Database);

        }
else
{
    echo 'you need to allow us to creat cookies';
}

?>
classDatabase.php
PHP:
<?php
class Database extends MySQLi
{    

public function __construct($Location = '', $Username = '', $Password = '', $DBname = '')
{
    parent::__construct($Location, $Username, $Password, $DBname);
}

public function insertTimestamp($Timestamp, $Username)
{
        if ($mysqli_stmt = parent::stmt_init())
        {
          $sql = 'UPDATE 
                        user
               SET
                            Timestamp = ?
               WHERE
                            Username = ?';
          $mysqli_stmt->prepare($sql);
            $mysqli_stmt->bind_param('ss', $Timestamp, $Username);
            $mysqli_stmt->execute();
            $mysqli_stmt->close();
        }  
}

public function deleteTimestamp($SessionID)
{
        if ($mysqli_stmt = parent::stmt_init())
        {
              $sql = 'UPDATE 
                        user
                   SET
                            Timestamp = 0
                   WHERE
                            SessionID = ?';
          $mysqli_stmt->prepare($sql);
            $mysqli_stmt->bind_param('s', $SessionID);
            $mysqli_stmt->execute();
            $mysqli_stmt->close();
        }  
}

public function insertSessionID($SessionID, $Username)
{
        if ($mysqli_stmt = parent::stmt_init())
        {
          $sql = 'UPDATE 
                        user
               SET
                            SessionID = ?
               WHERE
                            Username = ?';
          $mysqli_stmt->prepare($sql);
            $mysqli_stmt->bind_param('ss', $SessionID, $Username);
            $mysqli_stmt->execute();
            $mysqli_stmt->close();
        }  
}

public function deleteSessionID($SessionID)
{
        if ($mysqli_stmt = parent::stmt_init())
        {
              $sql = 'UPDATE 
                        user
                   SET
                            SessionID = 0
                   WHERE
                            SessionID = ?';
          $mysqli_stmt->prepare($sql);
            $mysqli_stmt->bind_param('s', $SessionID);
            $mysqli_stmt->execute();
            $mysqli_stmt->close();
        }  
}

public function getUsername($SessionID)
{
        if ($mysqli_stmt = parent::stmt_init())
        {
          $sql = 'SELECT 
                        Username
               FROM
                       user
               WHERE
                        SessionID = ?';
          $mysqli_stmt->prepare($sql);
            $mysqli_stmt->bind_param('s', $SessionID);
            $mysqli_stmt->execute();
            $mysqli_stmt->bind_result($result1);
            if ($mysqli_stmt->fetch())
            {            
                echo $result1;
            }
            else
            {
            echo 'errrrrror';
            }

        }
        $mysqli_stmt->close();     
}

public function checkSessionID($SessionID)
{
        if ($mysqli_stmt = parent::stmt_init())
        {
          $sql = 'SELECT 
                        SessionID
               FROM
                        user
               WHERE
                        SessionID = ?';
          $mysqli_stmt->prepare($sql);
            $mysqli_stmt->bind_param('s', $SessionID);
            $mysqli_stmt->execute();
            $mysqli_stmt->bind_result($result1);
            if ($mysqli_stmt->fetch())
            {            
                    if ($result1 == $SessionID)
                    {
                return TRUE;
                  }
              else
              {
                  return FALSE;
              }
            }
            else
            {
                return FALSE;
            }

        }
        $mysqli_stmt->close(); 
}

}

?>
es wird keine fehlermeldung ausgegeben. nur wenn ich die tabelle der datenbank ueberpruefe wurde der timestamp nicht geloescht....
koennt ihr mir helfen?

EDIT: eigentlich interessant sind (glaub ich) nur die funktonen der datenbank klasse deletesessionid und deletetimestamp.
meiner meinung nach sind sie komplett gleich, nur mit dem unterschied das deletesessionid funktioniert und die session id loescht und timestamp nicht.
ich habe sogar beiden den gleichen typ zugeordnet, um es zu testen (char). trotzdem hat es nicht geklappt.

okay problem geloest.
es war ein sehr dummer fehler von mir:

Code:
[COLOR=#000000][COLOR=#0000bb]$Database[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]deleteTimestamp[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$SeesionID[/COLOR][COLOR=#007700]);
[/COLOR][COLOR=#0000bb]$Database[/COLOR][COLOR=#007700]->[/COLOR][COLOR=#0000bb]deleteSessionID[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000bb]$SessionID[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]

man vergleiche die beiden klammern miteinander und frage sich wieso das loeschen der sessionid erfolgreich war und wieso das loeschen des timestamps nicht....
(ich sollte die farben der highlights in meinem editor aendern... fuer mich sahen die beiden klammern gleich aus.. erst hier ist es mir aufgefallen)
 
Zuletzt bearbeitet von einem Moderator:
musst du hier

PHP:
 $SessionID = $_COOKIE['PHPSESSID']; 
                    $Database = new Database(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME); 
                    if ($Database->checkSessionID($SessionID)) 
                    { 
                        $Database->deleteTimestamp($SeesionID); 
                        $Database->deleteSessionID($SessionID);

bei deletetimestamp nicht auch den timestamp eingeben und nicht wieder die sessionid?
 
ne muss sessionid sein.
timestamp veraendert sich jede sekunde und es koennte vorkommen das mehr als nur 1 timestamp geloescht wird.
und die sessionid kommt nur einmal vor und damit kann ich den timestamp von einem bestimmten loeschen
 
In solchen Fällen hilft es manchmal die error_reporting-Einstellung etwas rauf zu setzen. Auf diese Weise bekommt man eine Fehlermeldung ausgegeben, wenn eine Funktion versucht auf nicht deklarierte Variablen zuzugreifen. :)

Hier sitzt dein Fehler:
$Database->deleteTimestamp($SeesionID)
 
Zurück
Oben