Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme beim Aktivierungsscript!

Einklappen

Neue Werbung 2019

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

  • Probleme beim Aktivierungsscript!

    Hallo!

    Habe mir soeben ein Registrierungsformular erstellt.
    Diese Daten werden per "POST" an die Datei registrierung.php geleitet.
    Dort werden die Daten dann verarbeitet und in eine MySQL-DB geschrieben.
    Nun möchte ich jedoch ein Aktivierungsscript einbauen, wie nun ersichtlich:

    PHP-Code:
    <!DOCTYPE html>

    <html lang="en">

        <head> 
            <meta charset="utf-8" />
            <title>Registrierung</title>
            <link rel="stylesheet" type="text/css" href="/finanzmanagementplus/css/ss.css" />
        </head>
        
        <body>
            
            <?php
                
                $verbindung 
    mysql_connect("localhost""ZENSIERT""ZENSIERT")
                    or die (
    "Fehler im System");

                
    mysql_select_db ("admin_vermanag")
                    or die (
    "Verbindungserror");

                
                
    $vorname $_POST["vorname"];
                
    $nachname $_POST["nachname"];
                
    $emailadr $_POST["emailadr"];
                
    $username $_POST["username"];
                
    $passwort $_POST["passwort"];
                
    $passwort_wdh $_POST["passwort_wdh"];

                if (
    $passwort == $passwort_wdh)
                {
                    if (
    $vorname == "" or $nachname == "" or $emailadr == "" or $username == "" or $passwort == "")
                    {
                        echo 
    "Es wurden nicht alle Felder vollstaendig ausgefuellt...";
                    }
                    else
                    {
                        
    $data_add "INSERT INTO benutzer
                        (Vorname, Nachname, eMailAdresse, Username, Passwort)
                    
                        VALUES
                        (
                        '
    $vorname', 
                        '
    $nachname', 
                        '
    $emailadr', 
                        '
    $username', 
                        '
    $passwort'
                        )"
    ;

                        
    $eintragen mysql_query($data_add);

                        echo 
    "Speicherung erfolgt";

                     }                
                }
                else
                {
                    echo 
    "Die angegebenen Passwörter stimmen nicht überein...";
                }

              


                
    mysql_close($verbindung);
            
    ?>

            <a href="add_betankung.php">
            <div align="center">
                <img src="/finanzmanagementplus/images/done_button.jpg" 
                width="100" 
                height="90" 
                alt="Weitere Barausgaben erfassen" 
                title="weitere Barausgaben" /> 
            </a> </div> <br> <hr />




    <!--Bestätigungsmailscript-->

    <?php

    $DatabaseHost 
    "localhost";
    $DatabaseUser "ZENSIERT";

    $DatabasePassword "ZENSIERT";
    $Database "admin_vermanag";
    $TableAktivierung "benutzer";

    $Absender "david.simon@email-simon.de";

    if(
    $_REQUEST['Send'])
    {
        
    $DatabasePointer mysql_connect
        
    (
        
    $DatabaseHost
        
    $DatabaseUser
        
    $DatabasePassword
        
    );
        
    mysql_select_db
        
    (
        
    $Database
        
    $DatabasePointer
        
    );

        
    $_REQUEST['emailadr'] = mysql_real_escape_string($_REQUEST['emailadr']);

        
    $Aktivierungscode rand(199999999);

        
    mysql_query("INSERT INTO $benutzer 
        (Aktivierungscode, eMailAdresse, Aktiviert) 
        VALUES ('
    $Aktivierungscode', '".$_REQUEST['emailadr']."', 'Nein')"$DatabasePointer);

        
    $ID mysql_insert_id();

        
    mail($_REQUEST['emailadr'], "Registrierung abschließen"
        
    "Hallo,\n\num die Registrierung abzuschließen, klicken Sie bitte auf den folgenden Link:
        \n\nhttp://www.finanzmanagement-plus.de/fahrzeugmanagement/verbrauchsmanager/reg-aktivieren.php?ID=
    $ID&Aktivierungscode=$Aktivierungscode"
        
    "FROM: $Absender");
       
        echo
    "Um die Registrierung abzuschließen, 
        rufen Sie Ihr E-Mail-Postfach ab und klicken Sie auf den 
        Aktivierungslink in der soeben an Sie versandten E-Mail."
    ;
    }
    else
    {
    ?>

    <form action="" method="post">
    eMail: <input maxlength="255" name="emailadr" type="text">
    <br><input name="Send" type="submit" value="Absenden">
    </form>

    <?php
    }
    ?>


    <!--Bestätigungsmailscript-->


     </body>
    </html>
    Dadurch wird mir schonmal eine eMail mit einem Aktivierungslink zugeschickt.
    Nun soll nach dem Klicken des Linkes, der Prozess in der Datei reg-
    aktivieren.php weiter bearbeitet werden. Diese Datei sieht wie folgt aus:

    PHP-Code:
    <?php

    $DatabaseHost 
    "localhost";
    $DatabaseUser "ZENSIERT";

    $DatabasePassword "ZENSIERT";
    $Database "admin_vermanag";
    $TableAktivierung "benutzer";

    if(
    $_REQUEST['ID'] && $_REQUEST['Aktivierungscode'])
    {
        
    $DatabasePointer mysql_connect($DatabaseHost
        
    $DatabaseUser$DatabasePassword);
        
    mysql_select_db($Database$DatabasePointer);

        
    $_REQUEST['ID']               = mysql_real_escape_string($_REQUEST['ID']);
        
    $_REQUEST['Aktivierungscode'] = mysql_real_escape_string($_REQUEST['Aktivierungscode']);

        
    $ResultPointer mysql_query("SELECT ID FROM $Aktivierung_done 
        WHERE ID = '"
    .$_REQUEST['ID']."' AND Aktivierungscode 
        = '"
    .$_REQUEST['Aktivierungscode']."'"$DatabasePointer);

        if(
    mysql_num_rows($ResultPointer) > 0)
        {
            @
    mysql_query("UPDATE $Aktivierung_done SET Aktiviert = 'Ja' 
            WHERE ID = '"
    .$_REQUEST['ID']."'"$DatabasePointer);

            echo
    "Vielen Dank für Ihre Registrierung. 
            Der Aktivierungsprozess ist nun abgeschlossen."
    ;
        }
    }

    ?>
    Nun erstelt sich zwar in der DB der Eintrag mit den normalen Benutzerdaten,
    es wird aber kein Aktivierungscode o.ä. ergänzt. Ein Klick auf den
    Aktivierungslink und es erscheint eine weiße Seite, ohne Fehlermeldung.

    Meine Vermutung ist nun diese, dass das Aktivierungsscript keinen Bezug
    auf den Datensatz des erstellten Users hat. Hier finde ich aber auch
    keine Möglichkeit, wie ich diesen Bezug herstellen kann.
    Vielleicht kann mir einer einen Tipp geben, wo sich der Fehler befindet?

    Grüße, Dsimon24


  • #2
    Die original mysql-Erweiterung ist veraltet (mysql_*-Funktionen) und wird in den kommenden Versionen aus PHP entfernt. Aktuell wirft sie schon E_DEPRECATED-Fehler bei einer Verbindung zur Datenbank. Des Weiteren stehen dir sehr viele tolle Features von mysql mit diesen Funktionen nicht zur Verfügung! Weiterführende Links:
    Choosing an API
    Warum man mysql* generell nicht (mehr) nutzen sollte.
    Wie man von mysql* auf PDO umsteigt
    Wissenswertes zum Thema SQL-Injection
    Standards - Best Practices - AwesomePHP - Guideline für WebApps

    Kommentar


    • #3
      Hmm, okay... Habe mich jetzt mal darüber informiert...
      Nun habe ich aber nicht so ganz verstanden, wie ich auf MySQLi umsteige.
      Muss ich einfach nur statt MySQL_* dann MySQLi_* nutzen/schreiben?

      Bin leider nicht so wirklich gut in Englisch, um mich in den meisten
      Informationsquellen durchzuarbeiten. Gibt es da auch gute deutsche Websites,
      die ihr mir dazu empfehlen könnt in Bezug zu Informationen zu einem Umstieg?

      Abe dennoch fehlt, auch, wenn MySQL veraltet ist,
      irgendwie die Verknüpfung zum DB-Eintrag...
      Vielleicht kann mir da auch noch einer weiterhelfen?

      Kommentar


      • #4
        Hmm, okay... Habe mich jetzt mal darüber informiert...
        Nun habe ich aber nicht so ganz verstanden, wie ich auf MySQLi umsteige.
        Muss ich einfach nur statt MySQL_* dann MySQLi_* nutzen/schreiben?
        Leider nicht ausreichend informiert, weil sonst die abschliessende Frage bereits beantwortet wäre.
        Egal, ob Du mysqli_* nutzen willst, ich empfehle Dir trotzdem mal alternativ PDO.

        Bin leider nicht so wirklich gut in Englisch, um mich in den meisten
        Informationsquellen durchzuarbeiten.
        ...finde ich immer wieder faszinierend. Englisch gehört eigentlich schon fast zu den Grundlagen, wenns ums Programmieren geht.

        Generell:
        Verwerfe $_REQUEST, verwende stattdessen $_POST bzw. $_GET!
        Ein Klick auf den
        Aktivierungslink und es erscheint eine weiße Seite, ohne Fehlermeldung.
        Eine weiße Seite ist immer ein Anzeichen für fehlerhaften Code!
        Entferne die Humbug-@´s mal vor den Funktionen und stell das error_reporting an:
        PHP-Code:
        <?php
        // als aller erstes in Deinem Script diese beiden Zeilen!
        error_reporting ( -);
        ini_set 'display_errors'true );

        // ...
        ?>
        ...ich vermute, dann wird er Dir schon sagen, was nicht stimmt.
        Da die Fehlermeldung aber auf englisch sein wird, darfst Du die dann auch hier posten!

        Alles was Du generell benötigst, hat rkr sehr schön verlinkt!
        Nur der Verweis auf Mailer-Klassen sei nochmal erwähnt!
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          Okay, dann werde ich es mir mit PDO mal ansehen...
          Würde jetzt aber schon gerne noch schaffen,
          die Sache in MySQL zu realisieren, vorab...


          Also, habe die Date registrierung.php nochmal wie folgt geändert:

          PHP-Code:
          <!DOCTYPE html>

          <html lang="en">

              <head> 
                  <meta charset="utf-8" />
                  <title>Registrierung</title>
                  <link rel="stylesheet" type="text/css" href="/finanzmanagementplus/css/ss.css" />
              </head>
              
              <body>
                  
                  <?php
                      
                      $verbindung 
          mysql_connect("localhost""ZENSIERT""ZENSIERT")
                          or die (
          "Fehler im System");

                      
          mysql_select_db ("admin_vermanag")
                          or die (
          "Verbindungserror");

                      
                      
          $vorname $_POST["vorname"];
                      
          $nachname $_POST["nachname"];
                      
          $emailadr $_POST["emailadr"];
                      
          $username $_POST["username"];
                      
          $passwort $_POST["passwort"];
                      
          $passwort_wdh $_POST["passwort_wdh"];

                      if (
          $passwort == $passwort_wdh)
                      {
                          if (
          $vorname == "" or $nachname == "" or $emailadr == "" or $username == "" or $passwort == "")
                          {
                              echo 
          "Es wurden nicht alle Felder vollstaendig ausgefuellt...";
                          }
                          else
                          {
                              
          $data_add "INSERT INTO benutzer
                              (Vorname, Nachname, eMailAdresse, Username, Passwort)
                          
                              VALUES
                              (
                              '
          $vorname', 
                              '
          $nachname', 
                              '
          $emailadr', 
                              '
          $username', 
                              '
          $passwort'
                              )"
          ;

                              
          $eintragen mysql_query($data_add);

                              echo 
          "Speicherung erfolgt";

                           }                
                      }
                      else
                      {
                          echo 
          "Die angegebenen Passwörter stimmen nicht überein...";
                      }

                    


                      
          mysql_close($verbindung);
                  
          ?>

                  <a href="add_betankung.php">
                  <div align="center">
                      <img src="/finanzmanagementplus/images/done_button.jpg" 
                      width="100" 
                      height="90" 
                      alt="Weitere Barausgaben erfassen" 
                      title="weitere Barausgaben" /> 
                  </a> </div> <br> <hr />




          <!--Bestätigungsmailscript-->

          <?php
              

          // Reporting!
          error_reporting ( -);
          ini_set 'display_errors'true );


          $DatabaseHost "localhost";
          $DatabaseUser "ZENSIERT";

          $DatabasePassword "ZENSIERT";
          $Database "admin_vermanag";
          $TableAktivierung "benutzer";

          $Absender "david.simon@email-simon.de";

          if(
          $_POST['Send'])
          {
              
          $DatabasePointer mysql_connect
              
          (
              
          $DatabaseHost
              
          $DatabaseUser
              
          $DatabasePassword
              
          );
              
          mysql_select_db
              
          (
              
          $Database
              
          $DatabasePointer
              
          );

              
          $_POST['emailadr'] = mysql_real_escape_string($_POST['emailadr']);

              
          $Aktivierungscode rand(199999999);

              
          mysql_query("INSERT INTO $benutzer 
              (Aktivierungscode, eMailAdresse, Aktiviert) 
              VALUES ('
          $Aktivierungscode', '".$_POST['emailadr']."', 'Nein')"$DatabasePointer);

              
          $ID mysql_insert_id();

              
          mail($_POST['emailadr'], "Registrierung abschließen"
              
          "Hallo,\n\num die Registrierung abzuschließen, klicken Sie bitte auf den folgenden Link:
              \n\nhttp://www.finanzmanagement-plus.de/fahrzeugmanagement/verbrauchsmanager/reg-aktivieren.php?ID=
          $ID&Aktivierungscode=$Aktivierungscode"
              
          "FROM: $Absender");
             
              echo
          "Um die Registrierung abzuschließen, 
              rufen Sie Ihr E-Mail-Postfach ab und klicken Sie auf den 
              Aktivierungslink in der soeben an Sie versandten E-Mail."
          ;
          }
          else
          {
          ?>

          <form action="" method="post">
          eMail: <input maxlength="255" name="emailadr" type="text">
          <br><input name="Send" type="submit" value="Absenden">
          </form>

          <?php
          }
          ?>


          <!--Bestätigungsmailscript-->


           </body>
          </html>

          Sowie die daten reg-aktivieren.php:

          PHP-Code:
          <?php
              
          // Reporting!
          error_reporting ( -);
          ini_set 'display_errors'true );

          $DatabaseHost "localhost";
          $DatabaseUser "ZENSIERT";

          $DatabasePassword "ZENSIERT";
          $Database "admin_vermanag";
          $TableAktivierung "benutzer";

          if(
          $_POST['ID'] && $_POST['Aktivierungscode'])
          {
              
          $DatabasePointer mysql_connect($DatabaseHost
              
          $DatabaseUser$DatabasePassword);
              
          mysql_select_db($Database$DatabasePointer);

              
          $_POST['ID']               = mysql_real_escape_string($_POST['ID']);
              
          $_POST['Aktivierungscode'] = mysql_real_escape_string($_POST['Aktivierungscode']);

              
          $ResultPointer mysql_query("SELECT ID FROM $Aktivierung_done 
              WHERE ID = '"
          .$_POST['ID']."' AND Aktivierungscode 
              = '"
          .$_POST['Aktivierungscode']."'"$DatabasePointer);

              if(
          mysql_num_rows($ResultPointer) > 0)
              {
                  
          mysql_query("UPDATE $Aktivierung_done SET Aktiviert = 'Ja' 
                  WHERE ID = '"
          .$_POST['ID']."'"$DatabasePointer);

                  echo
          "Vielen Dank für Ihre Registrierung. 
                  Der Aktivierungsprozess ist nun abgeschlossen."
          ;
              }
          }

          ?>
          Fülle ich das Registrierungsformular aus,
          werden die Daten, Vorname, nachname, eMail, Username,
          Passwort problemlos in die Datenbank eingetragen.

          Dort bekomme ich allerdings schon folgende Meldung angezeigt:
          Notice: Undefined index: Send in C:\Inetpub\vhosts\finanzmanagement-plus.de\httpdocs\fahrzeugmanagement\verbrauchsmana ger\registrierung.php on line 97

          Gebe ich anschließend die eMail-Adresse zum Versenden des Links an:
          Notice: Undefined variable: benutzer in C:\Inetpub\vhosts\finanzmanagement-plus.de\httpdocs\fahrzeugmanagement\verbrauchsmana ger\registrierung.php on line 117

          Klicke ich dann den Link in der eMail an:
          (http://.../reg-aktivieren.php?ID=0&A...scode=89895629)
          Notice: Undefined index: ID in C:\Inetpub\vhosts\finanzmanagement-plus.de\httpdocs\fahrzeugmanagement\verbrauchsmana ger\reg-aktivieren.php on line 14

          Kann leider nicht ganz nachvollziehen,
          welches Problem der mit den Variablen hat.

          Kommentar


          • #6
            Ein Hallo an alle im Forum! xD

            Zu deinem Problem:

            Er schmeißt Fehlermeldungen raus weil die $_POST Variablen nicht vorhanden sind, um dies zu beheben setz bei den if Abfragen ein isset(http://php.net/manual/de/function.isset.php) und anscheinend werden die Daten auch nicht übergeben oder die heißen anders.

            z.B.

            PHP-Code:
            if(isset($_POST['Send']))
            {

            Bei reg-aktivieren.php musst du die Daten aus der URL mit $_GET(http://de2.php.net/manual/en/reserved.variables.get.php) holen.

            z.B.

            PHP-Code:
            if(isset($_GET['ID']))
            {
              
            $id $_GET['ID'];

            Kommentar


            • #7
              Okay, dann werde ich das gleich mal versuchen...
              Was mich jetzt im allgemeinen noch gewundert hat:
              Wie versendet das Script denn eigentlich die eMail?

              Da muss doch dann ein SMTP-Server hinterstecken, oder?

              Kommentar


              • #8
                Wie die Funktion mail() funktioniert, steht leider immer noch viel zu ausführlich in der Doku!
                Du solltest Mailer-Klassen verwenden, genau wie Du es mit mysql_* auch gar nicht erst weitermachen solltest.
                Später werden diese Dinge sowieso nicht mehr geändert, getreu dem Motto: "Läuft doch! Was soll ich mir die Arbeit machen...".
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Bin gerade am basteln und versuch die fehlenden Variablen einzufügen.
                  Jetzt würde ich gerne, dass sich ein generierender Aktivierungscode
                  direkt mit dem Daten zum Datensatz in die DB schreibt:

                  PHP-Code:
                          <?php
                              
                              
                  // Reporting!
                              
                  error_reporting ( -);
                              
                  ini_set 'display_errors'true );
                              
                              
                  $verbindung mysql_connect("localhost""ZENSIERT""ZENSIERT")
                                  or die (
                  "Fehler im System");

                              
                  mysql_select_db ("admin_vermanag")
                                  or die (
                  "Verbindungserror");

                              
                              
                  $vorname $_POST["vorname"];
                              
                  $nachname $_POST["nachname"];
                              
                  $emailadr $_POST["emailadr"];
                              
                  $username $_POST["username"];
                              
                  $passwort $_POST["passwort"];
                              
                  $passwort_wdh $_POST["passwort_wdh"];
                              
                  $Aktivierungscode rand(199999999);

                              if (
                  $passwort == $passwort_wdh)
                              {
                                  if (
                  $vorname == "" or $nachname == "" or $emailadr == "" or $username == "" or $passwort == "")
                                  {
                                      echo 
                  "Es wurden nicht alle Felder vollstaendig ausgefuellt...";
                                  }
                                  else
                                  {
                                      
                  $data_add "INSERT INTO benutzer
                                      (
                                      Vorname, 
                                      Nachname, 
                                      eMailAdresse, 
                                      Username, 
                                      Passwort, 
                                      Aktivierungscode
                                      )
                                  
                                      VALUES
                                      (
                                      '
                  $vorname', 
                                      '
                  $nachname', 
                                      '
                  $emailadr', 
                                      '
                  $username', 
                                      '
                  $passwort',
                                      '
                  $Aktivierungscode',
                                      )"
                  ;

                                      
                  $eintragen mysql_query($data_add);

                                      echo 
                  "Speicherung erfolgt ";
                                      echo 
                  "Aktivierungscode: $Aktivierungscode";

                                   }                
                              }
                              else
                              {
                                  echo 
                  "Die angegebenen Passwörter stimmen nicht überein...";
                              }

                            


                              
                  mysql_close($verbindung);
                          
                  ?>
                  Hab´s noch in der alten MySQL-Version.
                  Aber, de erstellt nun keinen Datensatz.

                  Er gibt mir aus "Speicherung erfolgt"
                  sowie den generierten Aktivierungscode.
                  Ein neuer DS ist in der DB aber nicht ersichtlich.

                  Nehme ich die Sache mit dem Aktivierungscode raus,
                  funktioniert die Erzeugung des Datensatzes in der DB.

                  Kommentar


                  • #10
                    Vermutlich ist dann die Query falsch!
                    Als erstes fällt auf, daß Du mal das Komma nach dem letzten Wert beim Insert entfernen solltest.

                    Die Vorgehensweise zur Fehlersuche wäre:
                    1. gebuildede Query ausgeben lassen
                    2. evtl. in phpMyAdmin o.ä. Tool einfügen, um sich den Fehler "sagen" zu lassen.
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar

                    Lädt...
                    X