Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Loginsystem über include

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Loginsystem über include

    Ich habe ein einfaches Login-System gebaut, wo die Datei mit den Benutzerdaten per include() eingeladen wird.
    Leider leitet mich das Programm nicht zu home.php weiter.

    index.php:
    PHP-Code:
    <?php
        $username 
    $_POST["kartoffelsalat"];
        
    $ipassword $_POST["kirschtomaten"];
        if(
    file_exists('users/' $username '.php')) {
            include(
    'users/' $username '.php');
            for(
    $i=0;$i<5000;$i++) {
                        
    $ipassword md5($ipassword);
            };
            if(
    $ipassword == $password) {
                
    session_start();
                
    $_SESSION["username"] = $username;
                
    $_SESSION["email"] = $email;
                
    header("Location: home.php");
                exit;
            } else {
                
    $error true;
            };
        }else {
            
    $error true;
        };
    ?>
    register.php:
    PHP-Code:
    <?php
    $username 
    $_POST["schlangengurke"];
    $password1 $_POST["schokokekse"];
    $password2 $_POST["ingwerkekse"];
    $email $_POST["kopfsalat"];
    $check $_POST["pappkarton"];
    if(!
    file_exists('users/' $username '.php')) {
        if(
    $password1 == $password2) {
            if (
    eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}"$email)) {
                if (
    $check == "akzeptiert") {
                    for(
    $i=0;$i<5000;$i++) {
                        
    $password md5($password);
                    }
                    
    $file fopen("users/" $username ".php"w);
                    
    fwrite($file"<?php");
                    
    fwrite($file"\n");
                    
    fwrite($file"\$password = '$password';");
                    
    fwrite($file"\n");
                    
    fwrite($file"\$email = '$email';");
                    
    fwrite($file"\n");
                    
    fwrite($file"?>");
                    
    fclose($file);
                    
    header("Location: index.php");
                    die;
                    } else {
                    
    $error "Akzeptiere bitte die Datenschuterkl&auml rung";
                    }
                } else {
                
    $error "Die E-Mail-Adresse ist nicht korrekt";
                }
            } else {
            
    $error "Die Passw&ouml rter stimmen nicht &uuml berein";
            }
        } else {
        
    $error "Der Nutzername $username existiert bereits";
        }
    testname.php(im ordner users):
    PHP-Code:
    <?php
    $password 
    'f172b08b191468992adc9c2f5bc19b08';
    $email 'test@test.test';
    ?>
    Vorab schon einmal vielen Dank für die Hilfe


  • #2
    Warum nicht über Datenbank?
    Warum haben deine Formularfelder so komische Namen?

    Error-Reporting und -Anzeige aktiviert? Falls nicht, siehe Signatur.
    Ausgaben vor header() bzw session_start()?
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Dass ich keine Datenbank benutze, liegt daran, dass es eher experimentell war. Ich wollte herausfinden, ob es sich lohnt, PHP-Dateien zum speichern von Daten zu nutzen. Ist meiner Meinung nach aber nicht der Fall.
      Die Formularfelder haben so komische Namen, um Spambots das anmelden schwerer zu machen(uneffektive Methode, ich weiss).
      Ausgaben gibt es nicht vor header() bzw. session_start() und das Error Reporting ist aktiviert, gibt aber keine Informationen.

      Kommentar


      • #4
        Mal geguckt, ob die Anwendung überhaupt bis zum header()-Aufruf kommt? Stichwort Debugging.

        Kommentar


        • #5
          if(file_exists('users/' . $username . '.php')) {
          include('users/' . $username . '.php');
          Massive Sicherheitslücke.
          header("Location: home.php");
          Sinnfrei, wenn ich home auch so aufrufen kann.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Andere „Kleinigkeiten“ habe ich auch noch:

            - Umlaut-Entities sind quasi immer falsch/unnötig und deuten auf ein ungelöstes Zeichensatzproblem hin. http://php-de.github.io/jumpto/faq/#html-charset (Außerdem fehlen da Semikolons am Ende.)

            - Die ereg-Funktionen sind veraltet. Stell auf preg um. Das müsste dir PHP eigentlich auch selbst mitteilen, wenn das Error-Reporting pasend eingestellt ist und du keine uralte Version nutzt.

            - Anweisungsbegrenzer (";") hinter Kontrollstrukturen wie if, for, … und Funktionsdeklarationen und dergleichen erfüllen keinen Zweck und sind unüblich bis syntaktisch falsch (hinter Methoden).

            - Auf schließende PHP-Tags ("?>") sollte in Dateien, die nur PHP-Code enthalten, verzichtet werden. Dann kann sich dahinter kein Whitespace einschleichen, der eventuell dann auch solche Probleme [wie hier im Thread] verursacht, weil er als Ausgabe zählt.

            Kommentar


            • #7
              PHP-Code:
              for($i=0;$i<5000;$i++) { 
                  
              $password md5($password); 

              - md5() ist nicht mehr zeitgemäß/sicher -> siehe: http://php.net/manual/de/faq.passwords.php

              Die Schleife find ich übrigens seltsam, warum machst du das? Falls du glaubst dadurch wird es sicherer, das du den md5-Hash 5000 mal neu von sich selbst rechnest, irrst du.

              LG
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                So, das Problem mit dem Header habe ich "gelöst", ich habe nun eine andere Methode für die Weiterleitung gefunden.
                Die schließenden ?> tags sind da, da unterhalb noch ein wenig html war, dass ich schon weggelöscht habe. nur die php-tags eben nicht.
                Dass das System miserabel und unsicher ist weiß ich, ich wollte nur (s.o.) ausprobieren, ob Es eine mögliche Methode wäre .

                Vielen Dank für die hilfreichen Tipps und Antworten(ich könnte jetzt eine Menge ändern)

                Kommentar


                • #9
                  Für das nächste Mal:

                  Du hast vermutlich vor dem header()-Aufruf irgendwo eine Ausgabe gehabt. Vielleicht eine BOM vor dem öffnenden PHP-Tag.

                  Im Zweifel eben wirklich Debugging betreiben.

                  - http://php-de.github.io/#debugging

                  PHP-Code:
                  error_reporting(-1); // alles auf an
                  ini_set('display_errors'1); 
                  …an den Beginn des Skripts usw.

                  header() ist üblicherweise die geeigneteste Methode zur Weiterleitung.

                  Kommentar

                  Lädt...
                  X