PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Registerscript - pHp



NSK
20.03.2010, 22:27
So hier der Script, er soll Username und Passwort in die Datenbank einfügen und Hidden IP & Datum loggen.
Allerdings funktioniert er nicht.
Was ist falsch?


<?php
$host = "localhost"; //die domain des Forums
$user = "geheim";
$password = "geheim";


$db = mysql_connect($host, $user, $password) or die("Fehler beim Verbinden mit der Datenbank");
$db_selected = mysql_select_db('geheim', $db);


?>
<?php
$ipi = getenv("REMOTE_ADDR");
$zeit = date("d.m.Y");
?>
<?php
$sql = "INSERT INTO members
(
date,
ip,
username,
password
)
VALUES
(
'" . addslashes($_POST["date"]) . "',
'" . addslashes($_POST["ip"]) . "',
'" . addslashes($_POST["username"]) . "',
'" . addslashes($_POST["password"]) . "'

)
";
mysql_query($sql) OR die(mysql_error());
?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Registrieren</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<b>
Wenn nach dem Abschicken die Seite neu geladen wird, ist die Registrierung erfolgt.
<br>
~ihr Protonix Team
</b>

<form name="form1" method="post" action="register.php">
<table width="50%" border="0">

<input type="hidden" name="date" value="<?php echo $zeit ?>" />
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<tr>
<td height="29">Username:</td>
<td><input name="username" type="text" id="username" size="30"></td>
</tr>
<tr>
<td height="27">Passwort</td>
<td><input name="password" type="text" id="password" size="30"></td>
</tr>
<tr>
<td width="100%"><input type="submit" value="Registrieren"></td>
</tr>
</table>

</form>;
<?php
}elseif(!isset($_POST['username']) || $_POST['username'] == ""){
$inhalt .= '<p align="center">Du hast den Benutzernamen vergessen!<br><br><a href="register.php">Zur&uuml;ck</a></p>';
}elseif(!isset($_POST['password']) || $_POST['password'] == "") {
$inhalt .= '<p align="center">Ein Passwort brauchen wir schon ;-)<br><br><a href="register.php">Zur&uuml;ck</a></p>';
}else{
$query = @mysql_query("SELECT username FROM members".$digit." WHERE user = '".$_POST['username']."'");
$result = @mysql_fetch_array($query);
if($_POST['username'] == $result['user']) {
$inhalt .= '<p align="center">Den Benutzernamen gibt es schon<br><br><a href="register.php">Zur&uuml;ck</a></p>';
die;
}

?>
</body>
</html>

Danke MfG

moppelito
20.03.2010, 22:30
Was für ein Fehler Kommt denn? Oder was passiert?

NSK
20.03.2010, 22:45
Was für ein Fehler Kommt denn? Oder was passiert?
Parse error: syntax error, unexpected '}' in /usr/export/www/vhosts/funnetwork/hosting/geheim/register.php on line 72

Das ist der vorherige Script der optimal funktionierte:


<?php
$host = "localhost"; //


$user = "geheim";
$password = "geheim";


$db = mysql_connect($host, $user, $password) or die("Fehler beim Verbinden mit der Datenbank");
$db_selected = mysql_select_db('geheim', $db);


?>
<?php
$ipi = getenv("REMOTE_ADDR");
$zeit = date("d.m.Y");
?>
<?php
$sql = "INSERT INTO members
(
date,
ip,
username,
password
)
VALUES
(
'" . addslashes($_POST["date"]) . "',
'" . addslashes($_POST["ip"]) . "',
'" . addslashes($_POST["username"]) . "',
'" . addslashes($_POST["password"]) . "'

)
";
mysql_query($sql) OR die(mysql_error());
?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Registrieren</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<b>
Wenn nach dem Abschicken die Seite neu geladen wird, ist die Registrierung erfolgt.
<br>
~ihr Protonix Team
</b>
<form name="form1" method="post" action="register.php">
<table width="50%" border="0">

<input type="hidden" name="date" value="<?php echo $zeit ?>" />
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<tr>
<td height="29">Username:</td>
<td><input name="username" type="text" id="username" size="30"></td>
</tr>
<tr>
<td height="27">Passwort</td>
<td><input name="password" type="text" id="password" size="30"></td>
</tr>
<tr>
<td width="100%"><input type="submit" value="Registrieren"></td>
</tr>
</table>
</form>
</body>
</html> http://adserver2.clipkit.de/www/delivery/avw.php?zoneid=82&source=funpic.de&cb=101843374&n=a3fdcba5&ct0=%7Bclickurl%7D

Allerdings überprüft der nicht ob der User schon existiert.
Weiß jemand was?

MfG

Also der alte Script hat alles in die Datenbank geschrieben, allerdings
konnte man alles Eintragen, auch nur Leerzeichen oder Usernamen doppelt.

MfG

moppelito
20.03.2010, 22:52
In zeile 72 ist vor dem else ein } zuviel!

NSK
20.03.2010, 23:03
In zeile 72 ist vor dem else ein } zuviel!
Ja soweit war ich aber dann kommt dieser Fehler:

Parse error: syntax error, unexpected T_ELSEIF in /usr/export/www/vhosts/funnetwork/hosting/geheim/register.php on line 72

http://adserver2.clipkit.de/www/delivery/avw.php?zoneid=82&source=funpic.de&cb=26635878&n=a3fdcba5&ct0=%7Bclickurl%7D

Ich versteh das nicht ganz.


MfG

moppelito
20.03.2010, 23:04
versuchs mla damit:


<?php
$host = "localhost"; //die domain des Forums
$user = "geheim";
$password = "geheim";


$db = mysql_connect($host, $user, $password) or die("Fehler beim Verbinden mit der Datenbank");
$db_selected = mysql_select_db('geheim', $db);


?>
<?php
$ipi = getenv("REMOTE_ADDR");
$zeit = date("d.m.Y");
?>
<?php
$sql = "INSERT INTO members
(
date,
ip,
username,
password
)
VALUES
(
'" . addslashes($_POST["date"]) . "',
'" . addslashes($_POST["ip"]) . "',
'" . addslashes($_POST["username"]) . "',
'" . addslashes($_POST["password"]) . "'

)
";
mysql_query($sql) OR die(mysql_error());
?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Registrieren</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<b>
Wenn nach dem Abschicken die Seite neu geladen wird, ist die Registrierung erfolgt.
<br>
~ihr Protonix Team
</b>

<form name="form1" method="post" action="register.php">
<table width="50%" border="0">

<input type="hidden" name="date" value="<?php echo $zeit ?>" />
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<tr>
<td height="29">Username:</td>
<td><input name="username" type="text" id="username" size="30"></td>
</tr>
<tr>
<td height="27">Passwort</td>
<td><input name="password" type="text" id="password" size="30"></td>
</tr>
<tr>
<td width="100%"><input type="submit" value="Registrieren"></td>
</tr>
</table>

</form>
<?php
elseif(!isset($_POST['username']) || $_POST['username'] == ""){
$inhalt .= '<p align="center">Du hast den Benutzernamen vergessen!<br><br><a href="register.php">Zur&uuml;ck</a></p>';
}elseif(!isset($_POST['password']) || $_POST['password'] == "") {
$inhalt .= '<p align="center">Ein Passwort brauchen wir schon ;-)<br><br><a href="register.php">Zur&uuml;ck</a></p>';
}else{
$query = @mysql_query("SELECT username FROM members".$digit." WHERE user = '".$_POST['username']."'");
$result = @mysql_fetch_array($query);
if($_POST['username'] == $result['user']) {
$inhalt .= '<p align="center">Den Benutzernamen gibt es schon<br><br><a href="register.php">Zur&uuml;ck</a></p>';
die;
}
}
?>
</body>
</html>

kalachnikov
20.03.2010, 23:12
du musst etwas auf die Reihenfolge achten. Der PHP-Interpreter geht nämlich von oben nach unten. Bei mysql_connect würde ich noch ein "@" davorsetzen.

NSK
20.03.2010, 23:43
Funktioniert immernoch nicht :(
Thx trotzdem

MfG

Weiß jemand eine lösung?


MfG

Weiß jemand eine Antwort?

MfG

VeN0m
20.03.2010, 23:50
1.) Wieso schließt und öffnest Du ständig PHP?


?>
<?php
$ipi = getenv("REMOTE_ADDR");


und



?>
<?php
$sql = "INSERT INTO members


Es reicht eigentlich, wenn Du am Anfang des Dokuments <?php schreibst und am Ende mit ?> aufhörst. Wenn Du zwischendrin HTML benutzt, kanns Du dieses entweder per



print 'HTML Code';


ausgeben, wie ich es meist mache, oder vor dem HTML-Code ein ?> und danach ein <?php setzen.

2.)
getenv("REMOTE_ADDR") kannst Du mit $_SERVER['REMOTE_ADDR'] tauschen. Ich glaube, getenv nutzt man heutzutage nicht mehr.

3.)
elseif(!isset($_POST['username']) || $_POST['username'] == ""){

Normalerweise beginnt man eine if-Anweisung mit if (wenn), nicht mit elseif (ansonsten, wenn).
Das sollte eigentlich auch den Fehler hervorrufen: Unerwartetes elseif, da hier eigentlich if angebracht wäre.



if(Bedingung) {

Anweisung

} elseif(Bedingung) {

Anweisung

} else {

Anweisung

}


4.)

Der PHP-Interpreter per CMD meint zwar, es gäbe keine MySQL-Verbindung, aber ansonsten läuft das Script:



<?php
$host = "localhost"; //die domain des Forums
$user = "geheim";
$password = "geheim";


$db = mysql_connect($host, $user, $password) or die("Fehler beim Verbinden mit der Datenbank");
$db_selected = mysql_select_db('geheim', $db);


$ipi = getenv("REMOTE_ADDR");
$zeit = date("d.m.Y");

$sql = "INSERT INTO members
(
date,
ip,
username,
password
)
VALUES
(
'" . addslashes($_POST["date"]) . "',
'" . addslashes($_POST["ip"]) . "',
'" . addslashes($_POST["username"]) . "',
'" . addslashes($_POST["password"]) . "'

)
";
mysql_query($sql) OR die(mysql_error());
?>



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Registrieren</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<b>
Wenn nach dem Abschicken die Seite neu geladen wird, ist die Registrierung erfolgt.
<br>
~ihr Protonix Team
</b>

<form name="form1" method="post" action="register.php">
<table width="50%" border="0">

<input type="hidden" name="date" value="<?php echo $zeit ?>" />
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<tr>
<td height="29">Username:</td>
<td><input name="username" type="text" id="username" size="30"></td>
</tr>
<tr>
<td height="27">Passwort</td>
<td><input name="password" type="text" id="password" size="30"></td>
</tr>
<tr>
<td width="100%"><input type="submit" value="Registrieren"></td>
</tr>
</table>

</form>
<?php
if(!isset($_POST['username']) || $_POST['username'] == ""){
$inhalt .= '<p align="center">Du hast den Benutzernamen vergessen!<br><br><a href="register.php">Zur&uuml;ck</a></p>';
}elseif(!isset($_POST['password']) || $_POST['password'] == "") {
$inhalt .= '<p align="center">Ein Passwort brauchen wir schon ;-)<br><br><a href="register.php">Zur&uuml;ck</a></p>';
}else{
$query = @mysql_query("SELECT username FROM members".$digit." WHERE user = '".$_POST['username']."'");
$result = @mysql_fetch_array($query);
if($_POST['username'] == $result['user']) {
$inhalt .= '<p align="center">Den Benutzernamen gibt es schon<br><br><a href="register.php">Zur&uuml;ck</a></p>';
die;
}
}
?>
</body>
</html>


Ich hoffe, ich konnte Dir helfen.

NSK
21.03.2010, 00:05
1.)
Ich hoffe, ich konnte Dir helfen.
Ja konntest du, Danke allerdings überprüft das Script trotzdem nicht ob der Username mehrfach vorhanden ist oder nicht.
Woran liegt das?
Tabellenname lautet: members
und die Reihe: username

Server: Localhost Tabelle: members


Feld Typ Kollation Attribute Null Standard Extra Aktion

username varchar(50) latin1_german2_ci Nein





password varchar(50) latin1_german2_ci Nein





date varchar(50) latin1_german2_ci Nein





ip varchar(50) latin1_german2_ci Nein







MfG

Was muss ich ändern , ich sitz nämlich schon ziemlich lange an dem Code.
Und komm nicht auf die Lösung



MfG

GregorSamsa
21.03.2010, 00:18
Da hast du zwei möglichkeit, entweder das Feld auf unique setzen oder vorher ein SELECT auf den Username.

VeN0m
21.03.2010, 00:19
Ach, den Query hatte ich mir noch garnicht angesehen.

1.)

'" . addslashes($_POST["password"]) . "'


Versuch htmlentities() für Strings, damit diese konvertiert werden und XSS z.B. nicht möglich ist.
Für Integer nutzt Du intval().
Außerdem solltest Du die Werte mit mysql_real_escape_string() (http://de2.php.net/manual/de/function.mysql-real-escape-string.php) behandeln statt mit addslashes() ;).

2.) Passwörter nicht per md5() zu verschlüsseln ist unsicher. Aber für einen Anfänger(?), der sich die Materie mal ansehen möchte, durchaus in Ordnung.

3.) Nur ein Tipp: Daten kann man lieber als Datestamp speichern.


$datestamp = time();

Dann erhältst Du z.B. sowas: 1269130314.
Dieser Stempel lässt sich per



$datum = strftime("%d-%m-%Y","1269130314");


ganz leicht in 21-03-2010 umrechnen.
Der Vorteil bei dieser Methode ist, dass Du den Timestamp mit strftime() (http://de2.php.net/manual/de/function.strftime.php) in jedes beliebige Format umrechnen kannst ;).

4.) Ich sehe hier garkeine Abfrage, die prüft, ob der Username bereits vorhanden ist.


$res = mysql_query("SELECT * FROM `members` WHERE `members`.`username` LIKE '".htmlentities($_POST['username'])."'");
$row = mysql_fetch_array($res);

if($row[0]) {

die("Der Username ist bereits vergeben!");

} else {

$sql = "INSERT INTO members
(
date,
ip,
username,
password
)
VALUES
(
'" . addslashes($_POST["date"]) . "',
'" . addslashes($_POST["ip"]) . "',
'" . addslashes($_POST["username"]) . "',
'" . addslashes($_POST["password"]) . "'

)
";
mysql_query($sql) OR die(mysql_error());

}


So müsste es gehen.
Was weiterhin sinnvoll wäre ist, das Datenbankfeld "username" auf "unique" zu stellen.
Wie das genau geht kann ich Dir gerade nicht sagen, da meine PHPMyAdmin-Version scheinbar sehr veraltet ist... ^^