Ankündigung

Einklappen
Keine Ankündigung bisher.

Verbesserung von PHP code

Einklappen

Neue Werbung 2019

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

  • Verbesserung von PHP code

    Hey Leute
    Bin was Programmieren angeht eigentlich noch nicht wirklich so erfahren aber versuche nun ein "Login Formular" zu erstellen.
    Eigentlich so weit so gut, jedoch habe ich das Problem, dass beim absenden des Formulars immer ein weiteres Betätigen des Buttons gebraucht wird, um sich an zu melden.
    (Beim ersten mal abschicken die richtigen daten und beim 2. Mal kann alles leer gelassen werden und er meldet sich dann mit den Daten vom 1. Mal an)
    Könnte mir jemand helfen? Lasse mich gerne belehren/korrigieren
    Das Ganze ist so untereinander aufgebaut...
    PHP-Code:
    <?php
    session_start
    ();

    $userinfo = array(
                    
    'USER1'=>'PASSWORD1',
                    );
    ?>

    HTML-Code:
    <!DOCTYPE html>
    <html>
        <head>
            <title>Login</title>
        </head>
        <body>
        <h1 >Login</h1>
            <form name="login" action="" method="post">
                <input placeholder="Benutzername" type="text" name="username" value="" /><br />
                <input placeholder="Passwort" type="password" name="password" value="" /><br />
                <input type="submit" name="submit" value="Login" />
                    <?php if($_SESSION['username']): ?>
                <p>Sie sind nun als <?=$_SESSION['username']?> eingeloggt</p>
                <form action="?logout=1"><input type="submit" name="logout" value="Logout"></form>
            <?php endif; ?>
            </form>
    PHP-Code:
    <?php

    if(isset($_GET['logout'])) {
        
    $_SESSION['username'] = '';
        
    header('Location:  ' $_SERVER['PHP_SELF']);
    }

    if(isset(
    $_POST['username'])) {
        if(
    $userinfo[$_POST['username']] == $_POST['password']) {
            
    $_SESSION['username'] = $_POST['username'];
        }else{
            echo 
    '<a style="color:red;">' "Falsche Eingabe!" '</a>';
        }
    }

    ?>
    HTML-Code:
        </body>
    </html>

    PS: Brauche keine Datenbank, da dass ganze nur auf einen Benutzer ausgelegt werden soll

  • #2
    Kannst Du Deine Frage klarer formulieren?
    Ich versteh überhaupt nichts.

    bitcoin.de <- Meine Freelancerwährung

    Kommentar


    • #3
      Naja, Du zeigst ja auch erst das Formular an, bevor Du die übergebenen Daten verarbeitest. Dann kann er natürlich auch erst beim zweiten mal klicken ( also einem weiteren Request ) von dem Session-Parameter wissen.

      Lasse mich gerne belehren/korrigieren
      • Trenn Dich bitte von PHP_SELF, das ist manipulierbar!
      • Das action-Attribut kannst Du komplett weglassen in HTML5 Dokumenten
      • Die Logout-Form würde ich nicht in die Login-Form packen. Eine Form muss das auch nicht zwingend sein, dazu reicht ein gewöhnlicher Link
      • Lies Dich in EVA ein.
      • Verwende keine short_open_tags, die sind nicht auf jedem System aktiviert
      EDIT:
      Nur mal als kleiner Ansatz ( gibt sicher bessere Varianten ) was auf die Schnelle EVA und Datenfilterung berücksichtigt
      PHP-Code:
      <?php
      session_start
      ();

      $aUserData = ['USER1'=>'PASSWORD_HASHED']; // zuvor mit password_hash() ermitteln!
      $_SESSION['loggedin'] = false;


      $sDocument =<<<EOHTML
      <!DOCTYPE html>
      <html>
      <head>
      <title>Login</title>
      </head>

      <body>
      {{__LOGIN__}}
      {{__LOGOUT__}}

      </body>
      </html>
      EOHTML;

      $sLogin =<<<EOHTML
      <h1>Login</h1>
      <form name="login" method="post">
      <p><input type="text" name="username" value="" placeholder="Benutzername"></p>
      <p><input type="password" name="password" value="" placeholder="Passwort"></p>
      <p><input type="submit" name="submit" value="Login"></p>
      </form>
      EOHTML;

      $sLogout '<a class="btn-logout" href="?logout">Logout</a>';



      if ( isset(
      $_GET['logout']) ) {

          
      $_SESSION = [];
          
      header 'location: ' __FILE__ );
          exit;

      }


      if ( isset(
      $_POST['username']) ) {

          
      $sUserName_Sent filter_inputINPUT_POST'username'FILTER_SANITIZE_STRING );
          
      $_SESSION['loggedin'] = ( in_array($sUserName_Sent$aUserData) && password_verify($_POST['password'], $aUserData[$sUserName_Sent]) );

      }


      echo ( 
      $_SESSION['loggedin'] )
                  ? 
      strtr$sDocument, ['{{__LOGOUT__}}'=>$sLogout'{{__LOGIN__}}'=>'' )
                  : 
      strtr$sDocument, ['{{__LOGOUT__}}'=>'''{{__LOGIN__}}'=>$sLogin );
      UNGETESTET !!!
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar

      Lädt...
      X