Hilfe bei Login Script

Christoph Haas

Mitglied
Hallo,

ich hab mal wieder ein Problem mit einem Script :suspekt:
Es ist ein Loginscript welches mit einer MySQL Datenbank arbeitet.

Ich poste erstmal die Codes und später die Erklärung/Fragen.
Das Loginformular sieht folgendermaßen aus:
index.php
PHP:
<link href="../style.css" rel="stylesheet" type="text/css">
<form name="form1" method="post" action="save.php">
  <table width="365" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <th width="108" height="35" valign="middle" class="schrift" scope="col"><div align="right">Benutzername:</div></th>
      <th width="12" valign="middle" scope="col">&nbsp;</th>
      <th width="245" valign="middle" scope="col"><div align="left">
        <input name="benutzername" type="text" class="textfeld" id="benutzername" size="30">
      </div></th>
    </tr>
    <tr>
      <th height="35" valign="middle" class="schrift" scope="row"><div align="right">Passwort:</div></th>
      <td valign="middle">&nbsp;</td>
      <td valign="middle"><div align="left">
        <input name="passwort" type="password" class="textfeld" id="passwort" size="30">
      </div></td>
    </tr>
    <tr>
      <th height="0" scope="row">&nbsp;</th>
      <td>&nbsp;</td>
      <td valign="bottom"><input type="submit" name="Submit" value="Login"></td>
    </tr>
  </table>
</form>

save.php
PHP:
<style type="text/css">
<!--
body,td,th 		{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;	}
a:link 			{ text-decoration: none; color: #000000; font-weight: bold;	}
a:visited 		{ text-decoration: none;	}
a:hover 		{ text-decoration: underline;	}
a:active 		{ text-decoration: none;	}
a 				{ font-size: 10px;	}
-->
</style>
<?
include("../conf/config.inc.php");

$benutzername 			= $_POST['benutzername'];
$passwort 	 		= $_POST['passwort'];

mysql_connect($db_host, $db_username, $db_passwort);
mysql_select_db($db_name);

	$abfrage = "SELECT benutzername, passwort FROM admin WHERE benutzername = '$benutzername' AND passwort = '$passwort'";
   	$ergebnis = mysql_query($abfrage);
	if(mysql_num_rows($ergebnis))
      		{
		?><a href="einstellungen.php">Einstellungen</a><?
      		}
   		else
      		{
      		print "Benutzername / Passwort falsch!";
      		}
?>

und
einstellungen.php
PHP:
<?
echo "hier sollen die Einstellungen rein";
?>

So jetzt zu meiner Erklärung und zu meinen Fragen.
Wenn ich Passwort und Benutzername richtig eingebe, erscheint der Link "Einstellungen" mit welchem ich auf die einstellungen.php gehen kann. Gebe ich die Daten falsch ein, erscheint der Text "Benutzername / Passwort falsch!";
Soweit so gut, stimmt ja auch alles.

Jetzt kommt aber mein Problem. Wenn ich einfach http://.../einstellungen.php in die Adresszeile meines Browsers eingebe komme ich direkt zu den Einstellungen und umgehe das Loginscript.

Was muss ich machen, damit dann zB eine Fehlermeldung ausgegeben wird die zB "Geben Sie Benutzername und Passwort ein, um in die Einstellungen zu gelangen".

Wie müsste der Code in allen 3 Dateien aussehen!?
Ich Bitte um Hilfe - Danke

PS: sollte noch was unklar sein, einfach sagen ;-)
 
Hallo,

beim Erfolgreichen Einloggen einfach eine Sessionvariable anlegen und diese dann auf der Einstellungsseite abfragen ob sie gesetzt ist, wenn nicht Fehler ausgeben ;)
 
index.php
Code:
<?php session_start ();
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Die Zugangsdaten waren ungültig."; 
} 
?> 
<form action="save.php" method="post"> 
<table border="0" cellpadding="5" cellspacing="0" bgcolor="#A5A5A5">  
<tr>
      <td align="right">Name:</td>
<td> <input type="text" name="name" size="20"></td> 
    </tr>
    <tr>
      <td align="right">Kennwort: 
<td><input type="password" name="pwd" size="20"></td>
    </tr>
    <tr>
<td align="right"></td>
      <td>
  <input type="submit" value="Login">
<input type="reset" value=" Abbrechen"> 
</td>
    </tr>
  </table>
</form> 
</body> 
</html>

save.php
Code:
<?php 
session_start ();

$connectionid  = mysql_connect ("localhost", "benutzer", "passwort"); 
if (!mysql_select_db ("admin_db", $connectionid)) 
{ 
  die ("Konnte keine Verbindung zur Datenbank aufbauen"); 
} 

$sql = "SELECT ". 
    "Id, Nickname, Nachname, Vorname ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Nickname like '".$_REQUEST["name"]."') AND ". 
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')"; 
$result = mysql_query ($sql); 

if (mysql_num_rows ($result) > 0) 
{ 
  $data = mysql_fetch_array ($result); 

  $_SESSION["user_id"] = $data["Id"]; 
  $_SESSION["user_nickname"] = $data["Nickname"]; 
  $_SESSION["user_nachname"] = $data["Nachname"]; 
  $_SESSION["user_vorname"] = $data["Vorname"]; 

  header ("Location: index.php"); 
} 
else 
{ 
  header ("Location: index.php?fehler=1"); 
} 
?>

einstellungen.php
Code:
<?php 
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: index.php"); 
} 
?>

Hoffe das es auch geht ^^

LG
Linyx
 
Ich hab mein script jetzt mal mit einer "session" versehen. Das hat auch alles soweit geklappt.
Allerdings kommt jetzt immer wenn ich mich mit den richtigen Daten einlogge eine Fehlermeldung.

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at D:\Websites\admin\save.php:1) in D:\Websites\admin\save.php on line 25

PHP:
<style type="text/css">
<!--
body,td,th 		{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;	}
a:link 			{ text-decoration: none; color: #000000; font-weight: bold;	}
a:visited 		{ text-decoration: none;	}
a:hover 		{ text-decoration: underline;	}
a:active 		{ text-decoration: none;	}
a 				{ font-size: 10px;	}
-->
</style>
<?
include("../conf/config.inc.php");


$benutzername 		= $_POST['benutzername'];
$passwort 	 		= $_POST['passwort'];

mysql_connect($db_host, $db_username, $db_passwort);
mysql_select_db($db_name);

	$abfrage = "SELECT benutzername, passwort FROM admin WHERE benutzername = '$benutzername' AND passwort = '$passwort'";
   	$ergebnis = mysql_query($abfrage);
	if(mysql_num_rows($ergebnis))
      		{
			session_start();
			$_SESSION["benutzername"]= "$benutzname";	
			?><a href="einstellungen.php">Einstellungen</a><br><a href="logout.php">logout</a><?
      		}
   		else
      		{
      		print "Benutzername / Passwort falsch!";
      		}
?>
Was hat das zu bedeuten!?


Gruß
 
Hallo,

das erstellen einer Session muss immer vor jeglicher Ausgabe passieren, sprich vor Echos oder ähnlichem.
Das heisst immer am besten ganz am anfang der Datei.
 

Neue Beiträge

Zurück