Ankündigung

Einklappen
Keine Ankündigung bisher.

Registrierung geht nicht.. PHP-Seite wird als Code ausgegeben

Einklappen

Unconfigured Ad Widget

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

  • Registrierung geht nicht.. PHP-Seite wird als Code ausgegeben

    Ich habe vor, mir ein Fomular zu erstellen, durch welches sich die Benutzer in einer MySQL Datenbank registrieren können. Dafür habe ich diese HTML-Seite erstellt:
    Code:
    <form name="login" method="post" action="register.php">
    <table border="0" width="225" align="center"> <table border="0" width="225" align="center">
    <tr>
    <td width="219" bgcolor="#999999"> <td width="219" bgcolor="#999999">
    <p align="center"> <font color="white"> <span style="font-size:12pt;"> <b> Registrierung </ b> </ span> </ font> </ p>
    </td> </ td>
    </tr> </ tr>
    <tr>
    <td width="219"> <td width="219">
    <table border="0" width="282" align="center"> <table border="0" width="282" align="center">
    <tr>
    <td width="116"><span style="font-size:10pt;">Name:</span></td> 
    <td width="156"><input type="text" name="name" maxlength="100"></td> 
    </tr> </ tr>
    <tr>
    <td width="116"><span style="font-size:10pt;">Email:</span></td> 
    <td width="156"><input type="text" name="email" maxlength="100"></td>
    </tr> </ tr>
    <tr>
    <td width="116"><span style="font-size:10pt;">Username:</span></td> 
    <td width="156"><input type="text" name="username"></td> 
    </tr> </ tr>
    <tr>
    <td width="116"><span style="font-size:10pt;">Passwort:</span></td>
    <td width="156"><input type="password" name="password"></td> 
    </tr> </ tr>
    <tr>
    <td width="116">&nbsp;</td> <td width="116"> </ td>
    <td width="156"> <td width="156">
    <p align="right"><input type="submit" name="submit" value="Anmelden"></p>
    </td> </ td>
    </tr> </ tr>
    </table> </ table>
    </td> </ td>
    </tr> </ tr>
    <tr>
    <td width="219" bgcolor="#999999">&nbsp;</td> <td width="219" bgcolor="#999999"> </ td>
    </tr> </ tr>
    </table> </ table>
    </form> </ form>
    Wenn ich dort nun die Informationen eingebe sollten sie über PHP an die Datenbank gesendet werden:
    PHP-Code:
    <?PHP

    $dbhost 
    "localhost";
    $dbname "DB";
    $dbuser "root";
    $dbpass "0000";

    mysql_connect $dbhost$dbuser$dbpass)or die("Could not connect: ".mysql_error());
    mysql_select_db($dbname) or die(mysql_error());

        
    $name $_POST['name'];
    $email $_POST['email'];    
    $username $_POST['username'];
    $password md5(kikugalanet.$_POST['password']);
    $emailedpass $_POST['password'];


    $checkuser mysql_query("SELECT username FROM users WHERE username='$username'");

    $username_exist mysql_num_rows($checkuser);

    if(
    $username_exist 0){
        echo 
    "Der Benutzername ist bereits vergeben. Bitte wähle einen anderen Namen.";
        unset(
    $username);
        include 
    'register.html';
        exit();
    }

    $query "INSERT INTO accounts (name, email, username, password)
    VALUES('
    $name', '$email', '$username', '$password')";
    mysql_query($query) or die(mysql_error());
    mysql_close();

    echo 
    "Du hast dich erfolgreich registriert!";

    $ownsite [url]www.muster.com’;[/url]
    $webmaster ‘Max Mustermann’;
    $ownmail ‘mustermann@muster.com’;
        
    $subject "Du hast dich auf $ownsite erfolgreich angemeldet...";
    $message "Hallo $name, du bist jetzt bei uns registriert.  
        Zum Login verwende folgende Daten:
        Username: 
    $username
        Passwort: 
    $emailedpass
        
        Bitte bewahre diese Informationen sorgfältig auf.
        
        Mit freundlichen Grüßen,
        
    $webmaster";
        
    mail($email$subject$message"From: $ownsite <$ownmail>\nX-Mailer:PHP/" phpversion());
        
    echo 
    "Die Daten wurden an deine Emailadresse versendet.";

    ?>
    Das Passwort soll mit "kikugalanet" vor dem eigentliche Passwort verschlüsselt werden, ist kein Versehen.
    Nun habe ich das Problem, wenn die Daten in die HTML-Seite eingegeben werden udn bestätigt werden die PHP-Seite als Code ausgegeben wird.
    Könnt ihr mir helfen, wie sich das Problem lösen lässt?
    Ich weiß, ich sollte PHP erstmal richtig lernen, jedoch habe ich momentan nicht die Zeit, daher wollte ich es erstmal provisorisch zum laufen bringen.

    Ich bedanke mich für eure Unterstützung,
    Dennis


  • #2
    Der Code wird nicht geparst. Es fehlt am Anfang deines Scripts ein
    PHP-Code:
    <?php
    Zudem würde ich dir empfehlen an den Anfang deiner PHP-Datei error_reporting auf E_ALL zu setzen.
    MfG, Andy

    Kommentar


    • #3
      ahhh.. ich hab den Code aus versehn nicht vollständig kopiert, werde es mal editen... den <?php hatte ich eigentlich drinne...


      EDIT:Jetzt habe ich den <?PHP ergänzt(der fehlte wirklich, ich glaub es nicht)
      Ich bekomme jedoch nur das ausgegeben
      Code:
      0){ echo "Der Benutzername ist bereits vergeben. Bitte wähle einen anderen Namen."; unset($username); include 'register.html'; exit(); } $query = "INSERT INTO accounts (name, email, username, password) VALUES('$name', '$email', '$username', '$password')"; mysql_query($query) or die(mysql_error()); mysql_close(); echo "Du hast dich erfolgreich registriert!"; $ownsite = ‘www.muster.com’; $webmaster = ‘Max Mustermann’; $ownmail = ‘mustermann@muster.com’; $subject = "Du hast dich auf $ownsite erfolgreich angemeldet..."; $message = "Hallo $name, du bist jetzt bei uns registriert. Zum Login verwende folgende Daten: Username: $username Passwort: $emailedpass Bitte bewahre diese Informationen sorgfältig auf. Mit freundlichen Grüßen, $webmaster"; mail($email, $subject, $message, "From: $ownsite <$ownmail>\nX-Mailer:PHP/" . phpversion()); echo "Die Daten wurden an deine Emailadresse versendet."; ?>
      Also den gesammten Inhalt nach dem Datenbankzugriff(welche im übrigen auch unberührt geblieben ist, anscheinend da der skript nicht weiter als zur Überprüfung kommt...)

      Kommentar


      • #4
        Ich habe mal kurz eine kleine Klasse geschrieben. Ist nicht das optimalste, aber ich denke auf jeden Fall besser als dein Script. Die Klasse erwartet bei der Instanzierung ein MySqli Objekt und den Namen der Zieltabelle. Ein Passwort wird automatisch generiert. Wenn dir Methoden fehlen und du sie nicht selbst implementiert bekommst, dann frag einfach nach. Am Ende der Klasse siehst du, wie man sie verwendet.
        MfG, Andy

        PHP-Code:
        <?php
        error_reporting
        (E_ALL);

        /***
        * Class Register

        * The Register class enables the 
        * easy registration of new users. 
        *
        * @package Register
        * @version 0.1
        * @author Andreas Wilhelm <Andreas2209@web.de>
        * @copyright Andreas Wilhelm
        **/
        class Register
        {
            
        // private class variables
            
        private $db;
            private 
        $table;
            private 
        $errors = array();

            
        /**
            * Constructor - Is called when the class is instanced
            *
            * @access public
            * @param Obj $db
            * @param Str $table
            * @return NONE
            */
            
        public function __construct(mysqli $db$table)
            {
                
        // save class variables
                
        $this->db $db;
                
        $this->table $table;
            }

            
        /**
            * add() - Adds a new user
            *
            * @access public
            * @param Str $name
            * @param Str $mail
            * @param Str $nick
            * @param Str $pwd
            * @return Boolean
            */
            
        public function add($name$mail$nick)
            {
                
        // check input
                
        $this->isString($name'name');
                
        $this->length($name'name');
                
        $this->isMail($mail);
                
        $this->isString($nick'nick');
                
        $this->length($nick'nick');
                
        $this->exists($nick);
                
                if( 
        $this->isValid() )
                {
                    
        $pwd $this->getPwd();
                    
                    
        // decode password
                    
        $decoded md5($pwd);
                
                    
        // add new section
                    
        $sql "INSERT INTO {$this->table}
                            (`id`, `name`, `mail`, `nick`, `pwd`)
                        VALUES
                            ('', '
        {$name}', '{$mail}', '{$nick}', '{$decoded}')";
            
                    
        // send sql-query
                    
        $this->db->query($sql);
            
                    
        // check result
                    
        if($this->db->affected_rows <= 0)
                    {
                        throw new 
        Exception("Creation failed.");
                    }

                    return 
        true;
                }

                return 
        false;
            }
            
            
        /**
            * getPwd() - Creates password
            *
            * @access private
            * @return Str
            */
            
        private function getPwd($nick)
            {
                
        $pwd '';
            
                
        $abc range('a''z');
                
        $num range(09);
                
                
        $mix array_merge($abc$num);
            
                
        // creating array
                
        for( $i=0$i <= 8$i++)
                {
                    
        // get index
                    
        $index rand(036);
                
                    
        //die ASCII-Zeichen 97 - 122 sind die buchstaben a-z (Klein)
                    
        $pwd .= $mix$index ];
                }
                
                return 
        $pwd;
            }
            
            
        /**
            * exists() - Checks if an user already exists
            *
            * @access private
            * @param Str $nick
            * @return NONE
            */
            
        private function exists($nick)
            {
                
        // looking for user
                
        $sql "SELECT
                            *
                        FROM
                            
        {$this->table}
                        WHERE
                            nick = '
        {$nick}'
                        LIMIT 1"
        ;

                
        // send sql-query
                
        $this->db->query($sql);

                
        // check result
                
        if($this->db->affected_rows 0)
                {
                    
        $this->setError("User {$nick} already exists.");
                }        
            }

            
        /**
            * isString() - Checks if the given parameter is a string
            *
            * @access private
            * @param Mix $param
            * @param Str $name
            * @return NONE
            */
            
        private function isString($param$name)
            {
                if( !
        is_string($param) )
                {
                    
        $this->setError("Invaild {$name}.");
                }
            }
            
            
        /***
            * isMail() - Checks for valid email addresses
            *
            * @access private
            * @param Mix $param
            * @return NONE
            */
            
        private function isMail($param)
            {
                
        // set pattern for mail address
                
        $pattern '/^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+/';
                
                
        // check for mail address
                
        if( preg_match($pattern$param) )
                {
                    
        $this->setError("Invaild email-address.");
                }
            }

            
        /**
            * length() - Checks the length of a parameter
            *
            * @access private
            * @param Mix $param
            * @param Str $name
            * @return NONE
            */
            
        private function length($param$name)
            {
                if( !(
        strlen($param) < 5) )
                {
                    
        $this -> setError("To long {$name}.");
                }
                
                if( !(
        strlen($param) > 8))
                {
                    
        $this -> setError("To short {$name}.");
                }
            }

            
        /**
            * isValid() - Checks if there are any errors
            *
            * @access private
            * @return Boolean
            */
            
        private function isValid()
            {
                if( empty(
        $this->errors) )
                {
                        return 
        true;
                }
                
                return 
        false;
            }

            
        /**
            * setError() - Adds an error message to the array
            *
            * @access private
            * @param Str $msg
            * @return NONE
            */
            
        private function setError($msg)
            {
                
        $this->errors[] = $msg;
            }

            
        /**
            * __toString() - Returns the errors
            *
            * @access public
            * @return String
            */
            
        public function __toString()
            {
                
        // instance variable that holds return
                
        $return '';
            
                foreach( 
        $this->errors as $error)
                {
                    
        $return .= $error "<br />";
                }
            
                return 
        $return;
            }
        }

        try
        {
            
        // create connection to database
            
        @$mysqli = new mysqli("localhost""user""password""database");

            
        // instance trainings class
            
        $register= new Register($mysqli"user");

            
        // add new user
            
        $register->add("Hannes""hannes@web.de""Dr.No");
        }

        catch(
        Exception $e)
        {
            echo 
        $e->getMessage();
        }
        ?>

        Kommentar


        • #5
          Also der Code sieht ja wirklich recht ordenlich aus...
          ein paar Fragen meinerseits...
          wie kann ich es abändern, dass das passwort z.B. TEST ausgegeben wird, jedoch in der datenbank "kikugalanetTEST"(verschlüsselt) gespeichert wird?
          dann.. wie muss muss meine HTML umgebaut werden, damit sie mit der Klasse funktioniert?

          Da ich wirklich noch recht neu bin und ich wohl erst Anfang nächsten Jahres die Zeit finden werde, mich richtig einzuarbeiten, ist der Aufbau von der Logik her verständlich..jedoch kann cih leider mit vielen Begrifflichkeiten wenig anfangen...

          Kommentar


          • #6
            Wieso willst du "kikugalanetTEST" in die Datenbank schreiben? Das ist meiner Meinung nach nicht sehr sinnvoll. Wie du das in deine Seite einbindest kann ich dir gerne soäter zeigen, habe leider momentan auch nicht viel Zeit. Werde es aber wahrscheinlich morgen schaffen. Vielleicht kann dir dabei aber auch jemand anderes helfen.
            MfG, Andy

            Kommentar


            • #7
              das hätte ich vielleicht erwähnen sollen...
              Ich arbeite an einem Projekt für einen SpielServer eines Onlinespieles, Flyff, es ist zwar kostenlos, dennoch hatten ein paar Freunde und ich uns überlegt solch ein Projekt ins leben zu rufen. Wir haben Spaß am Spiel, nur leider ist mittlerweile an einigen Stellen das original Spiel ziemlich vollgespammt.
              Da jedoch meine Freunde noch weniger Ahnung vom programmieren haben als ich... ich komm ja wenigstens mit HTML zurecht und mit der Datenbank gehts auch noch... ist die Arbeit an mir hängen geblieben, und sie sind vorerst die "Tester" (Darf ja auch nicht unterschätzt werden^^)
              Ich hab mir nun die Datenbank und alles besorgt, brauch aber halt noch ein Registrierungformular für Außenstehende.

              Nun zum Thema, "kikugalanet" muss vorgeschrieben sein, da das Spiel das Passwort sonst nicht anerkennt, soll wohl ein zusätzlicher Schutzmechanismus sein...

              P.S.: Da es sich um ein kostenloses Spiel handelt und die Datenbank privat erstellt wurde (nicht von den original Server gezogen wurde) gehe ich davon aus, dass ich mich im legalen Rahmen befinde.
              Falls mir jemand wiedersprechen möchte, da es einen "Cash Shop" zum Erwerb(durch realGeld) von Items gibt, dies ist mir bewusst, ich denke jedoch, dass durch Anmeldung auf dem Privatem Server keine zahlungsbereiten Spieler verloren gehen, da bei mir diese zusätzlichen Items ohnehin in keinster Weiße vorkommen.(In dem Punkt bin ich mir aber noch nicht sicher) Ich selber spiele ja auch noch das original Spiel.. daher denke ich, dass viele dieses weiterhin benutzen werden, wenn auch nicht mehr so stark... ich hoffe, mein Standpunkt kann verstanden werden.

              Kommentar


              • #8
                Was mir grade noch eingefallen ist... könnte man es nicht so schrieben, dass das Passwort einmal "kikugalanet###" und zusätzlich nur des passwort in einer seperaten db gespeichert wird? z.B. für ein mit dem Server verbundendem Forum, oder wäre es einfacher zu sagen, dass das Forum das passwort mit "kikugalanet###" prüfen soll?

                Ich denke vorerst sollte aber die reine Serverregistration mit "kikugalanet" ausreichen... Ich möchte ja nicht, (wie wurde es im Eröffnungsthread genannt?) als kostenlose Arbeitsplätze missbrauchen...

                Ich müsste unbedingt mal einen finden, der mir da helfen könnte... aber momentan kennt sich noch in meinem Bekanntschaftskreis noch keiner so richtig mit PHP und MySQL aus... Daher hoffe ich, dass ich von der Community etwas Unterstützung bekomme...
                Ein Kumpel hab ich, der jetzt auch(wir sind 15... sind jetzt bald mit normal gym fertig...) Informatik an der Oberstufe machn will... vielleicht krieg ich den rum, in Richtung PHP sich etwas Wissen anzueignen(Verstärkt, als ich es versuche...) aber das ist ja ein anderes Thema... [Ich hoffe, dass wird jetzt nicht als Spam angesehen]

                Kommentar

                Lädt...
                X