Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 20 von 21

Thema: Session Login Script

  1. #1

    Session Login Script

    Ich brauche mal wieder hilfe
    Diesmal mit Erklärung
    Also ich bin dabei ein session login script für mein clan cms zu machen.
    in der login datei ist irgendwo ein fehler.ich glaube es hat was mit mysql_fetch_assoc zu tun.aber ich hab keine ahnung wie ich die sonst als assoziativen array machen kann.
    @dadie:mach dich nicht wieder über mich lustig!!!
    achja beinahe den code vergessen:
    PHP-Code:
    <?php
         
    include("connect.inc.php");
         include(
    "logdata.php");
         
    $userdata="SELECT * FROM member";
         
    $result=mysql_query($userdata);
         
    $row=mysql_fetch_assoc($result);
        
         if (
    $_SERVER['REQUEST_METHOD'] == 'POST') {
          
    session_start();

          
    $username $_POST['username'];
          
    $passwort $_POST['passwort'];

          
    $hostname $_SERVER['HTTP_HOST'];
          
    $path dirname($_SERVER['PHP_SELF']);

          
    // Benutzername und Passwort werden überprüft
          
    if ($username == '$row[name]' && $passwort == '$row[pass]') {
           
    $_SESSION['angemeldet'] = true;

           
    // Weiterleitung zur geschützten Startseite
           
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
            if (
    php_sapi_name() == 'cgi') {
             
    header('Status: 303 See Other');
             }
            else {
             
    header('HTTP/1.1 303 See Other');
             }
            }

           
    header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
           exit;
           }
          }
    ?>

  2. #2
    Bei deinem jetztigen Script wird nur ein User überprüfst, weil du mit "SELECT * FROM member" zwar alle Benutzerdaten auswählst, aber nur einen von ihnen mit mysql_fetch_assoc() herausgreifst. Die Funktion mysql_fetch_assoc() gib immer nur eines von den Ergebnissen zurück. Wenn du also alle Benutzer überprüfen willst, musst du das ganze zB in eine while()-Schleife packen zB so:
    PHP-Code:
    while($row mysql_fetch_assoc($result)) {
      
    // Überprüfen der Benutzerdaten

    Dein ganze Code müsste also etwa so aussehen (ungetestet):
    PHP-Code:
    <?php
         
    include("connect.inc.php");
         include(
    "logdata.php");
         
    $userdata="SELECT * FROM member";
         
    $result=mysql_query($userdata);
      
         if (
    $_SERVER['REQUEST_METHOD'] == 'POST') {
          
    session_start();

          
    $username $_POST['username'];
          
    $passwort $_POST['passwort'];

          
    $hostname $_SERVER['HTTP_HOST'];
          
    $path dirname($_SERVER['PHP_SELF']);

          
    // Benutzername und Passwort werden überprüft
          
    $korrekt false;
          while(
    $row=mysql_fetch_assoc($result))
            if (
    $username == '$row[name]' && $passwort == '$row[pass]')
              
    $korrekt true;

          if (
    $korrekt) {
           
    $_SESSION['angemeldet'] = true;

           
    // Weiterleitung zur geschützten Startseite
           
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
            if (
    php_sapi_name() == 'cgi') {
             
    header('Status: 303 See Other');
             }
            else {
             
    header('HTTP/1.1 303 See Other');
             }
            }

           
    header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
           exit;
           }
          }
    ?>

  3. #3
    thx ich dachte mir schon mit einer while-schleife aber wusste nicht genau wie und wo ich die hin machen sollte aber jetzt weis ichs

  4. #4
    Zitat Zitat von Milchbox
    thx ich dachte mir schon mit einer while-schleife aber wusste nicht genau wie und wo ich die hin machen sollte aber jetzt weis ichs

    Naja es gng aber auch hir einfacher (und besser ^^)

    Undzwar kann man es über SQl Lösen

    Ich würde das Ganze dann so lösen

    PHP-Code:
    <?php
         
    include("connect.inc.php");
         include(
    "logdata.php");
         
    $userdata="SELECT * FROM `member` WHERE `user` = '$username' AND `pass` = '$passwort'";

        
         if (
    $_SERVER['REQUEST_METHOD'] == 'POST') {
          
    session_start();

          
    $username $_POST['username'];
          
    $passwort $_POST['passwort'];

          
    $hostname $_SERVER['HTTP_HOST'];
          
    $path dirname($_SERVER['PHP_SELF']);

           
    $result=mysql_query($userdata);
           

          
    // Benutzername und Passwort werden überprüft
          
    if (@mysql_num_rows($result) == "1") {
           
    $_SESSION['angemeldet'] = true;

           
    // Weiterleitung zur geschützten Startseite
           
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
            if (
    php_sapi_name() == 'cgi') {
             
    header('Status: 303 See Other');
             }
            else {
             
    header('HTTP/1.1 303 See Other');
             }
            }

           
    header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
           exit;
           }
          }
    ?>
    Dadurch erspart man sich Starke Server Probs wenn man z.B. 900 User hat kann die Whil schleiff schonmal 10 sekunden dauern ^^,

  5. #5
    Hier die Seite und hier der quelltext von der login.php :
    PHP-Code:
    <?php
         
    include("connect.inc.php");
         
    $userdata="SELECT * FROM `member` WHERE `user` = '$username' AND `pass` = '$passwort'";

        
         if (
    $_SERVER['REQUEST_METHOD'] == 'POST') {
          
    session_start();

          
    $username $_POST['username'];
          
    $passwort $_POST['passwort'];

          
    $hostname $_SERVER['HTTP_HOST'];
          
    $path dirname($_SERVER['PHP_SELF']);

           
    $result=mysql_query($userdata);
           

          
    // Benutzername und Passwort werden überprüft
          
    if (@mysql_num_rows($result) == "1") {
           
    $_SESSION['angemeldet'] = true;

           
    // Weiterleitung zur geschützten Startseite
           
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
            if (
    php_sapi_name() == 'cgi') {
             
    header('Status: 303 See Other');
             }
            else {
             
    header('HTTP/1.1 303 See Other');
             }
            }

           
    header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
           exit;
           }
          }
    ?> 
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title>Test</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
    <form action="login.php" method="post">
    Username: <input type="text" name="name" /><br />
    Passwort: <input type="password" name="pass" /><br />
    <input type="submit" value="Anmelden" />
    </form>
    </body>
    </html>
    Der name und pass sind test

    Geändert von Milchbox (17.06.2005 um 18:55 Uhr)

  6. #6
    Zitat Zitat von Milchbox
    beides klappt nicht.
    o.O nicht mal die Whil schleiffe.

    Evtl. sind die Taben / Spalten daten falsch , naja auf anhieb erkenne ich keinen fehler
    auser die tatsache das , das passwort und der username nie in einer sassion geschreiben wird ^^ aber evtl. hast du es später gemacht oder du hast nicht den ganzen code hier gepostet.

    Naja beschriebe mal geht nicht sagt er einen error oder siht er einen als Offline an ?

    Edit:

    Die Spalten/Taben Namen sind woll falsch zumindest nehme ich das an und hoffe irgentwie das , da der fehler liegt sonst ^^, weiss ich keine hilfe ^^,

    Geändert von dadie (17.06.2005 um 19:16 Uhr)

  7. #7
    muss der passworrt input auch in der datenbank angegeben werden oder normal als char?

    Hier die member tabelle:
    Feld Typ Attribute Null Standard Extra Aktion
    id int(11) Nein auto_increment
    name varchar(25) Nein
    pass varchar(25) Nein

    Geändert von Milchbox (17.06.2005 um 19:40 Uhr)

  8. #8
    Zitat Zitat von Milchbox
    muss der passworrt input auch in der datenbank angegeben werden oder normal als char?

    Hier die member tabelle:
    Feld Typ Attribute Null Standard Extra Aktion
    id int(11) Nein auto_increment
    name varchar(25) Nein
    pass varchar(25) Nein
    1,Bei der id kannst du ihm auch 255 geben dann hält das teil

    9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
    user Speichern ^^

    2,Anscheinent heisst die Spalte name und bei dir oben (weil ich den fehler machte -.-)
    user

  9. #9
    die spalte hab ich umgeändert aber was soll das mit den 9en ???
    klappt immer noch nicht!keine umleitung.
    also die login.php soll falls der name und das pass true ist auf index.php umleiten.
    ich poste mal alle dateien vom script:

    login.php:

    PHP-Code:
    <?php
         
    include("connect.inc.php");
         
    $userdata="SELECT * FROM `member` WHERE `name` = '$username' AND `pass` = '$passwort'";

        
         if (
    $_SERVER['REQUEST_METHOD'] == 'POST') {
          
    session_start();

          
    $username $_POST['username'];
          
    $passwort $_POST['passwort'];

          
    $hostname $_SERVER['HTTP_HOST'];
          
    $path dirname($_SERVER['PHP_SELF']);

           
    $result=mysql_query($userdata);
           

          
    // Benutzername und Passwort werden überprüft
          
    if (@mysql_num_rows($result) == "1") {
           
    $_SESSION['angemeldet'] = true;

           
    // Weiterleitung zur geschützten Startseite
           
    if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
            if (
    php_sapi_name() == 'cgi') {
             
    header('Status: 303 See Other');
             }
            else {
             
    header('HTTP/1.1 303 See Other');
             }
            }

           
    header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
           exit;
           }
          }
    ?>
    auth.php:
    PHP-Code:
    <?php
         session_start
    ();

         
    $hostname $_SERVER['HTTP_HOST'];
         
    $path dirname($_SERVER['PHP_SELF']);

         if (!isset(
    $_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
          
    header('Location: http://'.$hostname.($path == '/' '' $path).'/login.php');
          exit;
          }
    ?>
    logout.php
    PHP-Code:
    <?php
         session_start
    ();
         
    session_destroy();

         
    $hostname $_SERVER['HTTP_HOST'];
         
    $path dirname($_SERVER['PHP_SELF']);

         
    header('Location: http://'.$hostname.($path == '/' '' $path).'/login.php');
    ?>

    Geändert von Milchbox (18.06.2005 um 10:42 Uhr)

  10. #10
    Ich frage mich, warum du so einen Mist schreibst:
    PHP-Code:
    if(@mysql_num_rows($result) == "1"
    Der Rückgabewert von mysql_num_rows() ist kein String sondern eine Zahl!
    1 =! "1" - daher wird diese Bedingung immer falsch sein...

  11. #11
    was fragst du mich das ich wuste das aber dadie hats geschrieben.
    und wie solls richtig sein.

    Geändert von Milchbox (18.06.2005 um 16:45 Uhr)

  12. #12
    Zitat Zitat von Manni_the_Dark
    Ich frage mich, warum du so einen Mist schreibst:
    PHP-Code:
    if(@mysql_num_rows($result) == "1"
    Der Rückgabewert von mysql_num_rows() ist kein String sondern eine Zahl!
    1 =! "1" - daher wird diese Bedingung immer falsch sein...

    Jetzt mal ganz erlich Warum zur Hölle laberst du so einen Müll ?

    Folgender code

    PHP-Code:
    <?php

    $array 
    = array();

    if(@
    count($arrary) == "0")
    {
    echo 
    "geht doch !!!" ;
    }

    ?>


    $array = array( 1, 1, 1, 1, 1);

    if(@count($arrary = "0"))
    {
    echot "geht doch !!!"
    }
    Würde nach dir so aussehn :

    Code:
    $array = array( 1, 1, 1, 1, 1); if(@count($arrary = "0")) { echot "geht doch !!!" }
    Komsich nur das er so aussiht

    Code:
    geht doch !!! $array = array( 1, 1, 1, 1, 1); if(@count($arrary = "0")) { echot "geht doch !!!" }

  13. #13
    und wie soll die login.php datei jetzt aussehen???

  14. #14
    Das ganze kommt darauf an ob man == oder === benutzt. Hier sieht man den Unterschied.

  15. #15
    ich will nur wissen wie ich ein login script machen kann.ist das so schwer???

  16. #16

  17. #17
    thx @ all außer dadie (war ein witz lol )

  18. #18
    Zitat Zitat von Milchbox
    thx @ all außer dadie (war ein witz lol )
    Gut erkannt, dass dadie ein Witz ist.

  19. #19
    aber den letzte abschnitt kapier ich nicht:
    Zitat Zitat
    ### index.php ###

    PHP-Code:
    <?PHP
    session_start
    ();

    # Wenn die Variable $login registriert ist,...
    if( session_is_registered("login") ) {
    ?>
    Deine HTML Seite...
    <?
    } else {
    echo("Sie sind nicht eingeloggt!!");
    }
    ?>


    Ich konnte das jetzt nicht testen, aber ich denke als Beispiel reicht es allemal.
    muss ich die in jede datei rein stecken die ich schützen will?
    und muss ich die als aller erstes schreiben oder was?

    also ich versteh das so:
    falls man eingeloggt ist sieht man die seite wo steht Deine HTML Seite... oder???

    Geändert von Milchbox (18.06.2005 um 18:23 Uhr)

  20. #20
    Das muss in jede Datei rein, die du schützen willst.
    Der Code überprüft, ob die Session login existiert (die wird beim erfolgreichen Einloggen angelegt), und falls das nicht der Fall ist (man also nicht richtig eingeloggt ist), wird man darauf aufmerksam gemacht, dass man sich einloggen soll.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •