Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten einer Registrierung in Datenbank einschreiben (Insert INTO)

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

  • Daten einer Registrierung in Datenbank einschreiben (Insert INTO)

    Guten Tag,
    ich habe eine dynamische Webseite erstellt mit Login-Funktion. Bevor man sich aber einloggen kann, benötigt man einen Account logischerweise.
    Nun registriere ich mich, bekomme einen Aktivierungslink und kann mich erfolgreich einloggen.
    Meine Datenbank habe ich mit XAMPP in PHPMYADMIN erstellt. Alles wird perfekt eingetragen und alles funktioniert.

    Nun habe ich mir einen Server gekauft und wollte das alles Online stellen. Aber nun ist das Problem, das die Registrierung nicht mehr funktioniert.
    Ich habe nur die Verbindungsdaten zum MYSQL-Datenbank geändert und die Pfande der verschieden Dateien und sonst nichts.

    Hier der CODE:

    PHP-Code:
    <?php
    session_start
    ();
    $pdo = new PDO('mysql:host=;dbname='''''); // Habe hier nichts eingegeben um meine Daten zu schützen 


    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <title>Account Registrieren</title>

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj7 0gZWKYbI706tWS" crossorigin="anonymous">

    </head>
    <header>

    <div class="jumbotron jumbotron-fluid">
    <div class="container">
    <h1 class="display-4"><b>Registriere dich jetzt!</b></h1>
    </div>
    </div>
    </header>
    <body>


    <style>

    .header{

    width: 465px;
    height: 45px;
    background-color: lightgray;
    }

    .border1 {
    border-style: outset;

    }



    </style>

    <?php
    $showFormular 
    true//Variable ob das Registrierungsformular angezeigt werden soll

    if(isset($_GET['register'])) {
    $error false;
    $vorname $_POST['vorname'];
    $nachname $_POST['nachname'];
    $email $_POST['email'];
    $birthday $_POST['birthday'];
    $passwort $_POST['passwort'];
    $passwort2 $_POST['passwort2'];



    if(!
    filter_var($emailFILTER_VALIDATE_EMAIL)) {
    echo 
    'Bitte eine gültige E-Mail-Adresse eingeben<br>';
    $error true;
    }
    if(
    strlen($passwort) == 0) {
    echo 
    'Bitte ein Passwort angeben<br>';
    $error true;
    }
    if(
    $passwort != $passwort2) {
    echo 
    'Die Passwörter müssen übereinstimmen<br>';
    $error true;
    }

    //Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde
    if(!$error) {
    $statement $pdo->prepare("SELECT * FROM `users` WHERE email = :email");
    $result $statement->execute(array('email' => $email));
    $user $statement->fetch();

    if(
    $user !== false) {
    echo 
    'Diese E-Mail-Adresse ist bereits vergeben<br>';
    $error true;
    }
    }



    //Keine Fehler, wir können den Nutzer registrieren
    if(!$error) {
    $passwort_hash md5($passwort);

    $statement $pdo->prepare("INSERT INTO `users` (vorname, nachname, birthday, email, passwort) VALUES (:vorname, :nachname, :birthday, :email, asswort)");
    $result $statement->execute(array('vorname' => $vorname'nachname' => $nachname'birthday' => $birthday'email' => $email'passwort' => $passwort_hash));


    if(
    $result) {

    echo 
    '<div class="container">' ;
    echo 
    'Du wurdest erfolgreich registriert! .';
    // Link generieren
    echo "<br><br> Klicke folgenden Link um deine Registrierug zu aktivieren:</br></br>";
    echo 
    "<a href= 'LINK HIER";
    echo 
    '</div>';
    $showFormular false;


    }
    }
    }


    if(
    $showFormular) {
    ?>

    <div class="container">
    <form action="?register=1" method="post">
    <b>Vorname:<br></b>
    <input type="text" size="40" maxlength="250" name="vorname" class="border1"><br><br>

    <b>Nachname:<br></b>
    <input type="text" size="40" maxlength="250" name="nachname" class="border1"><br><br>

    <b>Geburtsdatum:<br></b>
    <input type="date" size="40" maxlength="250" name="birthday" class="border1"><br><br>

    <b>E-Mail:<br></b>
    <input type="email" size="40" maxlength="250" name="email" class="border1"><br><br>

    <b>Dein Passwort:<br></b>
    <input type="password" size="40" maxlength="250" name="passwort" class="border1"><br><br>

    <b>Passwort wiederholen:<br></b>
    <input type="password" size="40" maxlength="250" name="passwort2" class="border1"><br><br>

    <input type="submit" value="Registrieren">
    </form>

    </div>

    <?php
    //Ende von if($showFormular)
    ?>

    </body>
    </html>
    Ich weiß das es kein guter Code ist, bzw. Struktur aber das ist mir zur Zeit weniger egal, ich möchte nur das meine Registrierung + Login funktionieren.


  • #2
    Was heisst nicht mehr funktioniert? Gibt es Fehlermeldungen? Hast du error_reporting aktiviert?

    https://php-de.github.io/jumpto/leitfaden/

    Für Passwörter gibt es password_hash() und password_verify.
    https://www.php.net/manual/de/functi...sword-hash.php
    https://www.php.net/manual/de/functi...ord-verify.php

    md5() ist nicht mehr der aktuelle Stand der Technik.

    Übrigens: Es gibt Code-Tags im Forum, erleichtert die Lesbarkeit vom Code ungemein, bitte verwenden.

    Kommentar


    • #3
      SELECT * ist pfui, schreibe immer alles Spalten hin die du auch wirklich im Ergebnis haben willst
      https://php-de.github.io/jumpto/code-smells/#select-all



      PHP-Code:
      if(!filter_var($emailFILTER_VALIDATE_EMAIL)) { 
      Vorsicht: Das funktoniert nicht mit Umlaut-Domains: https://php-de.github.io/jumpto/stan...il-validation/


      Und:
      PHP-Code:
      if($passwort != $passwort2) {
      echo 
      'Die Passwörter müssen übereinstimmen<br>';
      $error true;
      }

      //...

      if($user !== false) {
      echo 
      'Diese E-Mail-Adresse ist bereits vergeben<br>';
      $error true;
      }

      Du solltest dir dringend mal das EVA-Prinzip ansehen und anwenden!

      Bitte oben Code-Tags nutzen. Danke!
      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


      • #4
        Zitat von jonas3344 Beitrag anzeigen
        Was heisst nicht mehr funktioniert? Gibt es Fehlermeldungen? Hast du error_reporting aktiviert?

        https://php-de.github.io/jumpto/leitfaden/

        Für Passwörter gibt es password_hash() und password_verify.
        https://www.php.net/manual/de/functi...sword-hash.php
        https://www.php.net/manual/de/functi...ord-verify.php

        md5() ist nicht mehr der aktuelle Stand der Technik.

        Übrigens: Es gibt Code-Tags im Forum, erleichtert die Lesbarkeit vom Code ungemein, bitte verwenden.
        Nein es gibt keine Fehlermeldungen aus. Aber wenn ich auf den submit Button drücke, lädt er die Seite einfach neu und bei der URL steht "?register=1" hinten dran.
        Okay werde es mit passwort_hash() verschlüsseln.

        Kommentar


        • #5
          Zitat von hausl Beitrag anzeigen
          SELECT * ist pfui, schreibe immer alles Spalten hin die du auch wirklich im Ergebnis haben willst
          https://php-de.github.io/jumpto/code-smells/#select-all




          Vorsicht: Das funktoniert nicht mit Umlaut-Domains: https://php-de.github.io/jumpto/stan...il-validation/


          Und:

          Du solltest dir dringend mal das EVA-Prinzip ansehen und anwenden!

          Bitte oben Code-Tags nutzen. Danke!
          Okay werde mir das filter_var anschauen.

          Ich weiß was EVA-Prinzip ist, aber wie bereits gesagt, bin ich Anfänger und kein Fortgeschrittener.

          Kommentar


          • #6
            Zitat von FyLiiX Beitrag anzeigen

            Nein es gibt keine Fehlermeldungen aus. Aber wenn ich auf den submit Button drücke, lädt er die Seite einfach neu und bei der URL steht "?register=1" hinten dran.
            Okay werde es mit passwort_hash() verschlüsseln.
            Was wohl bedeutet, dass die Insert-Query fehlschlägt, $result dürfte false sein.

            Da musst du die Datenbank fragen was falsch ist:
            https://www.php.net/manual/de/pdo.error-handling.php

            Kommentar


            • #7
              PHP-Code:
              "INSERT ... VALUES (:vorname, :nachname, :birthday, :email, asswort)"); 
              Fällt dir was auf?

              Warum englisch und deutsch gemischt?
              Verwende nur eine Sprache für die Spaltenbezeichnungen.


              PHP-Code:
              //Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde
              if(!$error) {
                  
              $statement $pdo->prepare("SELECT * FROM `users` WHERE email = :email");
                  
              $result $statement->execute(array('email' => $email));
                  
              $user $statement->fetch();

                  if(
              $user !== false) {
                      echo 
              'Diese E-Mail-Adresse ist bereits vergeben<br>';
                      
              $error true;
                  }

              Kann auch nicht gut gehen. Fetch liefert nur FALSE wenn der Ausdruck einen Fehler erzeugt, aber nicht wenn es keinen Treffer gibt.
              Teste es einfach mit der Anzahl der zurückgegebenen Datensätze wenn diese 0 sind ist die email nicht vorhanden ansonsten schon.

              Alle anderen gegebenen Hinweise solltest du ungeachtet dessen dennoch beachten. Dieser Hinweis von mir ist nur als Zusatz gemeint und nicht als "Vergessen wir dann halt den Rest".

              Kommentar


              • #8
                Zitat von protestix Beitrag anzeigen
                Warum englisch und deutsch gemischt?
                PHP-Code:
                asswort
                Das ist mal 'ne Mischung
                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


                • #9
                  Zitat von jonas3344 Beitrag anzeigen

                  Was wohl bedeutet, dass die Insert-Query fehlschlägt, $result dürfte false sein.

                  Da musst du die Datenbank fragen was falsch ist:
                  https://www.php.net/manual/de/pdo.error-handling.php
                  Werde es versuchen, aber was ich nicht verstehe, ich hab alles "offline" mit XAMPP erstellt, also die MYSQL-Datenbank usw. und da hat alles mit diesem Code funktioniert, das Einloggen, Registrieren usw. Kaum kaufe ich mir einen Server und ändern nur die Verbindungsdaten zur MYSQL-Datenbank funktioniert nichts mehr.

                  Kommentar


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    PHP-Code:
                    "INSERT ... VALUES (:vorname, :nachname, :birthday, :email, asswort)"); 
                    Fällt dir was auf?

                    Warum englisch und deutsch gemischt?
                    Verwende nur eine Sprache für die Spaltenbezeichnungen.


                    PHP-Code:
                    //Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde
                    if(!$error) {
                    $statement $pdo->prepare("SELECT * FROM `users` WHERE email = :email");
                    $result $statement->execute(array('email' => $email));
                    $user $statement->fetch();

                    if(
                    $user !== false) {
                    echo 
                    'Diese E-Mail-Adresse ist bereits vergeben<br>';
                    $error true;
                    }

                    Kann auch nicht gut gehen. Fetch liefert nur FALSE wenn der Ausdruck einen Fehler erzeugt, aber nicht wenn es keinen Treffer gibt.
                    Teste es einfach mit der Anzahl der zurückgegebenen Datensätze wenn diese 0 sind ist die email nicht vorhanden ansonsten schon.

                    Alle anderen gegebenen Hinweise solltest du ungeachtet dessen dennoch beachten. Dieser Hinweis von mir ist nur als Zusatz gemeint und nicht als "Vergessen wir dann halt den Rest".
                    Hatte es am Anfang mit der Anzahl der zurückgegebenen Datensätze probiert hat aber leider nicht funktioniert und habe es daher so gemacht. Komischerweise habe ich asswort in meinen Code und hier steht asswort.

                    Kommentar


                    • #11
                      Zitat von hausl Beitrag anzeigen



                      Das ist mal 'ne Mischung
                      Wie gesagt, habe eigentlich asswort in meinen Code und hier steht asswort ^^

                      Kommentar


                      • #12
                        Zitat von FyLiiX Beitrag anzeigen

                        Wie gesagt, habe eigentlich asswort in meinen Code und hier steht asswort ^^
                        Genau deshalb verwendet man ja auch die Code-Tags. Unterschied:

                        asswort
                        vs
                        Code:
                        :passwort
                        Schlampigkeit ist eine Eigenschaft, die einem das Programmieren sehr schwer macht. Besser man gewöhnt sich von Anfang an an immer sauber und exakt zu arbeiten.

                        Kommentar


                        • #13
                          Zitat von FyLiiX Beitrag anzeigen

                          Werde es versuchen, aber was ich nicht verstehe, ich hab alles "offline" mit XAMPP erstellt, also die MYSQL-Datenbank usw. und da hat alles mit diesem Code funktioniert, das Einloggen, Registrieren usw. Kaum kaufe ich mir einen Server und ändern nur die Verbindungsdaten zur MYSQL-Datenbank funktioniert nichts mehr.
                          Das kann verschiedene Ursachen haben. Wenn irgendwas nicht mehr geht oder nicht so tut wie es soll, versuch den Fehler so weit wie möglich einzugrenzen.
                          Klappt die DB-Verbindung? Wenn ja, kommt er durch all die Überprüfungen, ist also $error am Schluss false? Wenn dem so ist schauen ob das Insert-Statement überhaupt ausgeführt wird oder ob das einen Fehler wirft.

                          Kommentar


                          • #14
                            Zitat von jonas3344 Beitrag anzeigen

                            Das kann verschiedene Ursachen haben. Wenn irgendwas nicht mehr geht oder nicht so tut wie es soll, versuch den Fehler so weit wie möglich einzugrenzen.
                            Klappt die DB-Verbindung? Wenn ja, kommt er durch all die Überprüfungen, ist also $error am Schluss false? Wenn dem so ist schauen ob das Insert-Statement überhaupt ausgeführt wird oder ob das einen Fehler wirft.
                            Habe die Verbindung ein paar mal getestet, aber irgendwas funktioniert nicht richtig.

                            SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

                            Bekomme diese Meldung.

                            Kommentar


                            • #15
                              Und die ist ja ziemlich eindeutig.
                              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