WinFuture-Forum.de: [php/mysql] Kein Login Möglich Bei Memberscript - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php/mysql] Kein Login Möglich Bei Memberscript


#1 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 30. März 2005 - 16:11

Hallo zusammen.

Ich habe ein Problem mit einem selber geschriebenen Memberscript.
Erstmal muss ich erwähnen, dass es noch ganz am Anfang ist nur nur mal so als Test ist (es wird später noch richtig ausgebaut und optimiert).
Der Code ist bisher auch noch nicht sehr übersichtlich, aber das sollte man verstehen können.

Das ganze hier soll sozusagen ein Adminbereich sein. Zusätzlich kann man sich noch anmelden, einloggen und Einstellungen vornehmen.
Später wird das Anmelden, Einloggen und Einstellen voneinander getrennt, bisher ist alles noch in einer Datei.


Hier mal das gesamte Script:

<?
	include 'functions.php';
	db_connect();

    $action = $_GET['action'];

	$user = "";
	$pass = "";

	if(!isset($action))
	{
  $action = "pruefenobadmin";
	}

if($action == "pruefenobadmin")
{
    if(isset($_COOKIE['user_id']) and isset($_COOKIE['user_pw']))
    {
  $action = "einstellen";
	}

    else
    {
  $action = "login";
	}
}

if($action == "login" and empty($_COOKIE['user_id']) and empty($_COOKIE['user_pw']))
{
?>

	Bitte loggen Sie sich für den Administrationsbereich ein:<br><br>
	<form action="?action=loginpruefen" method="post">
	Benutzername:<br>
	<input type="text" name="benutzername">
	<br><br>
	Passwort:<br>
	<input type="password" name="passwort">
	<br><br>
	<input type="submit" value="Login">
	</form>

    <br><br>
    Sollten Sie noch nicht registriert sein,
	können Sie sich <a href="?action=registrieren">hier</a> anmelden!

<?
}

if($action == "login" and isset($_COOKIE['user_id']) and isset($_COOKIE['user_pw']))
{
	echo '<b>Fehler!</b><br>Sie sind bereits eingeloggt
	und können sich nicht noch einmal einloggen.<br><br>
	<a href="?action=einstellen">Weiter zur Administration</a>';
}

if(isset($benutzername) and !empty($benutzername))
{
	$user = mysql_real_escape_string($_POST['benutzername']);
}

if(isset($passwort) and !empty($passwort))
{
	$pass = mysql_real_escape_string($_POST['passwort']);
}


	$result = mysql_query("SELECT id FROM mitglieder WHERE
	benutzername = '".addslashes($user)."' AND passwort = '".addslashes($pass)."'");
	$mitglied = mysql_fetch_array($result);


if($action == "loginpruefen")
{
	if($user == "" or $pass == "")
	{
  echo '<b>Fehler!</b><br>Ihre Eingabe war leider nicht vollständig.<br><br>
  <a href="?action=login">Zurück zum Login</a>';
	}

	if (mysql_num_rows($result) == 0 and !empty($user) and !empty($pass))
	{
  echo '<b>Fehler!</b><br>Ihre Eingabe war leider nicht richtig.<br><br>
  <a href="?action=login">Zurück zum Login</a>';
	}

	if(mysql_num_rows($result) == 1)
	{
 	 setcookie("user_id", $mitglied['id'], time() + 3600);
 	 setcookie("user_pw", $pass, time() + 3600);

  echo 'Erfolgreich eingeloggt!<br><br>
  <a href="?action=einstellen">Weiter zur Administration</a>';
	}
}

if($action == "einstellen" and isset($_COOKIE['user_id']) and isset($_COOKIE['user_pw']))
{

	$dbsettings = mysql_query("SELECT * FROM einstellungen");

	$set = mysql_fetch_array($dbsettings);
?>

<span style="font-size:x-large; font-weight:bold;">Einstellungen</span><br><br>
<b>Wichtig:</b> Diese Einstellungen werden auf der gesamten Seite wirksam<br>
Bitte keine Felder leer lassen, sonst werden die Standard-HTML-Werte benutzt
<br><br>

<form action="?action=speichern" method="post">

Seitenname:<br>
<input type="text" size="20" name="seitenname" value="<? echo $set[seitenname]; ?>"><br><br>

Schriftart:<br>
<select name="schriftart">
<option selected><? echo $set[schriftart]; ?></option>
<option>Verdana</option>
<option>Arial</option>
<option>Courier New</option>
<option>Times New Roman</option>
<option>Tahoma</option>
<option>Comic Sans MS</option>
<option>MS Sans Serif</option>
<option>Lucida Sans</option>
</select><br><br>

Schriftgrad:<br>
<input type="text" size="20" name="schriftgrad" value="<? echo $set[schriftgrad]; ?>"><br><br>

Schriftfarbe:<br>
<input type="text" size="20" name="schriftfarbe" value="<? echo $set[schriftfarbe]; ?>"><br><br>

Linkfarbe:<br>
<input type="text" size="20" name="linkfarbe" value="<? echo $set[linkfarbe]; ?>"><br><br>

Linkfarbe Mouseover:<br>
<input type="text" size="20" name="linkfarbe_hover" value="<? echo $set[linkfarbe_hover]; ?>"><br><br>

Hintergundfarbe:<br>
<input type="text" size="20" name="hintergrundfarbe" value="<? echo $set[hintergrundfarbe]; ?>"><br><br>

<input type="submit" value="Speichern">
</form>

<br>
<center><a href="?action=logout">Logout</a></center>

<?
}

if($action == "einstellen" and empty($_COOKIE['user_id']) and empty($_COOKIE['user_pw']))
{
	echo '<b>Fehler!</b><br>Sie sind nicht eingeloggt.<br><br>
	<a href="?action=login">Zum Login</a>';
}

if($action == "speichern" and isset($_COOKIE['user_id']) and isset($_COOKIE['user_pw']))
{
	$seitenname = mysql_real_escape_string($_POST['seitenname']);
	$schriftart = mysql_real_escape_string($_POST['schriftart']);
	$schriftgrad = mysql_real_escape_string($_POST['schriftgrad']);
	$schriftfarbe = mysql_real_escape_string($_POST['schriftfarbe']);
	$linkfarbe = mysql_real_escape_string($_POST['linkfarbe']);
	$linkfarbe_hover = mysql_real_escape_string($_POST['linkfarbe_hover']);
	$hintergrundfarbe = mysql_real_escape_string($_POST['hintergrundfarbe']);

  $speichern = mysql_query("UPDATE einstellungen SET
       	 seitenname = '$seitenname',
       	 schriftart = '$schriftart',
       	 schriftgrad = '$schriftgrad',
       	 schriftfarbe = '$schriftfarbe',
       	 linkfarbe = '$linkfarbe',
       	 linkfarbe_hover = '$linkfarbe_hover',
       	 hintergrundfarbe = '$hintergrundfarbe'");

  if($speichern == true)
  { echo 'Die Einstellungen wurden erfolgreich gespeichert!<br><br>
  <a href="?action=einstellen">Zurück zu den Einstellungen</a>'; }

  if($speichern == false)
  { echo 'Es ist ein <b>Fehler</b> aufgetreten!<br><br>
  <a href="?action=einstellen">Zurück zu den Einstellungen</a>'; }
}

if($action == "logout")
{
	setcookie ("user_id", "", time() - 3600);
	setcookie ("user_pw", "", time() - 3600);

	echo 'Erfolgreich ausgeloggt!<br><br>
	<a href="?action=login">Zum Login</a>';
}

if($action == "registrieren")
{
?>

<form action="?action=registrierung" method="post" enctype="multipart/form-data">
<table align="center">

<tr>
<td align="center" colspan="2">
Bitte füllen Sie mindestens alle Pflichtfelder (*) aus
<br><br>
</td>
</tr>

<tr>
<td align="right">* Benutzername:</td>
<td align="left"><input type="text" size="20" maxlength="20" name="benutzername"></td>
</tr>

<tr>
<td align="right">* Passwort:</td>
<td align="left"><input type="password" size="20" maxlength="20" name="passwort"></td>
</tr>

<tr>
<td align="right">* Vorname:</td>
<td align="left"><input type="text" size="20" maxlength="20" name="vorname"></td>
</tr>

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

<tr>
<td align="right">* E-Mail:</td>
<td align="left"><input type="text" size="20" maxlength="50" name="email"></td>
</tr>

<tr>
<td align="right">E-Mail-Adresse anzeigen:</td>
<td><input type="checkbox" name="email_anzeigen" value="1" checked></td>
</tr>

<tr>
<td align="center" colspan="2"><br>
<input type="submit" value="Abschicken">
<input type="reset" value="Zurücksetzen">
<br><br>
<? back(""); ?>
</td>
</tr>

</table>
</form>

<?
}

if($action == "registrierung")
{
	$benutzername = mysql_real_escape_string($_POST['benutzername']);
	$benutzername = htmlentities($benutzername);
	$passwort = mysql_real_escape_string($_POST['passwort']);
	$passwort = htmlentities($passwort);
	$vorname = mysql_real_escape_string($_POST['vorname']);
	$vorname = htmlentities($vorname);
	$nachname = mysql_real_escape_string($_POST['nachname']);
	$nachname = htmlentities($nachname);
	$email = mysql_real_escape_string($_POST['email']);
	$email = htmlentities($email);
	$email_anzeigen = mysql_real_escape_string($_POST['email_anzeigen']);

	$datum = date("d.m.Y");
	$uhrzeit = date("H:i");
	$ip = getenv("REMOTE_ADDR");

  $anmelden = mysql_query("INSERT INTO mitglieder (
  benutzername, vorname, nachname, passwort,
  email, email_anzeigen, registrierungsdatum, registrierungsip)
  VALUES ('$benutzername', '$vorname', '$nachname', '$passwort',
  '$email', '$email_anzeigen', '$datum', '$ip')");

  if($anmelden == true)
  { echo 'Sie haben sich erfolgreich registriert!<br>
  Sie können sich nun mit Ihrem Benutzernamen und Ihrem Passwort einloggen.<br><br>
  <a href="?action=login">Zum Login</a>'; }

  if($anmelden == false)
  { echo 'Es ist ein <b>Fehler</b> aufgetreten!<br><br>';
  back("zur Registrierung"); }
}
?>


Das Ganze arbeitet mit einer MySQL Datenbank zusammen. Ich denke der Aufbau davon ist nicht entscheidend.
Bei diesem Script funktioniert eigentlich alles. Man kann sich Anmelden (wird in der DB gespeichert) und es erscheinen keine Fehlermeldungen.

Jetzt mein Problem:
Offline auf meinem Apache Xampp funktioniert alles einwandfrei und reibungslos. Habe es schon mehrfach getestet.
Nur online gibt es Probleme:
Und zwar kann man sich nicht einloggen.
Obwohl ein Benutzer in der DB richtig angelegt ist, kommt IMMER die Fehlermeldung von dieser Abfrage:

	if($user == "" or $pass == "")
	{
  echo '<b>Fehler!</b><br>Ihre Eingabe war leider nicht vollständig.<br><br>
  <a href="?action=login">Zurück zum Login</a>';
	}


Allerdings dürfte diese ja nur auftauchen, wenn ich nichts in das Login-Formular eingegeben habe.
Egal was ich eingebe, ob es Quark ist oder ob es richtig ist, es kommt immer dieser Fehler.
Wenn ich diese Abfrage raus mache, dann kommt gar nichts.
Also irgendwo muss ich einen Fehler haben, ich finde ihn aber nicht.

An was könnte es denn liegen?
Danke schon mal im Voraus für die Hilfe.
Falls ihr alle Dateien und die SQL-Informationen benötigt, dann schreibt es bitte.

Grüße!
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

Anzeige



#2 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 30. März 2005 - 16:24

An folgender Stelle gibt es schon ein Problem:

if(isset($benutzername) and !empty($benutzername))
{
$user = mysql_real_escape_string($_POST['benutzername']);
}

if(isset($passwort) and !empty($passwort))
{
...


Zuerstmal müsste man sowas
if(isset($benutzername) and !empty($benutzername))

zu
if($benutzername)

zusammenfassen können :thumbsup:

Nun aber zum Problem: Damit die Variablen $benutzername und $passwort zu diesem Zeitpunkt überhaupt existieren, muss register_globals aktiviert sein. Das ist auf deinem PC scheinbar der Fall, auf dem Webserver (glücklicherweise!) nicht (ist ein Sicherheitsrisiko).
Um das Skript also lauffähig zu machen, musst du irgendwo vorher
$benutzername = $_POST['benutzername'];
$passwort= $_POST['passwort'];


hinzufügen. Da ich seit heute auch die Funktion 'extract' kenne, müsste es auch so

extract($_POST);


funktionieren, aber das würde wiederrum das Sicherheitsrisiko von register_globals hervorrufen (also nicht tun).
0

#3 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 30. März 2005 - 18:02

Danke @Floele nun funktioniert es, aber die Cookies können noch nicht richtig gesetzt werden....
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#4 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 30. März 2005 - 18:28

Da gilt das gleiche wie mit der header() Funktion, sie müssen am Anfang der Seite vor jeglichem Inhalt gesetzt werden. Ist schließlich kein Javascript was du da benutzt :thumbsup:

Dieser Beitrag wurde von Floele bearbeitet: 30. März 2005 - 18:28

0

#5 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 30. März 2005 - 19:01

So hallo Floele.

Ich habe hier mal die URL zu dem Script.

Also logge dich mal ein mit Benutzer "Admin" und Passwort "admin".
Die Cookies können nicht gesetzt werden.

Wenn ich diese If-Abfrage ganz nach oben mache (wo ich die Cookies setzen will und die DB überprüfe) dann geht es doch auch nicht).

Kannst du mein Script oben mal so ergänzen, dass die Cookies richtig gesetzt werden?

Danke!
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#6 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 30. März 2005 - 19:24

Das geht leider nicht ganz so einfach, weil ja bei den Überprüfungen auch Text ausgegeben wird. Der muss natürlich irgendwoanders hin und nicht an den Datei Anfang. Beispiel wie es sein sollte:

if(Überprüfung)
{
 setcookie();
 setcookie();
 $output = 'Erfolgreich eingeloggt';
}

--- später ---
<form>
<?php echo $output; ?>
...

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0