kostenloser Webspace werbefrei: lima-city


Weiterleitung

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    eragon95

    eragon95 hat kostenlosen Webspace.

    Hi,
    ich möchte nachdem man sich erfolgreich eingeloggt hat, eine Weiterleitung mit PHP machen.
    Header("Location..."); funktioniert aber nicht, es muss ja möglichst oben sein und vor include und so.
    Wie macht man jetzt so eine Weiterleitung?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. t*****b

    Die Logik (PHP) von der Ausgabe (HTML) trennen. Am einfachsten wäre es ind em Fall, wenn du das PHP vor deinem HTML-Code schreibst.
  4. Autor dieses Themas

    eragon95

    eragon95 hat kostenlosen Webspace.

    Das geht aber schlecht.
    Die Weiterleitung soll ja nur nach erfolgreichem Login ausgeführt werden.
    Also iwas mit if wird schon noch davor sein.
    Außerdem wird noch mysql_connect und so includiert.
  5. <?
    if(Bedingung für eingeloggt)
    {
    header("Location: http://www.example.com/");
    }
    else
    {
    echo "Du musst dich erst einloggen oder so!";
    }
    ?>
    <html> .....


    Kapiert?

    Steht aber auch ganz gut hier beschrieben, was zu beachten ist:
    http://de2.php.net/header

    Beitrag geändert: 29.11.2008 21:04:49 von karpfen
  6. Autor dieses Themas

    eragon95

    eragon95 hat kostenlosen Webspace.

    So hab ich es eben ausprobiert:

    include "mysql.php";
    if($passwort = $passwort2){
    heaeder("Location: http://www.seite.de/");
    echo "Text";
    }
    else{
    Blabla
    }

    Hat aber nicht funktioniert, wahrscheinilich wegen include.
    Kann man das iwie umgehen?
  7. Was hat da nicht funktioniert, kam irgendne Fehlermeldung und wenn ja welche?
    Also manchmal muss man den Leuten hier echt alles aus der Nase ziehen.
    Aussagen wie "Geht net" helfen auch nicht weiter :lol:
  8. Autor dieses Themas

    eragon95

    eragon95 hat kostenlosen Webspace.

    Ich hab s jetzt mit JS gemacht ^^
    Öh, ich bin halt sparsam mit Buchstaben.
    Da stand sowas wie: Header always sent by oder sowas :biggrin:


    EDIT: Ich lad das kurz nochmal hoch um zu gucken, was für ne Fehlermeldung kam.


    Cannot modify header information - headers already sent by

    Beitrag geändert: 29.11.2008 21:23:54 von eragon95
  9. Und dann wäre der genaue Quellcode interessant.
    Die Fehlermeldung bedeutet eigentlich, dass du irgendwas vor dem Weiterleiten mit header(...) ausgegeben hast. Das darf nicht sein.
  10. Autor dieses Themas

    eragon95

    eragon95 hat kostenlosen Webspace.

    Ne, das hab ich nicht.
    Hier der ganze Quellcode
    <?php
    include "./inc/mysql.inc.php";
       
    $username = mysql_real_escape_string($_POST["username"]);
    $passwort = mysql_real_escape_string(md5($_POST["password"]));
    
    $abfrage = "SELECT id FROM user WHERE username = '$username'";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
       {
       $id = $row->id;
       }
    
    $abfrage = "SELECT username, passwort FROM user WHERE username LIKE '$username' LIMIT 1";
    $ergebnis = mysql_query($abfrage);
    $row = mysql_fetch_object($ergebnis);
    
    if($row->passwort == $passwort)
        {
        $_SESSION["username"] = $username;
        echo "
    	<div style=\"padding-left:2px;color: #030;background: #beffbe;border: 1px solid #0b0;width: 350px;\">
    	Login war erfolgreich
    	</div>
    	Du wirst weitergeleitet...<br>
    	Sollte die Weiterleitung nicht funktionieren, klicke bitte <a href=\"./account.html\">hier</a>
    	<script type =\"text/javascript\">
    <!--
    window.location.replace('./account.html');
    // -->
    </script>
    	";
        }
    else
        {
        echo "<div style=\"padding-left:2px;color: #030;background: #ef8181;border: 1px solid #440404;width: 350px;\">
    	Zugriff verweigert
    	</div>
    	Passwort oder Username ist falsch.<br><a href=\"login.html
    \">Zum Login</a><br><a href=\"anmelden.html\">Zur Anmeldung</a>"
    ;
        }
    
    ?>



    Da ist jetzt die Weiterleitung mit JS dabei.
    Das kommt eigt weg, dafür sollte Header kommen.
  11. Mal ehrlich, was bringt mir der Javascript-Code, wenn du das Dingens mit der PHP-Variante gelöst haben willst??????? Wenn dann schon der nicht funktionierende Code bitte.

    Bei mir geht das ohne Probleme ;)

    Guckst du hier:

    http://karpfen.lima-city.de/start.php

    Code:

    <?
    if(1==1)
    {
    header('Location: http://de2.php.net/header');
    }
    else
    {
    echo "Geht net!";
    }
    ?>


    Was wird genau durch die includierte Datei ausgegeben, kannst du diese mal posten? Falls sensible Daten dort vorhanden sind, kannst du sie ja unkenntlich machen ;)


    Beitrag geändert: 29.11.2008 22:02:39 von karpfen
  12. Okay, so geht es auch.
    Am Besten IMMER nach dem Auschlussverfahren vorgehn bei der Fehlersuche: kommentiere einzelne Zeilen weg und schaue, ob die Fehlermeldung immer noch erscheint. irgendwann weißt du, welche Zeile(n) etwas ausgeben.

    Im Notfall, oder wenn es gar nicht anders geht, nutze Output-Buffering.
    Das leitest du am Anfang der Seite mit der PHP-Funktion ob_start(); ein und beendest es am Ende der Seite mit ob_end_flush();.

    Dadurch erscheint dann die Fehlermeldung tatsächlich nicht mehr ;)



    Ich möchte nebenbei anmerken, dass man deine account.html auch direkt, ohne Login aufrufen könnte. Somit ist das Passwortsystem hinfällig. Arbeite lieber mit Sessions oder einem HTTP-Auth. Des weiteren solltest du das Passwort nicht plain sondern als Hash (z.B. md5) in der Datenbank speichern.




    gruß
    ferdinand24
  13. Kann sein, dass ich was falsch verstanden hab, aber das ist denke ich bei dir ursprünglich auch schon dabei gewesen.
    In Zeile 21 hast du ein echo drin. Sobald du mit einem echo einen Text ausgegeben hast, kannst du keinen header mehr schicken, sprich nicht mehr damit weiterleiten.
    Die Weiterleitung muss auf jeden Fall vor so einer Ausgabe kommen.

    Die Ausgabe ist ja eigentlich eh unnötig und wenn nur in dem Fall sinnvoll, wenn nicht weitergeleitet wird. D.h. sie kann ja auch genausogut danach ausgegeben werden, stimmst du mir da soweit zu?

    Also: ERST Header, dann Ausgaben.

    Falls das jetzt nicht bzw nicht nur das Problem war, wäres interessant zu wissen, ob in der mysql.inc.php evtl so eine "böse" Ausgabe stattfindet. Aber davon geh ich mal nicht aus.
  14. Autor dieses Themas

    eragon95

    eragon95 hat kostenlosen Webspace.

    In mysql.inc.php sind die Daten drin um eine Verbindung zu DB aufzubauen.

    @ferdinand24
    Werd ich das nächste mal versuchen ^^
    account.html hab ich noch gar nicht erstellt.
    Ich glaub ich weiß schon, wie ich das erst nach dem Login sichtbar mache.

    Ist das Passwort nicht als md5 in der DB gespeichert?
    Ich hab
    $passwort = md5($passwort);
    Und dann insert into ...


    EDIT: Eben hat s einmal geklappt.
    Jetzt geht s nicht mehr -.-
    Also den Code den ich gepostet hab, wird nochmals includiert.
    Also über dem header() sind noch eine Menge weitere echos und includes.


    Beitrag geändert: 30.11.2008 11:41:32 von eragon95
  15. also ich habs einfach mit
    echo("<meta http-equiv=refresh content='2; url='deine url'>");
    gelöst
    is zwar ned die sauberste art, aber tut seinen dienst ;)

    Grüße khc
  16. Ja, das kenn ich auch, aber ich hab auch gehört, dass Suchmaschinen iwie damit Probleme damit haben sollen.
    Muss das außerdem nicht in den Head?
    Inzwischen können das bestimmt einige Browser auch so verstehen.

    Beitrag geändert: 30.11.2008 15:42:54 von seth93
  17. 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!