php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.12.2008, 15:08  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 5
Dennis307 befindet sich auf einem aufstrebenden Ast
Dennis307 eine Nachricht über ICQ schicken Dennis307 eine Nachricht über MSN schicken Dennis307 eine Nachricht über Skype™ schicken
Standard 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

Geändert von Dennis307 (27.12.2008 um 15:28 Uhr). Grund: Nicht vollständig...
Dennis307 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.12.2008, 15:20  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline  
Alt 27.12.2008, 15:25  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 5
Dennis307 befindet sich auf einem aufstrebenden Ast
Dennis307 eine Nachricht über ICQ schicken Dennis307 eine Nachricht über MSN schicken Dennis307 eine Nachricht über Skype™ schicken
Standard

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...)

Geändert von Dennis307 (27.12.2008 um 15:45 Uhr).
Dennis307 ist offline  
Alt 27.12.2008, 15:55  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

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();
}
?>
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.

Geändert von #Avedo (27.12.2008 um 15:59 Uhr).
#Avedo ist offline  
Alt 27.12.2008, 16:16  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 5
Dennis307 befindet sich auf einem aufstrebenden Ast
Dennis307 eine Nachricht über ICQ schicken Dennis307 eine Nachricht über MSN schicken Dennis307 eine Nachricht über Skype™ schicken
Standard

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...
Dennis307 ist offline  
Alt 27.12.2008, 18:14  
Erfahrener Benutzer
 
Registriert seit: 06.09.2008
Beiträge: 189
#Avedo befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
I'm so tired of slitting the throats of people calling me a violent psychopath.
#Avedo ist offline  
Alt 27.12.2008, 19:06  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 5
Dennis307 befindet sich auf einem aufstrebenden Ast
Dennis307 eine Nachricht über ICQ schicken Dennis307 eine Nachricht über MSN schicken Dennis307 eine Nachricht über Skype™ schicken
Standard

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.

Geändert von Dennis307 (27.12.2008 um 22:22 Uhr).
Dennis307 ist offline  
Alt 27.12.2008, 23:34  
Neuer Benutzer
 
Registriert seit: 27.12.2008
Beiträge: 5
Dennis307 befindet sich auf einem aufstrebenden Ast
Dennis307 eine Nachricht über ICQ schicken Dennis307 eine Nachricht über MSN schicken Dennis307 eine Nachricht über Skype™ schicken
Standard

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]

Geändert von Dennis307 (27.12.2008 um 23:40 Uhr).
Dennis307 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CURL in Seite einloggen und einen Teil parsen Matt PHP Tipps 2008 8 03.09.2009 22:30
[Erledigt] Seite wird falsch angezeigt und Code klappt nicht djscaleo PHP Tipps 2009 4 08.01.2009 15:12
[Erledigt] Header Location funktioniert nicht, wenn div's oder span's auf der Seite s phpels PHP Tipps 2008 24 01.12.2008 00:16
Hilfe, Seite im Internet Explorer Buggy trowman HTML, Usability und Barrierefreiheit 4 15.09.2008 08:32
Bei richtiger Eingabe Daten an nächste Seite versenden xx_heidi_xx PHP Tipps 2008 49 27.05.2008 14:56
Design und Code Trennen TeazY PHP Tipps 2008 29 21.05.2008 12:08
Krieg kein Objekt zurück auf includeter Seite NONNNNN PHP Tipps 2008 5 28.03.2008 19:25
Eintrag in DB und Wechsel zu anderer Seite Darson PHP Tipps 2008 25 14.01.2008 16:46
php code wird im browser ausgegeben janni PHP Tipps 2006 7 28.03.2006 16:01
[Erledigt] Lesbarkeit von Code Off-Topic Diskussionen 6 14.07.2005 14:48
Welche seite (Adresse) rief die aktuelle seite auf? PHP Tipps 2005-2 7 05.07.2005 15:02
Seite aktualisieren - Variableninhalte löschen patr1k PHP Tipps 2005-2 4 21.06.2005 17:28
Alle 60 Sec neue seite? PHP Tipps 2005 20 13.05.2005 15:27
[Erledigt] BB Code entfernen PHP Tipps 2005 2 25.04.2005 15:20
Seite wird nicht aktualisiert HTML, Usability und Barrierefreiheit 4 08.09.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
kikugalanet md5, md5 kikugalanet, php registrierung funktioniert nicht, php kikugalanet login

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum