Login Formular

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

  • Login Formular

    Hallo,

    ich bin neu hier und habe mal eine Frage. Ich bin noch php Anfänger, aber habe schon ein loginskript hinbekommen mit ner Mysql DB dahinter.

    Also zum problem. Ich habe im Grunde 2 Dateien. einmal ne html wo nur das Formular ist, und eine php Datei mit dem Code...
    Ich habe nun mit IF Anweisungen überprüft ob, PW eingegeben, Benutzer eingegeben, und obs auch zu dem eintrag in der DB passt.
    Funktioniert auch alles. Wenn man z.b. das PW nicht eingibt, erscheint unter dem Menü der Text, bitte PW eingeben.
    Da ich dsa jedes mal unter dem Menü haben wollte die Meldungen, habe ich jedesmal den kompletten html Code des Formulares,
    + den jeweiligen php code an die stelle der If anweisung kopiert.
    Nun die frage, kann man das nicht auch anders lösen. weil so habe ich 3mal den code fürs formular in der php datei stehen.
    Es funktioniert zwar, aber ist bestimmt nicht die sauberste lösung ?

    Bin für jeden rat dankbar
    Zuletzt geändert von flisch; 18.02.2006, 10:35.

  • #2
    naja wenn du prüfst ob die felder ausgefüllt sind kannst du ja die fehlermeldung in ne variable packen und diese unter dem formular ausgeben.
    ist die fehlervariable bzw. array leer ist alles ok und du kannst die abfrage auf die db losgelassen.
    MfG
    aim
    Lies mich jetzt!
    - OT-Tags-Liebhaber und BB-Code-Einrücker -

    Kommentar


    • #3
      jaja klar. hab z.b. $fehlermeldung=....
      und die wird unter dem html Code ausgeführt. Oder nochmal anders. Ich wollte halt, das immer die meldung unter dem Formular angezeigt wird,
      und bei erfolgreichem Login, man automatisch auf die seite mit dem menü kommt. deshalb habe ich das so umständlich gemacht und jedesmal den
      code vom formular da reingepackt. Und wenn die if bedingung zum erfolgreichen login erfüllt sit, habe ich den html code mit dem menü an die stelle
      gepackt und der wird angezeigt.

      Ich weiss halt nicht, wie man bei erfolgreichem login sagen kann, dass die seite geöffnet werden soll..
      Zuletzt geändert von flisch; 18.02.2006, 10:36.

      Kommentar


      • #4
        Wenn ich das jetzt richtig verstanden hab,
        willst du nicht immer nur in der Variable den Login oder das Menu anzeigen
        Wie wäre es wenn du bei erfolgreichem login nen cookie setzt und dann in abhängigkeit ob der gesetzt ist oder nicht entweder das login-template-file oder das menu-template-file anzeigst.

        Kommentar


        • #5
          Also mein login hab ich so gemacht:

          Die Datei in der das Formular ist, ruft sich beim Absenden des Formulars selbst auf.
          Überhalb vom html für das Formular steht der php Code zum Auswerten der Daten (username und pw). Wenn es einen Fehler gab, wird dieser in eine Variable gespeichert, und dann wieder weiter unten in den Formular als Fehler angezeigt.
          Wenn alle Daten richtig sind und derLogin erfolgreich war, starte ich ne Session und mach dann nen Header-Redirect auf die Seite, die bei erfolgreichen Login angezaeigt werden soll.

          <?php
          header("Location: http:/www.seite.de/datei.php");
          exit;
          ?>

          Kommentar


          • #6
            das mit header habe ich jetzt eingebunden. ich würde nur gerne die meldungen unter dem login angezeigt bekommen. bzw. kann ich auch die Stelle (spalte) angeben, wo die meldung erscheinen soll. ich habs mal geändert und er haut sie entweder drunter oder drüber

            Kommentar


            • #7
              hey,
              also wenn ich statt dem header befehl was ausgeben lasse mit echo funktioniert es. habe auch schon gesucht, und den header in php tags gesetzt, da ja code davor stehen darf, aber geht auch nicht.

              kann mir jemand helfen?

              PHP-Code:
              if(isset($_POST['anmelden']))
              {
                  if (
              $_POST['username'] == "")
                  {
                    echo 
              '<div class="fehlermeldung">Benutzername eingeben</div>'
                  }
                    
                  elseif (
              $_POST['passwort'] == "")
                  {    
                  echo 
              '<div class="fehlermeldung">Passwort eingeben</div>';
                  }
                  
              $sql "SELECT * FROM userdaten WHERE name = '".($_POST['username'])."' AND passwort = '".md5($_POST['passwort'])."' ";
                  
              $query mysql_query($sql) or die("Query nicht erfolgreich.");
                  
                  if(
              $row mysql_fetch_array($query))
                  {
                    
              $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
                    
              $_SESSION['user_name'] = $row['name'];
                    
              $_SESSION['user_id'] = $row['id'];
                    
              $_SESSION['user_email'] = $row['email'];
                 
                    
              header("Location: ausgabe1.php"); 
                    }
                    elseif (
              $_POST['username'] !="" && $_POST['passwort'] !="")
                    {
                    echo
              '<div class="fehlermeldung">Benutzername oder Passwort nicht korrekt</div>'
                    }
              }
              elseif(
              $_GET['action'] == "abmelden" && isset($_SESSION['user_id']))
              {
                    if(
              session_destroy())
                    {
                    unset(
              $_SESSION);
                    
              $nachricht '<div class="nachricht">Sie haben sich abgemeldet.</div>';
                    }
              }
              if(isset(
              $_SESSION['user_id']))
              {
              $login 'Sie sind angemeldet als '.$_SESSION['user_name'].'.<br /><a href="login.php?action=abmelden">abmelden</a>';

              Kommentar


              • #8
                Einfach die Fehlermeldung nicht mit echo ausgeben, sondern in Variablen speichern, und dann später an der passenden Stelle die Variable ausgeben.

                Kommentar


                • #9
                  morgen,

                  nee die ausgabe der fehlermeldungen funktioniert ja. nur der header befehl nicht. also ausgabe1.php wird nicht aufgerufen bei erfolgreichem login

                  Kommentar


                  • #10
                    Also wat gaaaanz grundsätzliches zum Thema
                    1. Sauber ist es beim header() absolute URL's zu verwenden. Es kann mit relative funzen, muss es aber gemäss RFC nicht !

                    2. Wenn du die Fkt header() zur Weiterleitung verwendest und noch mehr Code nach dem header() steht, dann musst du nach dem Aufruf der Fkt noch ein exit setzen, damit der Rest des Codes nicht doch durchgeackert wird
                    PHP-Code:
                    if(alles_ok){
                        
                    //Weiterleitung
                        
                    header('Location: http://www.deine_seite.tld/page.html');
                        exit;
                    }else{
                        
                    //dein restlicher Code

                    Funzt es jetzt ? Punkt 1 muss nicht unbedingt sein, die meisten Browser kommen auch mit relativen URL's zurecht. Aber das exit nach dem Header muss sein.

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      ne funzt leider nicht. hab die absolute URL eingetragen und auch mit exit; abgeschlossen. es bleibt einfach die login seite. keine fehlermeldung nichts. wie gesagt. nen echo befehl wird erfolgreich ausgeführt, also dürfte es an den if-schleifen nicht liegen oder?

                      Kommentar


                      • #12
                        Also dann noch ein
                        PHP-Code:
                        error_reporting(E_ALL); 
                        auf die erste Zeile aller beteiligten Scripts.
                        Wirft er nun Fehler ?

                        Gruss

                        tobi

                        p.s. poste auch mal noch den aktuellen Code der Weiterleitung und mach dich zum Thema mysql_fetch_array() und dessen Verwendung mal im Manual schlau
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          also das gibt er aus:
                          Notice: Undefined index: action in /homepages/42/d104861460/htdocs/test/test2.php on line 80


                          hier nochmal der komplette code

                          PHP-Code:
                          <?php
                          error_reporting
                          (E_ALL);

                          session_start();

                          if(!isset(
                          $_SESSION['user_ip'])){ $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR']; }
                          if(
                          $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
                          {
                          $fehlermeldung '<div class="fehlermeldung">Ihre IP geh&ouml;rt nicht zu der verwendeten Session.</div>';
                          session_destroy();
                          unset(
                          $_SESSION);
                          }
                          include(
                          'db.php');
                          echo
                          '
                              <html>
                              <head>
                              <title>login</title>
                              <link rel="stylesheet" href="style.css" type="text/css">
                              </head>
                              <body bgcolor="#CCCCCC" text="#000099" link="#000066">
                              <div align="center"><img src="logo.jpg" width="270" height="270"> </div>
                              <table width="23%" border="1" cellspacing="0" cellpadding="0" align="center" bordercolor="#000000">
                                <tr> 
                              <td align="center" bordercolor="#000000" bgcolor="#003366"><font face="Verdana, Arial, Helvetica, sans-serif" color="#000099" size="2"><b><font color="#CCCCCC">Anmeldung</font></b></font><font color="#CCCCCC"><br>
                              </font>
                              <form action="test2.php" method="post">
                              <font face="Verdana, Arial, Helvetica, sans-serif" size="2" color="#CCCCCC">
                              Username :<input type="text" name="username" size="20" class="input">
                              <br>
                              <br>
                              Passwort :<input type="password" name="passwort" size="20" maxlength="20" class="input">
                              <br>
                              </font><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><br>
                              <input type="submit" name="anmelden" value="anmelden" class="button">
                              </font> 
                              </form>
                              </td>
                              </tr>
                              </table>
                              <table width="23%" border="0" cellspacing="0" cellpadding="0" align="center" height="29">
                              <tr> 
                              <td> 
                              </td>
                              </tr>
                              </table>
                                </body>
                               </html>
                               '
                          ;

                          if(isset(
                          $_POST['anmelden']))
                          {
                              if (
                          $_POST['username'] == "")
                              {
                                echo 
                          '<div class="fehlermeldung">Benutzername eingeben</div>'
                              }
                                
                              elseif (
                          $_POST['passwort'] == "")
                              {    
                              echo 
                          '<div class="fehlermeldung">Passwort eingeben</div>';
                              }
                              
                          $sql "SELECT * FROM userdaten WHERE name = '".($_POST['username'])."' AND passwort = '".md5($_POST['passwort'])."' ";
                              
                          $query mysql_query($sql) or die("Query nicht erfolgreich.");
                              
                              if(
                          $row mysql_fetch_array($query))
                              {
                                
                          $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
                                
                          $_SESSION['user_name'] = $row['name'];
                                
                          $_SESSION['user_id'] = $row['id'];
                                
                          $_SESSION['user_email'] = $row['email'];
                             
                                
                          header('Location: [url]http://www.meineseite.de/test/ausgabe1.php[/url]');
                               exit; 

                                }
                                elseif (
                          $_POST['username'] !="" && $_POST['passwort'] !="")
                                {
                                echo
                          '<div class="fehlermeldung">Benutzername oder Passwort nicht korrekt</div>'
                                }
                          }
                          elseif(
                          $_GET['action'] == "abmelden" && isset($_SESSION['user_id']))
                          {
                                if(
                          session_destroy())
                                {
                                unset(
                          $_SESSION);
                                
                          $nachricht '<div class="nachricht">Sie haben sich abgemeldet.</div>';
                                }
                          }
                          if(isset(
                          $_SESSION['user_id']))
                          {
                          $login 'Sie sind angemeldet als '.$_SESSION['user_name'].'.<br /><a href="login.php?action=abmelden">abmelden</a>';
                          }
                          ?>

                          Kommentar


                          • #14
                            Also wenn ich mir diesen Code so ansehe, dann wundert es mich schon, dass header() keine Fehlermeldung provoziert.
                            Du gibst ja in jedem Falle mittels echo das Form aus. Du hast keine Bedingung die dies im Falle des abgesendeten Forms unterbinden würde.
                            Wenn jetzt also das Form geschickt wird, dann wird erst wieder das Form ausgegeben und ein Aufruf von header() müsste afaik in einem fatal Error enden. Da du bereits eine Ausgabe gemacht hast, kannst du nicht nochmals header() benutzen.
                            Aber wie gesagt in diesem Falle müsste es bei error_reporting(E_ALL) mit Garantie eine Meldung a la
                            Code:
                            Could not modify header information. Headers already sent at line blabla
                            geben.

                            Du machst mich echt

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              hab ich das error_reporting(E_ALL) richtig eingebunden?

                              ist das unklug so zu machen mit dem formular ?ich hatte den code erst jedesmal in der if bedingung stehen,
                              und er hat ihn jedesmal neu ausgegegeben, je nach falscher eingabe..

                              ich weiss auch nicht mehr
                              Zuletzt geändert von flisch; 18.02.2006, 10:37.

                              Kommentar

                              Lädt...
                              X