user auf verschiedene seiten lenken nach login?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • user auf verschiedene seiten lenken nach login?

    Hallo und guten Morgen,

    bin ziemlich neu dabei mit php und mysql und brauche einen Denkanstoß.
    Ich habe das super Tutorial Login System von Andreas Zimane
    eingebaut und es läuft alles wunderbar.
    Als nächstes habe ich 3 neue Seiten erstellt und
    in diese die session_start funktion sowie eine umleitung
    auf die login seite eingefügt per header location.
    Klappt alles, wenn man nicht eingeloggt ist, kann
    man die neu angelegten Seiten auch nicht
    aufrufen, so soll es ja auch sein.

    ab hier komme ich nicht mehr weiter,
    folgendes möchte ich erreichen:

    das login system soll verschiedene user direkt
    nach dem einloggen auch auf unterschiedliche Seiten lenken.

    Also user a soll nach dem einloggen auf seite a,
    user b auf seite b umgeleitet werden, usw.

    user a soll die seiten von user b auch nicht sehen dürfen.

    Zur Zeit kann ich zwar beliebig viele User anlegen
    und mich mit denen auch einloggen, nur lande ich eben
    immer auf der gleichen Startseite, jetzt weiß ich nicht mehr weiter...

    ist das realisierbar über eine weitere zeile in der mysql tabelle,
    also eine direkte Weiterleitung jeweils abhängig von dem usernamen?

    würde mich sehr über einen ansatz oder auch suchbegriff freuen,
    ich finde dazu den Einstieg nicht, da mir auch nicht klar ist
    wonach ich jetzt eigentlich suchen müßte.

    so sieht zur Zeit die Login-Seite aus, die mysql hat die 3 Zeilen id, user, password.

    Grüße Margoux



    PHP-Code:
    <?php
    session_start
    ();
    require(
    "live_werbemittel/connect.inc.php");
    ?>

    <div id="col3">
    <?php if(!isset($_POST['submit'])) { ?>
    <form action="<?php $PHP_SELF ?>" method="post">
    <table width="400" bgcolor="#000000" border="0"
     cellpadding="5" cellspacing="1" align="center">
    <tr>
    <td bgcolor="#e7e7e7" align="center" colspan="2">
    <b>Bitte erst anmelden</b>
    </td>
    </tr>
    <tr>
    <td width="170" bgcolor="#e7e7e7">Benutzername</td>
    <td width="230" bgcolor="#ffffff"><input type="text"
     name="username" size="20" class="input"<?php
     
    if($_POST['username'] != "" )
     {echo 
    ' value="'.$_POST['username'].'"';} ?>></td>
    </tr>
    <tr>
    <td width="170" bgcolor="#e7e7e7">Passwort</td>
    <td width="230" bgcolor="#ffffff">
    <input type="password" name="password" size="20"
     class="input"></td>
    </tr>
    <tr>
    <td bgcolor="#e7e7e7" align="center" colspan="2">
    <input type="submit" name="submit"
     value="Anmelden" class="button">
    </td>
    </tr>
    </table>
    </form>
    <?php
     
    }elseif(!$_POST['username'] || $_POST['username'] == "") {
       echo 
    '<p align="center">Einen Benutzernamen brauchen
     wir schon ;-)<br><br><a href="/003_kontakt.php">Zurück</a></p>'
    ;
     }elseif(!
    $_POST['password'] || $_POST['password'] == "") {
       echo 
    '<form action="/003_kontakt.php" method="post">';
       echo 
    '<p align="center">Ein Passwort brauchen wir schon ;-)<br>
    <br>'
    ;
       echo 
    '<input type="hidden" name="username" value="'.$_POST['username'].'">';
       echo 
    '<input type="submit" name="zurueck" value="Zurück">';
       echo 
    '</p>';
       echo 
    '</form>';
     }else{
       
    $password md5($password);
       
    $query = @mysql_query("SELECT user, pass FROM
     users WHERE user = '"
    .$_POST['username']."'") or die('Select ist fehlgeschlagen!');
       
    $result = @mysql_fetch_array($query)
     or die(
    '<p align="center">Sorry, aber dieser
     Benutzername existiert nicht!<br><a href="/003_kontakt.php">Zurück</a></p>'
    );
       if(
    $password != $result['pass']){
         echo 
    '<form action="/003_kontakt.php" method="post">';
         echo 
    '<p align="center">Sorry, aber dieses Passwort ist falsch!<br><br>';
         echo 
    '<input type="hidden" name="username" value="'.$_POST['username'].'">';
         echo 
    '<input type="submit" name="zurueck" value="Zurück"></p>';
         echo 
    '</form>';
         die;
       }else{
         
    $user $result['user'];
         
    session_register('user');
         echo 
    '<p align="center">LogIn erfolgreich! :-)<br>
    <br><a href="live_werbemittel/sichere_seite.php">Weiter</a></p>'
    ;
       }
      }
    ?>

  • #2
    Du musst die User-Datenbanktabelle um eine Spalte erweitern, in der die URL für jeden User gespeichert wird.
    Nach erfolgreichem Login leitest du dann nicht stur auf live_werbemittel/sichere_seite.php weiter, sondern eben auf die URL aus der DB.

    Kommentar


    • #3
      Re: user auf verschiedene seiten lenken nach login?

      Original geschrieben von margoux
      user a soll die seiten von user b auch nicht sehen dürfen.
      Das kannst du wahrscheinlich nicht über die Login-Seite prüfen, sondern in jeder einzelnen Seite selber. Da überprüfst du halt nicht nur, ob der Benutzer eingeloggt ist, sonden nachher auch noch, ob der Benutzer für die Seite berechtigt ist. Diese Prüfung würde ich dann allerdings in eine externe Funktion auslagern.

      PS
      session_register() ist eigentlich nicht mehr ganz aktuell, verwende besser $_SESSION
      Gruss
      H2O

      Kommentar


      • #4
        Hallo ihr 2,

        erstmal besten Dank für die Tipps, wobei ich die userweiterleitung
        jetzt erstmal anders gelöst habe und zu meinem Erstaunen
        funktioniert das auch tatsächlich, ist aber sicher nicht optimal gelöst.

        Stand der Dinge:
        die Einstiegsseite mit dem Kundenlogin ist die 003_kontakt.php

        nachdem ein User sich eingeloggt hat öffnet
        sich nochmals die 003_kontakt.php mit der Bestätigung
        "Sie sind eingeloggt".

        darunter befindet sich ein weiter Link
        "zur Werbemittelvorschau",
        dieser Link führt auf sichere_seite.php.

        Nun habe ich in sichere_seite die auth.php eingefügt,
        Codes folgen gleich,

        und in die auth.php trage ich dann jeweils pro User
        nachfolgenden Code ein, Umleitung dann per header location....

        Klappt soweit hervorragend, user a kommt automatisch auf Seite a

        und User b auf Seite b, immer abhängig vom Login-Namen.

        das heißt bei korrektem Login wird die Anzeige von sichere_seite.php
        übersprungen mit der Umleitung header Location.

        Wenn sich ein User einloggt dem noch kein Vorschaubereich
        zur Verfügung steht, zeigt sichere_seite.php die Info an
        " Ihr Vorschaubereich ist noch nicht eingerichtet.
        Das soll auch so sein.

        Soweit so gut, bin ja schon ganz stolz, nur leider meilenweit
        von der Idee entfernt, die Ziel-Url aus der Datenbank zu ziehen,
        abhängig vom Usernamen, aus der Tabelle mit dem Feld "user".

        Meine Fragen:

        kann ich das so belassen mit den Einträgen in der auth.php
        oder wird das ganze bei sagen wir mal 30 Usern immer
        langsamer von der Abfrage her?

        habt ihr vielleicht eine Beispielseite oder Tutorial
        (ich suche seit 3 Nächten),
        wo ich mir die Userumleitung per mysql ansehen könnte?
        Ich habe zwar eine weitere Spalte angelegt mit namen "zielurl"
        nur leider überhaupt keine Ahnung was ich da nun reinschreiben soll
        und welche Abfrage ich dazu in der auth.php starten müßte?


        hier jetzt mal die sichere_seite.php und die auth.php

        sichere_seite.php

        PHP-Code:
        <?php
         session_start
        ();
         if(!
        session_is_registered('user') || $_SESSION['user'] == "")
         {
          
        header("Location: http://www.domain.de/003_kontakt.php]");
           die;
         }
         
         require(
        "auth.php");
         
        ?>
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
        <html>
        <head>
           <title>Sichere Seite</title>
         </html>


        auth.php

        PHP-Code:
        <?php
            
        if(!session_is_registered('user') || $_SESSION['user'] == "peter"){
        header("Location: http://www.domain.de/
        live_werbemittel/kunde_abc/abc_01.php"
        );
        exit;
        }
            
        if(!
        session_is_registered('user') || $_SESSION['user'] == "kalli"){
        header("Location: http://www.domain.de/
        live_werbemittel/kunde_xyz/xyz_01.php"
        );
        exit;
        }
        ?>

        der Eintrag in den Landingpages.... abc_01.php sieht immer wie folgt aus:

        PHP-Code:
        <?php
        session_start
        ();
        if(!
        session_is_registered('user') || $_SESSION['user'] == "") {
        header("Location: http://www.domain.de/003_kontakt.php");
        die;
          }
          require(
        "../connect.inc.php");
          
        ?>
        Würde mich sehr über weiteren Input freuen...

        an der Änderung:

        session_register() ist eigentlich nicht mehr ganz aktuell, verwende besser $_SESSION
        arbeite ich noch, beim Versuch dies zu ändern gab es eine Fehlermeldung,
        da ich die vergessen habe, teste ich das erstmal weiter,
        hab sicher irgendwelche Zeichen davor vergessen.

        grüße Margoux

        Kommentar


        • #5
          Original geschrieben von margoux
          Soweit so gut, bin ja schon ganz stolz, nur leider meilenweit
          von der Idee entfernt, die Ziel-Url aus der Datenbank zu ziehen,
          abhängig vom Usernamen, aus der Tabelle mit dem Feld "user".
          ja und warum? was ist so schwer, während des logins eine dritte spalte abzufragen?
          SELECT user, pass, site FROM users WHERE ...

          wenn login ok, dann die seite in die session schreiben:
          $_SESSION['site'] = $result['site'];

          so, das tat auch garnicht weh, oder?

          Original geschrieben von margoux
          kann ich das so belassen mit den Einträgen in der auth.php
          oder wird das ganze bei sagen wir mal 30 Usern immer
          langsamer von der Abfrage her?
          wenn dich das nicht stört und du es auch nicht redundant findest kannst du es von mir aus so lassen

          du könntest jetzt allerdings auch einfach die weiterleitung zu 'http://www.example.org/'.$_SESSION['site'] benutzen.
          übrigens ist die abfrage
          if(!session_is_registered('user') || $_SESSION['user'] == "peter")
          auch ziemlicher quatsch. denn das heißt soviel wie, wenn 'user' nicht in der session oder user 'peter' in der session, dann weiterleitung.
          dass session_is_registered() veraltet ist, wurde dir schon gesagt - benutze isset($_SESSION['user'])

          auf der entsprechenden kundenseite müsstest du jetzt noch überprüfen, ob $_SESSION['site'] zu der aktuell aufgerufenen seite passt. dabei ist sicherlich $_SERVER['PHP_SELF'] hilfreich.

          Kommentar


          • #6
            Hallo 3DMax,
            if (! isset($_SESSION['user']) || $_SESSION['user'] == "")
            habe ich jetzt auf den betreffenden Seiten erfolgreich geändert,
            da war vorher eine Klammer zuviel.

            Allerdings steht auf der 003_kontakt.php (die Login-Seite) der Eintrag

            session_register...
            PHP-Code:
            else{
                 
            $user $result['user'];
                 
            session_register('user');
                 echo 
            '<p align="center">LogIn erfolgreich! :-)<br>
            <br><a href="live_werbemittel/sichere_seite.php">Weiter</a></p>'
            ;
               } 
            diesen habe ich auch erst geändert, kamen aber Fehlermeldungen,
            ich gehe mal davon aus, das der Eintrag auch so dort hingehört?

            --------------------------------------------------------------------

            Das der Eintrag "peter" in der auth.php nachstehend Quatsch ist,
            habe ich mir mittlerweile auch zusammengelesen.

            Aber auch auf die Gefahr hin, das Du einen Schreikrampf bekommst,
            woher soll der Server denn wissen, wen er wohin leiten soll?
            Also ich habe in der auth.php den Eintrag "peter" rausgenommen, das sieht dann so aus:
            PHP-Code:
            if (! isset($_SESSION['user']) || $_SESSION['user'] == ""){ 
            statt vorher:
            PHP-Code:
            if (! isset($_SESSION['user']) || $_SESSION['user'] == "peter"){ 
            dann passiert aber folgendes:

            einloggen erfolgt richtig, danach wird sichere_seite.php angezeigt
            mit meinem Text, "Ihre Vorschau ist noch nicht eingerichtet", das wars.

            Setze ich "peter" wieder ein, wird er sofort nach erfolgreichem einloggen
            auf seinen Bereich geleitet, ebenso klappt das auch mit weiteren
            Usern, jeder landet auf seiner Seite und kann die anderen Seiten,
            die nicht zu seinem Bereich gehören auch nicht über die Browserzeile
            aufrufen, dann erfolgt die Umleitung auf die Login-Seite.

            Von der Logik ist mir zwar klar was Du meinst, nur sagen wir mal,
            es erfolgt ja die richtige Reaktion auf die Eingabe "peter". Was nun?
            kann es damit zu tun haben, das die auth.php in sichere_seite.php eingebunden wird?
            die auth.php ist ja nicht in der ersten Seite, also der Login-Seite
            003_kontakt.php eingebunden?

            An der eigentlichen Abfrage (site über Datenbank abfragen und user
            in seinen Bereich weiterleiten) tüftel ich noch,

            ich les da erstmal ein paar Sachen zu, bevor ich jetzt irgendwo
            was rauskopiere und melde mich in einigen Tagen nochmal dazu.

            Grüße Margoux

            Kommentar


            • #7
              Original geschrieben von margoux
              diesen habe ich auch erst geändert, kamen aber Fehlermeldungen,
              ich gehe mal davon aus, das der Eintrag auch so dort hingehört?
              richtig müsste es so aussehen:
              PHP-Code:
              $_SESSION['user'] = $result['user']; 
              Original geschrieben von margoux
              Aber auch auf die Gefahr hin, das Du einen Schreikrampf bekommst,
              woher soll der Server denn wissen, wen er wohin leiten soll?
              ich bin jetzt eher sprachlos.
              wolltest du nicht die persönliche kundenseite aus der datenbank auslesen


              ansonsten sind mir deine weiteren ausführungen zu konfus. ehrlichgesagt habe ich den eindruck, du weißt garnicht so richtig was du da tust.
              naja, ich wünsche dir noch viel erfolg beim tüfteln.

              Kommentar


              • #8
                vielen dank, hab ich geändert, das funktioniert schon mal:
                PHP-Code:
                $_SESSION['user'] = $result['user']; 
                so konfus ist das gar nicht, so wie das loginsystem zur Zeit läuft,
                funktioniert es ja korrekt.
                Worauf ich aber rausmöchte ist:
                ich habe in der datenbanktabelle "users" eine weitere Spalte angelegt
                mit dem Namen "site" und dort die komplette Ziel-URL http://www.......de
                reingeschrieben.
                Erstens weiß ich nicht ob man das überhaupt so machen kann
                und zweitens habe ich keine Ahnung wie ich die Abfrage
                PHP-Code:
                $abfrage "SELECT user, pass, site FROM users WHERE 
                mit der
                PHP-Code:
                $_SESSION['site'] = $result['site']; 
                zusammenbringe.
                Mir ist auch nicht klar was hinter WHERE stehen muß um die URL aus der
                Datenbank abzufragen? bzw. welche Anweisung leitet denn die
                Weiterleitung dann ein? sorry, aber ich bin erst ein paar Tage dabei.
                Jedenfalls möchte ich diese komplette Abfrage dann in die sichere_seite.php per
                PHP-Code:
                require("auth.php"); 
                einbinden und
                dadurch soll die Weiterleitung auf die geschützten Bereiche stattfinden.
                Das geht doch jetzt auch, nur eben nicht über die Datenbank.
                Ich bin wirklich für jeden Anfängertipp dankbar.
                Grüße Margoux

                Kommentar


                • #9
                  Original geschrieben von margoux
                  so konfus ist das gar nicht, so wie das loginsystem zur Zeit läuft,
                  funktioniert es ja korrekt.
                  sagen wir so, es funktioniert zufällig so wie gewünscht. aber bevor du weitermachst, solltest du dir ersteinmal einige grundlagen aneignen.

                  PHP-Code:
                  if(!isset($_SESSION['user']) || $_SESSION['user'] == "peter")
                   {
                    
                  header("Location:http://www.domain.de/live_werbemittel/kunde_abc/abc_01.php");
                    exit;
                   } 
                  PHP-Code:
                  if(isset($_SESSION['user']) && $_SESSION['user'] == "peter")
                   {
                    
                  header("Location:http://www.domain.de/live_werbemittel/kunde_abc/abc_01.php");
                    exit;
                   } 
                  was bedeutet "!", "||" und "&&" ?
                  wann ist jeweils der wahrheitswert des gesamten ausdrucks wahr? welche bedingungen müssen dabei erfüllt sein und wieviele?

                  Kommentar


                  • #10
                    was bedeutet "!", "||" und "&&" ?
                    ja, danke für den Hinweis, ich lese mich jetzt erstmal durch das
                    php manual durch und probiere einiges aus.
                    Mit "mal eben kurz was ändern" geht es anscheinend wirklich nicht,
                    sehe ich ja ein.
                    Danke nochmal für Deine Zeit, arbeiten kann ich ja so schon mal mit
                    dem Login und wenn ich was brauchbares zustande gebracht habe,
                    setze ich eine kurze Info in diesen Thread.

                    grüße margoux

                    Kommentar

                    Lädt...
                    X