kostenloser Webspace werbefrei: lima-city


Login&Sessions

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    jacer

    Kostenloser Webspace von jacer

    jacer hat kostenlosen Webspace.

    Hallo!
    Hoffe ihr k?nnt mir mal wieder helfen:smile:
    Und zwar habe ich ein Problem mit meinem Login!
    Ich habe ein kleines Login-Script geschrieben und nun wollte ich die login.php includen. Das habe ich auch allerdings kommt dann folgende Fehlermeldung beim aufrufen:


    Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home/www/web11/html/xero/index.php:6) in /home/www/web11/html/xero/login.php on line 3

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/www/web11/html/xero/index.php:6) in /home/www/web11/html/xero/login.php on line 3


    Darunter wird das Login Formular angezeigt.

    Hier einmal der quelltext der login.php zur Veranschaulichung:


    <?

    session_start();
    include("sessions.inc.php");

    if(isset($_POST['login'])) {
    $id = check_user($_POST['nick'], $_POST['passwort']);
    if($id != false) {
    login($id);
    }
    else {
    echo 'Die eingegebenen Daten sind nicht korrekt!';
    }
    }

    else if(!logged_in()) {
    echo '<form method="post" action="login.php">';
    echo '<table width="100%">';
    echo '<tr><td>Nickname:</td><td><input name="nick" type="text"></td></tr>';
    echo '<tr><td>Passwort:</td><td><input name="passwort" type="password" id="passwort"></td></tr>';
    echo '<tr><td colspan="2"><input name="login" type="submit" id="login" value="Einloggen"></td>';
    echo '</table>';
    echo '</form>';
    }

    else {
    echo 'Sie haben sich erfolgreich eingeloggt!';
    }

    ?>


    Hoffe ihr findet das Problem. Ich n?mlich nicht:slant:

    mfg
    jacer

    EDIT: Nur nochmal als Hinweis. Der Fehler kommt nur beim includen der login.php und nicht wenn ich diese normal ?ffne!

    Beitrag ge?ndert am 25.01.2006 12:28 von jacer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Ich sch?tze mal das in der "sessions.inc.php" auch "session_start();" steht oder?

    Setz einfach nochmal

    ob_start();


    ganz an den Anfang.
  4. Hi Jens!

    was steht bei dir in der "sessions.inc.php" Datei?

    Du darfst befor du die Sessiondaten setzt keine Ausgaben haben, sonst kommt es zu dem Fehler den du hast.

    Mfg
    Marco
  5. Autor dieses Themas

    jacer

    Kostenloser Webspace von jacer

    jacer hat kostenlosen Webspace.

    Hier der Quellcode der sessions.inc.php


    <?

    function connect () {

    include("config.inc.php");

    }

    function check_user($nick, $passwort) {

    $sql = "SELECT `id` FROM `users` WHERE nick='" .$nick. "' AND passwort=MD5('" .$passwort. "') LIMIT 1";

    $result = mysql_query($sql) or DIE("Ein Verbindungsfehler mit der Datenbank ist aufgetreteten! Bitte kontaktieren sie beim h&auml;ufigeren Auftreten einen Webmaster/Admin!");

    if(mysql_num_rows($result)==1) {
    $user = mysql_fetch_assoc($result);
    return $user['id'];

    }

    else {
    return false;

    }

    }

    function login($id) {

    $sql = "UPDATE `users` SET session='" .session_id(). "' WHERE id='" .$id. "'";

    mysql_query($sql);

    }

    function logged_in() {

    $sql = "SELECT `id` FROM `users` WHERE session='" .session_id(). "' LIMIT 1";

    $result = mysql_query($sql);
    return (mysql_num_rows($result)==1);

    }

    function logout() {

    $sql = "UPDATE `users` SET session=NULL WHERE session='" .session_id()."'";

    mysql_query($sql);

    }

    connect();

    ?>
  6. Hi Jens,

    nimm einfach das session_start() raus, da du
    wahrscheinlich zweimal eine session gestartet hast.
    Denn mit include() bleibt ist die session aus der vorigen datei immer noch aktiv!

    Mfg kingalex
  7. Autor dieses Themas

    jacer

    Kostenloser Webspace von jacer

    jacer hat kostenlosen Webspace.

    Ich starte aber weder in der index.php noch irgendwo anders vorher eine session:slant:

    PS: Wieso "hi Jens" ??:biggrin:

    EDIT: Durch das entfernen von session_start() funktioniert es jetzt! Obwohl ich das nicht so ganz verstehe da ich ja sonst nirgendwo eine session starte:nosmile:

    Beitrag ge?ndert am 25.01.2006 12:51 von jacer
  8. sorry, ich meinte nat?rlich "hi jacer" ! :blah:

    so, jetzt wei? ich wo der fehler liegt!!!

    Der Fehler kommt daher Zustande, weil vor session_start() bereits eine Ausgabe (header) an den Browser gesendet wurde.

    im klartext: du hast in irgendeiner datei wo du
    include("login.php"); stehen hast vor diesem include
    eine ausgabe an den browser gesendet
    z.B: in html: <br><div>Hier der Fehler </div>
    oder in php: echo $string; //Hier der Fehler

    ABER: bevor man eine session startet darf keine ausgabe stehen und das include() ist nur eine einsetzung in die vorherige datei, geh?rt also zu dieser dazu!

    Abhilfe: Du musst das session_start() VOR dem ersten browser-ausgabebefehl in der vorherigen datei setzen, wenn du mit include() arbeitest!
    Alternative: Du nimmst kein include(), sondern einen
    hyperlink: <a href=\"login.php\">Login</a>
    oder einen
    formular post aufruf: <form method="POST" action="login.php">

    Mfg kingalex
  9. Autor dieses Themas

    jacer

    Kostenloser Webspace von jacer

    jacer hat kostenlosen Webspace.

    Ja vielen Dank das war das Problem!

    Nun habe ich aber erneut eine Schwierigkeit:mad:

    Ich habe jetzt mit dem session_start() auch das include der sessions.inc.php mit in die index.php gesetzt. Und zwar weil ich zB eine Hyperlink nur anzeigen will wenn jemand eingeloggt ist. Also pr?fe ich dann ja zun?chst mit


    if(logged_in()) { echo "HYPERLINK"; }


    ob jemand eingeloggt ist. Wenn ich dann aber die includete login.php ?ffne scheint er die sessions.inc.php nicht mehr anzunehmen, da er den Befehl check_user() mit folgender Fehlermeldung benennt:


    Fatal error: Call to undefined function: check_user() in /home/www/web11/html/xero/login.php on line 4


    Diese Zeile 4 der Fehlermeldung sieht folgenderma?en aus:


    $id = check_user($_POST['nick'], $_POST['passwort']);


    Den Zusammenhang erkennt ihr ja aus dem gesamten Quellcode der login.php in meinem ersten Post!
  10. poste doch mal bitte, wie du die includes verschachtelt hast!

    Das include("login.php") muss nat?rlich vor die Zeile
    if(logged_in()) { echo "HYPERLINK"; }




    Beitrag ge?ndert am 25.01.2006 15:29 von kingalex
  11. Autor dieses Themas

    jacer

    Kostenloser Webspace von jacer

    jacer hat kostenlosen Webspace.

    Ja das ist zwar ein weiterer Fehler (danke f?r den Hinweis) aber der l?st nicht dass von mir angesprochene Problem!:wink:

    Trotz dass ich die sessions.inc.php in der index.php includet habe und die login.php ebenfalls erkennt er dies nicht. Wenn ich mich also einloggen will erkennt er den Befehl check_user() nicht, welcher in der sessions.inc.php definiert wurde!

    EDIT:


    poste doch mal bitte, wie du die includes verschachtelt hast!

    Das include("login.php") muss nat?rlich vor die Zeile
    if(logged_in()) { echo "HYPERLINK"; }


    Warum sollte es dass? Dass ist doch v?llig egal. Wenn ?berhaupt musst das include("sessions.inc.php") vor das if(logged_in()) {} da ja in der sessions.inc.php die Befehle logged_in() etc definiert sind und nicht in der login.php!

    Beitrag ge?ndert am 25.01.2006 15:34 von jacer
  12. Autor dieses Themas

    jacer

    Kostenloser Webspace von jacer

    jacer hat kostenlosen Webspace.

    Bitte nicht als Spam ansehen wenn ich einen DoppelPost mache aber ich bin jetzt drauf gekommen woran das Problem liegt und ich wollte nur nochmal pushen

    Also ich habe meine Seite ja so aufgebaut:

    $seite = $_GET['index'];

    <a href="?index=login">Einloggen</a>

    if($seite == "login") { include("login.php"); }

    In der login.php wird das Formular mit einem input Feld abgeschickt welchs sich aber wieder extern ?ffnet beim draufklicken. So dachte ich mir dass dann das includ der session.inc.php nicht mehr wirksam ist in dem Bereich. Wie erstelle ich also eine if-Abfrage f?r ein inout Feld, wie ich es mit dem Link oben f?r den Login gemacht habe um das ganze mit GET zu ?bergeben?

    EDIT: Jo hat sich dann auch erledigt. Vielen Dank f?r eure Hilfe!

    Beitrag ge?ndert am 25.01.2006 17:15 von jacer
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!