Ankündigung

Einklappen
Keine Ankündigung bisher.

Anmelden/Registrieren auf HTML-Seite

Einklappen

Neue Werbung 2019

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

  • Anmelden/Registrieren auf HTML-Seite

    Einen wunderschönen guten Abend ,

    ich bin dabei das erste Mal ein Projekt mit PHP in HTML zu entwerfen. Habe bereits mehrere Stunden reingesteckt doch irgendwie klappt nichts.

    Folgendes Problem:
    Ich würde gerne ein Anmelde-Fenster bzw. eine extra Seite entwerfen, welche bei richtiger Eingabe der Anmeldedaten mich weiter zur Index-Seite leitet.
    An HTML- und SQL- Kenntnisse scheitert es nicht, nur an PHP. Deswegen bin ich hier!
    Datenbank steht bereits.

    Ich habe mir bereits einen PHP-Code entworfen:

    PHP-Code:
    <?php
            
    // Variablen festlegen
                
    $_db_host "localhost";
                
    $_db_username "root";
                
    $_db_passwort "";
                
    $_db_datenbank "hypester_registrierung";

            
    // Verbindung zur Datenbank
                
    $_link mysql_connect($_db_host$_db_username$_db_passwort);

            
    // Verbindung überprüfen
                
    if (!$_link)
                    {
                        die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden.".mysql_error());
                    }

            
    // Auswahl der Datenbank
                
    mysql_select_db($_db_datenbank,$_link);

            
    // Daten in DB auswählen
                
    $_sql "SELECT * FROM benutzer WHERE id=2 LIMIT 1";
                
    $_resultat mysql_query($_sql,$_link);

            
    // Daten einlesen
                
    $_daten mysql_fetch_array($_resultatMYSQL_ASSOC);

            
    // Gesamte Datenmenge im Array anzeigen
                
    print_r($_daten);       
    ?>
    Dazu das Formular in HTML:

    HTML-Code:
    <form name="Formular" method="post" action="">
                <div class="einfuegen">
                <label for="username"> Benutzername: </label>
                <input name="username" id="username" value="<?php echo $_daten["username"];?>">
                <label for="passwort">Passwort:</label>
                <input name="passwort" id="passwort" value="<?php echo $_daten["password"];?>">
                <button id="login" type="submit" class="btn"> Jetzt Anmelden!</button>
                </div>
    </form>   
    Der Code soll erstmal nur die Daten aus der DB rausholen und dann vergleichen mit den Eingaben im Textfeld auf der Anmelde-Seite. Wenn dies übereinstimmt, dann soll die Weiterleitung erfolgen und wenn nicht, dann sollen Fehlermeldungen kommen bspw. über alerts. Den passenden Script über JS (logischerweise) hatte ich bereits, jedoch konnte ich keine Verbindung zur DB herstellen. Könnte ich dort auch einfach über eine If- bzw. If-Else-Funktion einfach die Value-Eingabe und Datenbankeingabe abgleichen?

    weiteres Problem: Die Values im Formular stehen auch wirklich so im Textfeld... gibt es eine Möglichkeit sie in den Hintergrund zurücken?

    Wenn mir hier jemand helfen könnte, wäre ich sehr sehr dankbar.
    Sonst wünsche ich allen noch ein Frohes Neues und Gesundes Jahr 2019.
    LG ian

  • #2
    Bevor du dich um dein Problem kümmerst, beseitige erst mal Folgendes:

    mysql_connect ist veraltet, siehe Handbuch.
    Auswahl der DB kannst du dann mit in den connect aufnehmen, als zusätzlichen Parameter.
    Die weiteren mysql_* Anweisungen musst du natürlich auch alle ändern.

    SELECT * FROM bitte nicht machen, Führe nach dem SELECT alle Spalten auf die du auch ausgeben willst.

    Verwende Backticks für Bezeichner in deinem MySQL Statement.

    Verwende Englisch und Kleinschreibung. Du hast
    name="Formular" jedoch username und passwort, das führt oft zu Schreibfehlern, bleibe bei einer Sprache und Schreibweise auch im HTML.

    Wenn du fertig bist zeige den Code, dann geht es weiter.






    Kommentar


    • #3
      Erstmal, vielen lieben Dank.
      Ich habe meiner Meinung nach, alle Befehle geändert und das SQL-Statement angepasst.
      HTML-Code:
      <main>
                  <div class="header">
                      <h2> ANMELDEN <h2>
                  </div>
                  <?php
                  // Variablen festlegen
                      $_db_host="localhost";
                      $_db_username="root";
                      $_db_password="";
                      $_db_database="hypester_registrierung";
      
                  // Verbindung zur Datenbank
                      $_link=mysqli_connect($_db_host, $_db_username, $_db_password);
      
                  // Verbindung überprüfen
                      if (!$_link)
                          {
                              die("Verbindung zur Datenbank konnte nicht hergestellt werden.".mysqli_error());
                          }
      
                  // Auswahl der Datenbank
                      mysqli_select_db($_db_database,$_link);
      
                  // Daten in DB auswählen
                      $_sql="SELECT 'username','password' FROM 'benutzer' WHERE id=1 LIMIT 1";
                      $_result=mysqli_query($_sql,$_link);
      
                  // Daten einlesen
                      $_data=mysqli_fetch_array($_result, MYSQL_ASSOC);
      
                  // Gesamte Datenmenge im Array anzeigen
                      print_r($_data);        
                  ?>
                  <form name="formu" method="post" action="">
                      <div class="einfuegen">
                      <label for="username"> Benutzername: </label>
                      <input name="username" id="username" value="<?php echo $_data["username"];?>">
                      <label for="password">Passwort:</label>
                      <input name="password" id="password" value="<?php echo $_data["password"];?>">
                      <button id="login" type="submit" class="btn"> Jetzt Anmelden!</button>
                      </div>
                  </form>    
                  <?php
                  // Verbindung zur Datenbank abbrechen
                  mysqli_close($_link);
                  ?>        
              </main>

      Kommentar


      • #4
        PHP-Code:
          "SELECT 'username','password' FROM 'benutzer' WHERE id=1 LIMIT 1" 
        Das sind keine Backticks.
        Backticks sind ``
        Demnach
        PHP-Code:
          "SELECT `username`,`password` FROM `benutzer` WHERE `id` = 1" 
        Limit 1 kannst du weglassen, da mit der id nur eine Datensatz zurück geliefert werden darf, sonst stimmt dein DB Design nicht.

        Deine DB Abfrage steht inmitten der Ausgabe von HTML.
        Wenn du aber Ausgaben an den Browser tätigst sollte alles was mit Verarbeitung zu tun hat bereits abgeschlossen sein. D.h. PHP und DB Abfragen zuoberst danach weiter unten dein HTML.
        Schau dir dazu mal in der Wissenssammlung EVA-Prinzip und Affenformular an.
        Da action Attribut beim Form Element kannst du unter HMTL5 weglassen.

        Damit du deine Fehler siehst schreibe bei PHP zuoberst
        PHP-Code:
          error_reporting(-1); ini_set('display_errors'1); 
        hin.
        Formulardaten übertragen.

        Kommentar


        • #5
          HTML-Code:
          <?php
                      // Fehler anzeigen
                          error_reporting(-1); ini_set('display_errors', 1);
                      // Variablen festlegen
                          $_db_host="localhost";
                          $_db_username="root";
                          $_db_password="";
                          $_db_database="hypester_registrierung";
          
                      // Verbindung zur Datenbank
                          $_link=mysqli_connect($_db_host, $_db_username, $_db_password);
          
                      // Verbindung überprüfen
                          if (!$_link)
                              {
                                  die("Verbindung zur Datenbank konnte nicht hergestellt werden.".mysqli_error());
                              }
          
                      // Auswahl der Datenbank
                          mysqli_select_db($_db_database,$_link);
          
                      // Daten in DB auswählen
                          $_sql="SELECT `username`,`password` FROM `benutzer` WHERE `id` = 1";
                          $_result=mysqli_query($_sql,$_link);
          
                      // Daten einlesen
                          $_data=mysqli_fetch_array($_result, MYSQL_ASSOC);
          
                      // Gesamte Datenmenge im Array anzeigen
                          print_r($_data);        
                  ?>
              <body>
                  <main>
                      <div class="header">
                          <h2> ANMELDEN <h2>
                      </div>
          
                      <form name="formu" method="post" action="">
                          <div class="einfuegen">
                          <label for="username"> Benutzername: </label>
                          <input name="username" id="username" value="<?php echo $_data["username"];?>">
                          <label for="password">Passwort:</label>
                          <input name="password" id="password" value="<?php echo $_data["password"];?>">
                          <button id="login" type="submit" class="btn"> Jetzt Anmelden!</button>
                          </div>
                      </form>    
                      <?php mysqli_close($_link);?>        
                  </main>
              </body>
          Jetzt sieht das Ganze so aus, oder?

          Ich habe in der von Ihnen genannten Wissensammlung gestöbert unter "EVA-Prinzip" und bin auch fündig geworden, danke.
          Ich gebe so zu sagen Daten ein (hier: in den Textfeldern) und diese werden verarbeitet (hier: das Vergleichen mit DB), danach kommt es zu seiner Ausgabe (hier: Weiterleitung zur Index.html)... korrekt?
          Mein Verständnis-Problem ist nur, dass ich nicht verstehe wo genau die Verbindung des htmlspecialchars-Befehls und dem darauffolgenden Link ist. Meiner Meinung nach sind das 2 unterschiedliche Schuhe.
          HTML-Code:
            <html>   ...   <body>   <?php echo htmlspecialchars($_GET['test']); ?>   <a href="?test=Hallo+Welt">Test</a>   </body> </html>

          Kommentar


          • #6
            Ich sehe nicht wie mir der "Affenformular-Guide" helfen soll, ich sehe nur, dass etwas wieder ausgegeben wird, also zB als Text (Beispiel: [...] ist [...] Jahre alt.).
            Aber bei mir soll ja kein Text ausgegeben werden, sondern nur verglichen werden. Ich denke, dass ich einen großen Verständnis-Fehler in der ganzen Sache hier habe.

            Kommentar


            • #7
              Hier mal ein simples Script auf Basis deiner Versuche, das Script ist ungetestet und sollte nicht so ohne das die Passwörter gehasht sind verwendet werden.
              Es soll nur aufzeigen wie man Daten entgegen nimmt und mit prepared statements umgeht um Formulardaten mit der DB zu vergleichen.
              PHP-Code:
              <?php
              // Fehler anzeigen
              error_reporting(-1);
              ini_set('display_errors'1);

              // Ausgabe festlegen
              header('Content-Type: text/html; charset=utf-8');

              // Session initialisieren
              session_start();

              // prüfen ob alle Parameter aus Formular übertragen wurden
              if ( isset($_POST['submit'], $_POST['username'], $_POST['password']){  

                  
              // todo: Zugangsdaten sicher auslagern
                  
              $host     "localhost";
                  
              $username "root";
                  
              $password "";
                  
              $database "hypester_registrierung";

                  
              // Verbindung zur Datenbank
                  
              $mysqli mysqli_connect$_db_host$_db_username$_db_password$_db_database );

                  
              // Verbindung überprüfen
                  
              if ( !$mysqli ) {
                          
              // Email an Admin und
                          
              die("Etwas lief schief, bitte versuchen sie es später wieder.");
                  }

                  
              // Daten in DB auswählen
                  
              $sql "SELECT
                              `id`
                          FROM
                              `benutzer`
                          WHERE
                              `username` = ?
                               AND
                              `password`= ?"
              ;

                  
              // gegen SQL Injection prepared statement            
                  
              $stmt mysqli_prepare($mysqli$sql);

                  
              mysqli_stmt_bind_param($stmt'ss'$_POST['username'], $_POST['password']);

                  
              mysqli_stmt_execute($stmt);

                  
              mysqli_stmt_store_result($stmt)

                  
              mysqli_stmt_bind_result($stmt$id);

                  
              // Wenn alles glatt gegangen ist Session füllen und weiterleiten
                  
              if (mysqli_stmt_num_rows($stmt) === 1) {

                      
              mysqli_stmt_fetch($stmt)
                      
              $session['login'] = $id;
                      
              header("Location: {$url}");
                  }
              }    
              ?>
              <!DOCTYPE HTML>
              <html lang="de">        

              <head>                
              <meta charset="UTF-8">                
              <title>Login</title>                      
              </head>        

              <body>
                  <main>
                      <div class="header">
                          <h2> ANMELDEN <h2>
                      </div>

                      <form name="formu" method="post">

                          <label for="username">Benutzername: </label>
                          <input type="text" name="username" id="username" maxlength="64">
                          <label for="password">Passwort:</label>
                          <input type="password" name="password" id="password"maxlength="64">
                          <button id="login" type="submit" class="btn">Anmelden</button>

                      </form>    

                  </main>
              </body>
              </html>

              Kommentar


              • #8
                Das bringt mich um Längen weiter, vielen Dank.

                Kommentar


                • #9
                  Habs jetzt angepasst etc., funktioniert leider trotzdem nicht. gibt es irgendwo so eine Art Konsole wo ich sehen kann, wo der Fehler ist? protestix
                  HTML-Code:
                          <?php
                              // Fehler anzeigen
                                  error_reporting(-1);
                                  ini_set('display_errors', 1);
                              // Ausgabe
                                  header('Content-Type: text/html; charset=utf-8');
                  
                              // Beginn einer Session
                                  session_start();
                  
                              // Verbindung überprüfen
                                  if ( isset($_POST['submit'], $_POST['username'], $_POST['password'])){
                  
                                      // Zugangsdaten auslegen
                                      $_db_host="localhost";
                                      $_db_username="root";
                                      $_db_password="";
                                      $_db_database="hypester_registrierung";
                  
                                      //Verbindung zur DB
                                      $mysqli=mysqli_connect($_db_host, $_db_username, $_db_password);
                  
                                      //Verbindung überprüfen
                                      if (!$_mysqli)
                                      {
                                          die("Verbindung zur Datenbank konnte nicht hergestellt werden.");
                                      }
                  
                                      //Daten auswählen
                                      $sql="SELECT `id` FROM `benutzer` WHERE `username` = "testperson" AND `password` = "testtest"";
                  
                                      //prepared statement
                                      $stmt = mysqli_prepare($mysqli, $sql);
                                      mysqli_stmt_bind_param($stmt, 'ss', $_POST['username'], $_POST['password']);
                                      mysqli_stmt_execute($stmt);
                                      mysqli_stmt_store_result($stmt);
                                      mysqli_stmt_bind_result($stmt, 1);
                  
                                      //Wenn alles gut, dann Session ausfüllen
                                      if (mysqli_stmt_num_rows($stmt) === 1){
                                          mysqli_stmt_fetch($stmt);
                                          $session['login']= 1;
                                          header("Location: Hypester Index.html");
                                      }
                                  }
                          ?>
                      <body>
                          <main>
                              <div class="header">
                                  <h2> ANMELDEN <h2>
                              </div>
                  
                              <form name="formu" method="post" action="">
                                  <div class="einfuegen">
                                  <label for="username"> Benutzername: </label>
                                  <input type="text" name="username" id="username" maxlength="64">
                                  <label for="password">Passwort:</label>
                                  <input type="password" name="password" id="password" maxlength="64">
                                  <button id="login" type="submit" class="btn"> Jetzt Anmelden!</button>
                                  </div>
                              </form>        
                          </main>
                      </body>

                  Kommentar


                  • #10
                    Richtig abschreiben sollte jetzt aber nicht allzuschwierig sein, oder?

                    Kommentar


                    • #11
                      Anscheinend schon haha,
                      Sachen wie die URL bei $url muss ich doch einsetzen, oder täusche ich mich? Und die Variablen müssen bei $mysqli und //Zugangsdaten festlegen auch übereinstimmen, würde ich jetzt mal sagen, weil es für mich Sinn machen würde, sollte es anders sein, bin ich bereit Kritik anzunehmen.
                      Da $id auch nicht definiert ist, müsste ich ja auch dafür eine Zahl einsetzen aus der DB und den dazugehörigen Username + Passwort beim SQL-Code $sql einfügen. jonas3344

                      Kommentar


                      • #12
                        und sollte nicht so ohne das die Passwörter gehasht sind verwendet werden.
                        !!
                        The string "()()" is not palindrom but the String "())(" is.

                        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


                        • #13
                          Laut Internet dient Passwort-Hashing nur zu Sicherheitsgründen und da diese Website nur für private Sachen genutzt wird und erstmal nicht online gehen wird, erscheint mir kein Sinn hinter einem Hash. hausl

                          Kommentar


                          • #14
                            Warum änderst du das auf 1?
                            PHP-Code:
                              mysqli_stmt_bind_result($stmt1); 
                            http://php.net/manual/en/mysqli-stmt.bind-result.php

                            1 ist doch keine Variable.

                            Wenn die Seite nur für dich ist, brauchst du keine DB, da du ja dann nur ein Passwort hast, ansonsten mache es richtig.

                            Kommentar


                            • #15
                              erscheint mir kein Sinn hinter einem Hash. hausl
                              Wie oben gefragt..

                              1. "Private Sachen"?.. Wozu dann ein Login für mehr User/Pwd ermöglichen, wenn eh nur du hinkommst. Sobald es öffenltich ist, ist es öffentlich.

                              Und:

                              2.
                              nur für private Sachen genutzt wird und erstmal nicht online gehen wird,
                              Später ist es zu spät bzw. mit Programmieraufwand verbunden eine Mischform zu erlauben.


                              MOD: Verschoben von Datenbanken
                              The string "()()" is not palindrom but the String "())(" is.

                              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

                              Lädt...
                              X