PHP - MySQL: Problem mit if-Konstrukt

Apon

Mitglied
Hallo Leute,
ich habe mit PHP eine Login-Datei (Login.php) erstellt, mit der man auf ein Formular (Formula.php) zugreifen können soll. Das Formular soll zu guterletzt Datensätze an eine MySQL-Datenbank (Tabelle: Berichte) senden. Wird das Formular geöffnet, soll mit einem if-Konstruktor geprüft werden, ob der User sich vorher eingeloggt hat. Dies soll mit der Funktion logged_in() unter Hilfe einer session_id geschehn, die wiederum in einer MySQL-Datenbank (Tabelle: user) zu finden ist.

Das Problem:
Hat sich der User eingeloggt und will nun zu dem Formular, prüft das Formular zwar ob der user sich eingeloggt hat, zeigt allerdings nicht das Formular. Sondern verweist darauf, dass sich der User nicht eingeloggt hat, trotz das die Anmeldedaten korrekt waren.

Hier die Codes:

function.php
PHP:
<?
function connect()
  {
    $host =' ';
    $user =' ';
    $pwd =' ';
    $db =' ';
 
    $con= mysql_connect($host, $user, $pwd) or die(mysql_error()); 
    mysql_select_db($db, $con) or die(mysql_error());
  }
 
function check_user($name, $pass)
  {
    $sql="SELECT UserId FROM users WHERE UserName='".$name."' AND UserPass=MD5('".$pass."') LIMIT 1";
    $result= mysql_query($sql) or die(mysql_error());
    if ( mysql_num_rows($result)==1)
      {
        $user=mysql_fetch_assoc($result);
        return $user['UserId'];
      }
    else
    return false;
  }
 
function login($userid)
  {
    $sql="UPDATE users SET UserSession='".session_id()."' WHERE UserId=".$userid;
   mysql_query($sql);
  }
 
function logged_in()
  {
    $sql="SELECT UserId FROM users WHERE UserSession='".session_id()."' LIMIT 1";
    $result= mysql_query($sql);
    return ( mysql_num_rows($result)==1);
  }
 
...
 
connect();
?>

login.php
PHP:
<?
session_start();
include 'function.php';
 
if (isset($_POST['login']))
  {
    $userid=check_user($_POST['username'], $_POST['userpass']);
    if ($userid!=false)
      {
        login($userid);
        echo 'Status: verbunden';
        echo '<form action="formular.php" method="post"> <input name="weiter" type="submit" value="weiter" Style="width:60px"> </form>';
      }
    else
    echo 'Status: nicht verbunden - Ihre Anmeldedaten waren nicht korrekt!';
  }
 
if (!logged_in())
  {
    ... // Eingabe wiederholen
  }
?>

formular.php
PHP:
<?
session_start();
include 'function.php';
 
echo 'Status: ';
if (!logged_in())
  {
    echo 'nicht eingeloggt';
    echo '<form action="login.php" method="post"><input name="login" type="submit value="Login"></form>';
  }
else
  {
    ... // hier folgt dann das Formular
  }
?>

liegt hier ein Denkfehler/Logikfehler vor?

Danke schonmal im Voraus.

MfG Apon
 
Hi!

Keine Ahnung was du bis jetzt getestet hast, aber ich würds Stück für Stück "debuggen".
Also ein Anfang wäre:

Wenn du dich einloggst, schreibt er die Session_id in die Tabelle der DB
Ist die Spalte der Tabelle gut gewählt, nicht das in der Tabelle user nur die halbe Session:id steht...

Dann:
Wenn du die funktion logged_in() aufrufst, wie sieht das Ergebnis in der Funktion aus? Findet er in der SQL Abfrage schon nichts (wird ja wohl so sein) und warum findet er nichts?

Ich glaube in der Logik ist nichts falsch, zumindest ist es mir beim drüberschauen nicht aufgefallen. Bei solchen Sachen immer Stück für Stück prüfen. Also wenn etwas nicht in der Datenbank gefunden werden kann, gibt es das überhaupt in der Datenbank? Wenn es das in der Datenbank gibt, Frage ich beim logged_in nach der richtigen Session:id() ? (vorher/nachher vergleich durch Testausgaben von session_id()) usw usf...

Das meine ersten ideen. Wenn du beim "debuggen" was gefunden hast oder seltsame Werte hast, auch die Ergebnisse hier posten, damit man sich weiter gedanken machen kann.

Gruss
 
@Mairhofer,
danke schonmal für deine Antwort.

Ja, hast recht. Ich hätte schon noch erläutern können was ich bisher schon getestet habe.

Also: die session_id wird beim einloggen in die Tabelle user eingetragen und ändert sich dann dementsprechend auch bei jedem neuen Login.

Hier noch der Code mit dem ich die Tabelle erzeugt habe:
PHP:
<?
...
mysql_query("CREATE TABLE users ( UserID int(11) PRIMARY KEY auto_increment, UserName varchar(30) NOT NULL default '', UserPass varchar(32) NOT NULL default '', UserSession varchar(32), UNIQUE KEY NickName (UserName) )");
?>

Was mich eigentlich verwundert ist, dass es bei mir auf localhost funktioniert, online allerdings nicht.

MfG Apon
 
Moin zusammen!

Also ich hab mir jetzt mal die session_id in login.php und in formular.php anzeigen lassen. Und sie stimmen überein. Es wird demnach wohl die richtige session_id in formular.php abgefragt. Aber dennoch verweist er auf nicht eingeloggt.

Kann mir da jemand weiterhelfen.

MfG Apon
 
Habe die die ganze Sache erstmal wie folgt glöst:

in der login.php habe ich den Button mit dem Link zu eingabe.php die SID mitgegeben.

Code:
PHP:
  echo '<form action="eingabe.php?'.SID.'" method="post"> <input name="weiter" type="submit" value="weiter" Style="width:60px"> </form>';

Und jetzt wird auch das Formular angezeigt.
Nun habe ich aber die SESSID in der Adressleiste des Browsers stehen:

.../eingabe.php?PHPSESSID=XXXXXX...

Ist das ein Sicherheitsrisiko?
Wenn ja, wie kann ich das unterbinden?

Anmerkung:
Ich habe vor das die ganze Sache über Secure Server Line laufen zu lassen.

MfG Apon
 
Zurück