2.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Habe ein großes Problem: Wenn sich ein user registriert passiert das immer als admin, sollte eigentlich nicht sein!!!! Bitte dringend um schnelle Hilfe!!!!

<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Admin-Script | Registrieren</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="publisher" content= "Philipp Seckel">
<meta name="robots" content= "INDEX,FOLLOW">
<meta name="author" content="Philipp Seckel">
<link href="css/style.css" type="text/css" rel="stylesheet">
</head>
<body>
<div id="main" align="center">
<?php
include 'config.php';

// Wenn Formular abgeschickt
if($_GET['go'] == "register")
{
$nick = strtolower($_POST['nick']);
$nick_exists = false;
$sa_exists = false;
$mail_exists = false;
// Setze Sessions für ggf. Korrektur
$_SESSION['nick'] = $_POST['nick'];
$_SESSION['mail'] = $_POST['mail'];

// Pürfe, ob Nick bereits vergeben
$sql = "SELECT regid,nick,mail FROM user";
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
if($row->mail == $_POST['mail'])
$mail_exists = true;
if($row->nick == $nick)
$nick_exists = true;
if($row->id == 1)
$sa_exists = true;
}

// Wenn nicht, dann
if(!$nick_exists)
// prüfe, ob Mail schon verwendet
if(!$mail_exists)
// Prüfe, ob kein Feld leer
if($_POST['nick'] != "" && $_POST['mail'] != "" && $_POST['pass'] != "")
//Mail-Adresse prüfen
if(ereg("@",$_POST['mail']) && ereg(".",$_POST['mail']))
// und beide Passwörter übereinstimmen
if($_POST['pass'] == $_POST['pass2'])
if($_POST['code'] == $_SESSION['captcha_code'])
// Dann registrieren
{
$pass = md5($_POST['pass']);
$mail = $_POST['mail'];
if(!$nick_exists)
if($sa_exists)
{
if(_regmail)
$sql = "INSERT INTO user (nick,mail,pass,is_admin,activated, status) VALUES ('$nick', '$mail', '$pass', 0, 0, 0)";
else $sql = "INSERT INTO user (nick,mail,pass,is_admin,activated, status) VALUES ('$nick', '$mail', '$pass', 0, 1, 0)";
$einschub = "als User";
}
else
{
$sql = "INSERT INTO user (nick,mail,pass,is_admin,activated, status) VALUES ('$nick', '$mail', '$pass', 1, 1, 1)";
$einschub = "als Administrator";
}
if(mysql_query($sql))
{
echo "Sie wurden erfolgreich $einschub registriert.";
if($einschub == "als User")
{
if(_regmail)
{
$code = md5($pass);
echo "<br><br>Es wurde eine Mail mit einem Aktivierungslink an $mail verschickt.<br>
Bitte klicken Sie auf diesen Link, um Ihren Account zu aktivieren!";
// Bestätigungsmail schicken
$betreff = "Erfolgreich bei "._tld." registriert!";
$from = "From: "._tld." <noreply@"._tld.">\n";
$from .= "Reply-To: chip@"._tld."\n";
$from .= "Content-Type: text/html\n";
$text = "Sie haben sich erfolgreich registriert. Bitte klicken sie auf den Link, um Ihre
Registrierung abzuschließen:<br><br>
<a href='"._webadr."?activate=$code'>"._webadr."?activate=$code</a>";
mail($mail, $betreff, $text, $from);
}
else echo "<br>Sie Können sicht jetzt einloggen.";
}
echo "<br>
<a href='index.php'>Startseite</a>";
unset($_SESSION['nick']);
unset($_SESSION['mail']);
}
else echo "Die Registrierung konnte nicht abgeschlossen werden.";
}
// Ansonsten entsprechenden Fehler ausgeben.
else echo "Der Sicherheitscode ist falsch! <a href='register.php'>Zurück</a>";
else echo "Die Passwörter stimmen nicht überein! <a href='register.php'>Zurück</a>";
else echo "Die eingegebene Mail-Adresse ist nicht gültig! <a href='register.php'>Zurück</a>";
else echo "Es fehlen erforderliche Angaben! <a href='register.php'>Zurück</a>";
else echo "Es ist bereits ein User mit dieser E-Mail-Adresse registriert! <a href='register.php'>Zurück</a>";
else echo "Der Benutzername ist bereits vergeben. Bitte einen anderen wählen! <a href='register.php'>Zurück</a>";
}
else
{
$val_nick = $_SESSION['nick'];
$val_mail = $_SESSION['mail'];
echo
"<form action='$phpself?go=register' method='POST'>
<table>
<tr><td>Username:</td><td><input type='text' name='nick' value='$val_nick'></td></tr>
<tr><td>E-Mail:</td><td><input type='text' name='mail' value='$val_mail'></td></tr>
<tr><td>Passwort:</td><td><input type='password' name='pass'></td></tr>
<tr><td>Passwort wiederholen:</td><td><input type='password' name='pass2'></td></tr>
<tr><td><img src='captcha.php' alt='code'></td><td><input type='text' name='code' maxlength='2' size='1'></td></tr>
<tr><td></td><td><a href='../index.php'><button type='button'>Abbrechen</button></a><br><input type='submit' value='Registrieren'></td></tr>
</table>";
if(_regmail) echo "Sie bekommen nach erfolgreicher Registrierung eine Mail mit einem Aktivierungslink zugesendet!";
echo "</form>";
}
mysql_close($connection);
?>
</div>
<div id="footer"><table><tr><td align="left">Erstellt: Philipp Seckel <a href="http://www.philipp-s.de?partner=4">www.philip

5 Antworten

0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
if(_regmail)


Herzlichen Glückwunsch :) _regmail ist keine Variable (da kein $ davorsteht), sondern damit eine Konstante. Ob die jemals definiert wurde ist nicht erkenntlich - hier im angegebenen Code jedenfalls nicht. Und damit ergibt obige Bedingung immer false, womit auch immer ein Admin angelegt wird.
0 Punkte
Beantwortet von
ja die funktion wurde in der config.php definiert...also ist das nicht der fehler...der fehler muss hier liegen:

($sa_exists)
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Wenn es eine Funktion ist, muss sie entsprechend geschrieben werden:

if (_regmail())


Wenn $sa_exists false bleibt, dann wird wohl kein Datensatz mit id 0 existieren.
0 Punkte
Beantwortet von
Habe das selbe Promblem...bin über jede Hilfe dankbar!
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Dann siehe obige Lösungsansätze. Andernfalls mehr Details.
...