Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler "Internal Server Error" bei Reistrierung?

Einklappen

Neue Werbung 2019

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

  • Fehler "Internal Server Error" bei Reistrierung?

    Hallo!

    Habe mir für die Registrierung von Benutzern ein Script erstellt.
    Es hat auch mal funktioniert, bis ich den Server gewechselt habe.
    Führe ich es auf dem neuen Server aus, kommt folgende Fehlermeldung:


    The server encountered an internal error or misconfiguration
    and was unable to complete your request. Please contact the
    server administrator to inform of the time the error occurred
    and of anything you might have done that may have caused the error.

    More information about this error may be available in the server error log.


    Das Script sieht folgendermaßen aus:


    start_reg.php

    PHP-Code:
    <!DOCTYPE html>

    <html lang="en">
        
        <head>
            <title>Login</title>
            <meta charset="utf-8" />
            <link rel="stylesheet" type="text/css" href="/css/ss_small.css" />
        </head>

        <body>

            
            <?php
                
    if (isset ($_GET["f"]) && $_GET["f"] == 1)
                {
                    echo 
    "<p class='fehler'>Login-Daten nicht korrekt</p>";
                }
            
    ?>  
            

             <h3 align="center">Registrieren!</h3> 
            
             <form method="post" action="registrierung.php">
                
                
                <table border="0" align="center">

                            <tr>
                                <td>Vorname:</td>
                                <td><input type="text" name="vorname" size="20" /></td>
                            </tr>

                            <tr>
                                <td>Nachname:</td>
                                <td><input type="text" name="nachname" size="20" /></td>
                            </tr>

                            <tr>
                                <td>eMail-Adresse:</td>
                                <td><input type="text" name="emailadr" size="20" /></td>
                            </tr>

                            <tr>
                                <td>Username:</td>
                                <td><input type="text" name="username" size="20" /></td>
                            </tr>

                            <tr>
                                <td>Passwort:</td>
                                <td><input type="password" name="passwort" size="20" /></td>
                            </tr>

                            <tr>
                                <td>Passwort wiederholen:</td>
                                <td><input type="password" name="passwort_wdh" size="20" /></td>
                            </tr>

                            <tr>
                                <td></td>
                                <td><input type="submit" value="Registrierung durchführen..." /></td>
                            </tr>

                </table> 
                
            </form>

          <!--Trennlinie-->  
          <br><hr />
          <!--Trennlinie-->
            
        </body>

    </html>

    die registrierung.php sieht dann so aus:

    PHP-Code:
    <!DOCTYPE html>

    <html lang="en">

        <head> 
            <meta charset="utf-8" />
            <title>Registrierung</title>
            <link rel="stylesheet" type="text/css" href="/css/ss_small.css" />
        </head>
        
        <body>
            
            <?php
                
                
    // Reporting!
                
    error_reporting ( -);
                
    ini_set 'display_errors'true );
                
                
    $verbindung mysql_connect("localhost""ZENSIERT""ZENSIERT")
                    or die (
    "Fehler im System");

                
    mysql_select_db ("ZENSIERT")
                    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 ausgefüllt...";
                    }
                    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);
            
    ?>



    <!--Bestätigungsmailscript-->

    <?php
        

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


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

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

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

        
        
    // DB-Verbindung herstellen
        
    $DatabasePointer mysql_connect
        
    (
        
    $DatabaseHost
        
    $DatabaseUser
        
    $DatabasePassword
        
    );
        
    mysql_select_db
        
    (
        
    $Database
        
    $DatabasePointer
        
    );
        
    // DB-Verbindung hergestellt

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


        
    // $ID = mysql_insert_id();

        
    mail($_POST['emailadr'], "Ihre Registrierung bei Verbrauchsmanager.de"
        
    "Hallo,\n\num die Registrierung abzuschließen,\nklicken Sie bitte auf den folgenden Link:
        \nhttp://www. ... .de/aktivieren.php
        \nund geben dort den folgenden Aktivierungscode ein: 
    $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."
    ;


    ?>


    <!--Bestätigungsmailscript-->


     </body>
    </html>
    Sieht vielleicht von euch einer einen Fehler?
    Oder hat einer ne Idee, woran es liegen könnte,
    dass die Fehlermeldung erscheint? Der Benutzer
    wird trotz der Meldung in der Datenbank angelegt.

    Gruß, David


  • #2
    PHP Errorlog?
    Wäre sehr hilfreich

    Kommentar


    • #3
      [Ironie]Vllt. hat der Server auch ein potentiell sehr gefährliches Skript entdeckt und verhindert daher die Ausführung.[/Ironie]

      Auch wenn das sicherlich nicht der Grund ist, warum das Skript nicht ausgeführt wird, so kann ich mit Sicherheit sagen, dass dein Skript eine große Sicherheitslücke darstellt.

      Schmeiß mal die mysql_ Erweiterung weg und stelle auf mysqli_ oder PDO mit prepared Statements um, dann verschwinden auch die Sicherheitslücken und du hast gleichzeitig noch Zukunftssicheren Code.

      PS: Der Link in der Signatur zum Thema mails sollte dich auch interessieren.

      PS2: Warum nutzt du nen mysql_escape für das Escapen einer E-Mailadresse?
      mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
      PHP-Code:
      echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

      Kommentar


      • #4
        Hi,

        if (isset ($_GET["f"]) && $_GET["f"] == 1)
        {
        echo "<p class='fehler'>Login-Daten nicht korrekt</p>";
        }
        - Sorry, aber das ist nicht wirklich ne Prüfung und könntest du auch einfach weglassen.

        <table border="0" align="center">
        ...
        <br><hr />
        - versuch mit CSS zu arbeiten!

        $verbindung = mysql_connect("localhost", "ZENSIERT", "ZENSIERT")
        or die ("Fehler im System");

        mysql_select_db ("ZENSIERT")
        or die ("Verbindungserror");
        - veraltet (wie bereits erwähnt). Nutze mysqli oder PDO.

        $vorname == ""
        - du kannst auch einfach if(empty($_POST["meinFeld"])){... nehmen

        $data_add = "INSERT INTO benutzer
        (
        Vorname,
        Nachname,
        eMailAdresse,
        Username,
        Passwort,
        Aktivierungscode
        )

        VALUES
        (
        '$vorname',
        '$nachname',
        '$emailadr',
        '$username',
        '$passwort',
        '$Aktivierungscode'
        )";

        $eintragen = mysql_query($data_add);
        - SQL Injection Problem!

        mysql_close($verbindung);
        - Warum?? Du brauchst die DB Verbindung doch ein paar Zeilen später wieder!

        // Reporting!
        error_reporting ( -1 );
        ini_set ( 'display_errors', true );
        - wenn, dann reicht es einmal im Code und nicht zweimal! Am besten auch in die ersten beiden Zeilenen deines Scriptes!

        $_POST['emailadr'] = mysql_real_escape_string($_POST['emailadr']);
        - ist an dieser Stelle völlig überflüssig (mysql_real_escape_string), da Du nichts in die DB einträgst! Das hättest du weiter oben gebraucht!!

        mail($_POST['emailadr'], "Ihre Registrierung bei Verbrauchsmanager.de",
        "Hallo,\n\num die Registrierung abzuschließen,\nklicken Sie bitte auf den folgenden Link:
        \nhttp://www. ... .de/aktivieren.php
        \nund geben dort den folgenden Aktivierungscode ein: $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.";
        - statt mail() nutze lieber eine vernünftige Mailerklasse, wie z.B: PHPMailer oder SWIFTMailer

        mfg wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Hallo!

          Erstmal vielen Dank für eure Hilfe,
          bin gerade mit der Optimierung beschäftigt.

          Nutze für den eMail-Versand der Aktivierungsmail nun PHPMailer
          und habe mir zum testen mal eine Art Test-Projekt erstellt.

          Führe ich die Funktion des PHPMailer´s aus, erfolgt zwar der
          eMail-Versand, aber es erscheinen folgende (Fehler-)Meldungen:

          Warning: require() [function.require]: Filename cannot be empty in C:\Inetpub\vhosts\... .de\httpdocs\function\testmail.php on line 13

          Warning: require() [function.require]: Filename cannot be empty in C:\Inetpub\vhosts\... .de\httpdocs\function\testmail.php on line 13

          Fatal error: require() [function.require]: Failed opening required '' (include_path='.;./includes;./pear') in C:\Inetpub\vhosts\... .de\httpdocs\function\testmail.php on line 13

          die erstellten Daten sehen wie folgt aus:


          activemail.php
          PHP-Code:
          <?php
              
          include("../phpmailer/class.phpmailer.php");
              
          function 
          send_email($empf$mailtext$betreff) {

          $mail = new PHPMailer();

          $mail->IsSMTP(); // send via SMTP
          $mail->Host "localhost"// SMTP servers
          $mail->SMTPAuth true// turn on SMTP authentication
          $mail->Username "aktivierung@... .de"// SMTP username
          $mail->Password "ZENSIERT"// SMTP password

          $mail->AddReplyTo("aktivierung@... .de",
                        
          "...");
          $mail->From "aktivierung@... .de";
          $mail->FromName "...";


          /// EMPFÄNGER EINTRAGEN ////
          $teile explode(";"$empf); reset ($teile);
          while (list (
          $key$val) = each ($teile)) {
          $mail->AddBCC($val);
          }

          $mail->IsHTML(true); // send as HTML

          $mail->Subject $betreff;
          $mail->Body $mailtext;
          $mail->AltBody $mailtext;

          if(!
          $mail->Send()) { exit; }

          $mail->ClearAttachments();
          $mail->ClearAddresses();
          }

          ?>
          Die "..." habe ich natürlich im Script ausgefüllt
          und nur hier aus Datenschutz eingefüht.


          testmail.php
          PHP-Code:
          <?php

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

          include(
          "activemail.php");

          $empf "David.Simon@... .de";
          $mailtext "Test";
          $betreff "Test";

          require 
          send_email($empf$mailtext$betreff);

          ?>
          Vielleicht kann mir einer einen Tipp geben,
          was ich hier wieder falsch gemacht habe?

          Gruß, David

          Kommentar


          • #6
            Geh mal zu der in der Fehlermeldung beschriebenen Datei/Zeile und wirf eine Exception, wenn der Dateiname leer ist. Dann siehst du anhand des Stacktrace wo der leere Dateiname verursacht wurde (wenn das dort nicht so schon klar wird).
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar


            • #7
              Hmm, das sagt mir jetzt so noch nicht so viel.
              Hast du da einen Tipp, wie ich vorgehen muss?

              Kommentar


              • #8
                Du kannst nicht so eine Funktion einbinden
                PHP-Code:
                <?php
                require send_email($empf$mailtext$betreff);
                PHP würde versuchen die Rückgabe der funktion send_email() einzubinden.

                So ist es richtig
                PHP-Code:
                <?php
                require 'activemail.php';
                send_email($empf$mailtext$betreff);
                Edit: Habe das require weiter oben zu spät gesehen, somit muss nur vor send_email() das require weg

                Grüße,
                Funfare

                Kommentar


                • #9
                  Bitte hashe deine Passwörter... Das haben meine Vorposter wohl übersehen, aber sowas ist eigentlich nicht mehr anders zu denken. Passwörter niemals im Klartext speichern.
                  Schau dir dazu die Funktion hash() von PHP an.
                  Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

                  Kommentar

                  Lädt...
                  X