Problem mit grafischem Login

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

  • Problem mit grafischem Login

    Hi.


    Ich habe 2 Probleme mit nem grafischen Login, an den ich mich mal rangetraut habe:

    Und zwar das erste (das größere von beiden):
    Ich kann die Loginseite, indem der grafische Login mit verwendet wird nur
    im IE aufrufen, in allen anderen Browsern (Opera etc, Netscape nicht getestet) funktioniert das ding garnicht, bzw wird nicht angezeigt.

    Problem Nr.2: Wenn der Code oder ein anderes Feld beim login falsch
    eingegeben wurde soll die Grafik mit dem Code neu angezeigt werden, aber halt mit dem neuen Code. Das Prob hierbei ist, dass zwar der Code
    weiter generiert wird, aber die alte Grafik immernoch stehenbleibt. Somit bekommt man immer nen falschen Code vorgesetzt. Ich weiß, dass man
    seiten per JS mit location.reload(); refreshen kann, aber wie stelle ich das
    an, wenn ich das nur bei ner Fehleingabe haben will?


    Habt ihr ne Idee was da verkehrt läuft?


    Hier nun der Code dazu (ungekürzt, da ich ned weiß was ich da hätte
    rauskürzen sollen ^^):

    PHP-Code:
    <?php
    // generierter Code mit Codeeingabe nach Formularsubmit verglichen 

    if(isset($_REQUEST["login"])) { 
        if(
    $_REQUEST["code"] == $_REQUEST["glogin"]) { 
            
    $g 1
        } else { 
            
    $g 0
        } 


    // Code + Codegrafik generiert und gespeichert 

    if(!isset($_REQUEST["login"])) { 
        if(
    file_exists("glogin.png")) { unlink("glogin.png"); } 
        
    header ("Content-type: image/png"); 
        
    $im = @imagecreatefromjpeg("glblank.jpg"
             or die (
    "Kann keinen neuen GD-Bild-Stream erzeugen"); 
        
    $farbe imagecolorallocate($im,222,222,222); 
        
    $z1 rand(09); 
        
    $z2 rand(09); 
        
    $z3 rand(09); 
        
    $z4 rand(09); 
        
    imagechar($im585$z1$farbe); 
        
    imagechar($im5195$z2$farbe); 
        
    imagechar($im5305$z3$farbe); 
        
    imagechar($im5415$z4$farbe); 
        
    imagepng($im"glogin.png"); 
        
    imagedestroy($im); 
        
    $code "$z1"."$z2"."$z3"."$z4"

    ?> 

    .
    .
    <input type='hidden' name='code' value='<?php if(!isset($_REQUEST["login"])) echo $code?>'> 
    <td><img border='0' src='glogin.png' width='60' height='22'></td>
    <input type='submit' name='login' value='Einloggen'> 
    .
    .

    <?php 
    if(isset($_REQUEST["login"])) { 

    // nach erfolgreichem Login Session gestartet + Sessiovariablen registrieren 

        
    header("location: login.php"); 
        if(
    $_REQUEST["user"] != "" && $_REQUEST["pw"] != "") { 
            include(
    "connect.php"); 
            
    $sql "SELECT id,user,pw,level FROM user WHERE user='".$_REQUEST["user"]."'";
            
    $sql .= "AND pw = PASSWORD('".$_REQUEST["pw"]."')"
            
    $result mysql_query($sql$db) or die(mysql_error($db)); 
            if(
    mysql_num_rows($result) != 0) { 
                
    $row mysql_fetch_array($result); 
                @
    session_start(); 
                
    $_SESSION["id"] = $row["id"]; 
                
    $_SESSION["user"] = $row["user"]; 
                
    $_SESSION["level"] = $row["level"]; 
                if(
    getenv("HTTP_CLIENT_IP")) { 
                    
    $_SESSION["client_ip"] = getenv("HTTP_CLIENT_IP"); 
                } elseif(
    getenv("HTTP_X_FORWARDED_FOR")) { 
                    
    $_SESSION["client_ip"] = getenv("HTTP_X_FORWARDED_FOR"); 
                } else { 
                    
    $_SESSION["client_ip"] = getenv("REMOTE_ADDR"); 
                } 
                echo 
    "erfolgreich eingelogt<br>"
            } else { 
                echo 
    "Login fehlgeschlagen<br>"
            } 
        } else { 
            echo 
    "Bitte fülle alle nötigen Felder aus<br>"
        } 


    // Codeeingabe auswerten 

    if(isset($g)) { 
        if(
    $g == 1) { 
            echo 
    "Code übereinstimmend"
        } elseif(
    $g == 0) { 
            echo 
    "Code nicht übereinstimmend"
        } else { 
            echo 
    "Fehler bei Codeverarbeitung"
        } 

    ?>

    Hab das mal soweit auskommentiert, hoffe es reicht.

    Zwecks der Codeübergabe hab ich mich schonmal schlau gemacht (steht ja auch hier im Forum was). So wie der atm übergeben wird ist das rel. unsicher, denn der kann im Quelltext nachgelesen werden. Glaube anders ging das mit Zwischenspeichern in ner DB oder so.


    Bedanke mich schonmal für die Hilfe


    Gruß Dark
    Zuletzt geändert von DarkdragoN09; 12.08.2004, 21:16.

  • #2
    UMBRECHEN!!!

    Kommentar


    • #3
      nur zur info. der beitrag wird von niemanden gelesen werden!
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #4
        du hast mehr als ein problem:

        - session_start() muss vor jeder ausgabe stehen
        - ein image im html-fluss zu generieren funktioniert nicht ... => bild.php im img-tag aufrufen
        - deine bildcode-vergleichs-aktion ist sinnfrei, wenn's im hidden-field steht
        - ... to be continued

        essen ist fertig
        Kissolino.com

        Kommentar


        • #5
          Du brauchst eben einen größeren Bildschirm, um das zu lesen, mein Bildschirm muss nur 9x so groß sein, aber die Mühe mach ich mir gerne..

          (Es war schon eine Leistung zum "Antworten" Button zu scrollen.. )


          PS: Ich habe mir die Smilies verkniffen, da ich keine Lust habe dort hin zu scrollen..
          PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

          Kommentar


          • #6
            So habe mal soweit editiert, hoffe die Herrschaften sind nun zufrieden ^^.

            Original geschrieben von Wurzel
            du hast mehr als ein problem:

            - session_start() muss vor jeder ausgabe stehen
            - ein image im html-fluss zu generieren funktioniert nicht ... => bild.php im img-tag aufrufen
            - deine bildcode-vergleichs-aktion ist sinnfrei, wenn's im hidden-field steht
            - ... to be continued

            essen ist fertig
            a) Ich habe nie gesagt, dass ich nur ein Problem habe :P
            b) Wo fehlt denn da ein session_start(); ? Ist ja immernoch die selbe Seite.
            Ohne den Grafikschnipsel funktioniert es ja.
            c) Hab ich doch oben erwähnt, dass die Codeverarbeitung nicht das Gelbe
            vom Ei ist ^^


            aber das hier gleich so schnell Antworten kommen, auch wenns nur gemecker ist (^^) ... Respekt
            Zuletzt geändert von DarkdragoN09; 12.08.2004, 21:47.

            Kommentar


            • #7
              hoffe die Herrschaften sind nun zufrieden ^^.
              mann, laß doch die dummen sprüche ...

              Und zwar das erste (das größere von beiden):
              Ich kann die Loginseite, indem der grafische Login mit verwendet wird nur im IE aufrufen, in allen anderen Browsern (Opera etc, Netscape nicht getestet) funktioniert das ding garnicht, bzw wird nicht angezeigt.
              stell mal bitte ne testseite online ... was wird nicht angezeigt? kein html-code? keine seite? keine grafik? ...

              aber halt mit dem neuen Code. Das Prob hierbei ist, dass zwar der Code
              weiter generiert wird, aber die alte Grafik immernoch stehenbleibt.
              versuch mal, dem glogin.png nen parameter mitzugeben, der sich ständig ändert ... also ?aktuelle_zeit_in_sec_oder_millisec

              edit: ansonsten, siehe Wurzels post,
              deine bildcode-vergleichs-aktion ist sinnfrei, wenn's im hidden-field steht
              das ist in der tat vollständig sinnfrei ...

              nochwas: wenn du ziwschen drin nen header("location: login.php"); sendest ... ists doch sinnlos, danach noch code anzugeben ... außerdem sind ausgaben vorm header auch nicht das gelbe vom ei ...

              und noch was: hast du register globals auf off? sonst geb ich einfach per url g=1 mit und bin eingeloggt? irgendwie versteh ich deinen code net ...

              hmm, je länger ich deinen code betrachte ... desto, naja ...
              PHP-Code:
              header ("Content-type: image/png"); 
                  
              $im = @imagecreatefromjpeg("glblank.jpg"
                       or die (
              "Kann keinen neuen GD-Bild-Stream erzeugen"); 
              wenn du das bild eh speicherst, brauchst doch keinen header senden!? außerdem würd mich interessieren, wie die ausgabe des die aussieht, wenn vorher nen header mit nen bild-typ gesendet wurde ...

              das ist wirklich 'to be continued ...'

              ich hör mal lieber auf ...
              Zuletzt geändert von derHund; 12.08.2004, 22:05.
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Hi nochmal, danke für die Ideen hier, habs nun hinbekommen.

                Falls es wen interessiert:
                Es waren alles nur Probleme mit der Interpretation der verschiedenen
                Browser, d.h. bei Firefox ging es, der IE hatte sich mit dem gleichen
                Bildnamen schwergetan. Hab also wie ein Attribut hinten dran generiert
                und schon ging das.

                Kann also geclosed werden.


                Cya

                Kommentar


                • #9
                  PHP-Code:
                    $sql "SELECT id,user,pw,level FROM user WHERE user='".$_REQUEST["user"]."'";
                          
                  $sql .= "AND pw = PASSWORD('".$_REQUEST["pw"]."')"
                          
                  $result mysql_query($sql$db) or die(mysql_error($db)); 
                  nix zum Thema, aber schau mal hier
                  mfg
                  marc75

                  <Platz für anderes>

                  Kommentar

                  Lädt...
                  X