Gästebuch ACP geht nicht

GalaxyWarrior

Erfahrenes Mitglied
Hi, ich habe mir mein erstes ACP für mein Gästebuch gescrieben, und habe nun das Problem, das wenn ich auf den Button: "Datensatz x Updaten" klicke, kommt zwar die page mit dem Ladebalken, aber wenn dann weitergeleitet wird, dann geht das Password verloren und es kommt Falscher Username oder falsches Password ( was halt unten bei else steht). Hat jemand ne idee, was ich tun kann?

Dies ist der Login
Code:
<html>
<head>
<title>..::Manuel-Ritter.de G&auml;stebuch::..</title>
<!-- hier kommt die styledatei hin, einfach das ziel bei href eintragen !-->
<link rel="stylesheet" type="text/css" href="../mformate.css"></link>

</head>
<body link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">
<?
 session_start();
?>

<DIV align=center>
      <p><img src="" width="600" height="60"></p>
</DIV>

<?
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
$os = $HTTP_SERVER_VARS["HTTP_USER_AGENT"];
// hier fängt das GB an. darüber ist das menü

?>
<center>
<form name="form1" method="post" action="<? echo "admincp.php?sid=".session_id().""?>">
  <table width="50%" bgcolor="#3f3f3f"> 
  		 	<tr>  
			  <td colspan="2">Vorhandene Benutzer können sich hier einloggen:</td>
		    </tr>  
  		 	<tr>  
			  <td><strong>Name:</strong></td>
			  <td><input type="text" name="Name" size="35"></td>
			</tr>  
			<tr>
			  <td><strong>Passwort:</strong></td>
			  <td><input name="Password" type="password" size="35"></td>
			</tr>  
  </table>
 
  <input name="send" type="submit">
	
  </form>
</center>
<?
 session_register(Password && Name);
?>

<!-- rechte maustasten sperre !-->
<SCRIPT language=JavaScript>
var message="";
function clickIE() {if (document.all) {(message);return false;}}
function clickNS(e) {if 
(document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {(message);return false;}}}
if (document.layers) 
{document.captureEvents(Event.MOUSEDOWN);document.onmousedown=clickNS;}
else{document.onmouseup=clickNS;document.oncontextmenu=clickIE;}
</SCRIPT>
<!-- rechte maustasten sperre !-->

</body>
</html>


Das ist das eigentliche ACP
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
<link rel="stylesheet" type="text/css" href="../mformate.css"></link>
</head>

<body>
<?
 session_start();

 $dbhost="";
 $dblogin="";
 $dbpwd="";
 $dbname="";
 
mysql_connect($dbhost, $dblogin, $dbpwd) or
 die("Verbindung zur Datenbank fehlgeschlagen");
mysql_select_db($dbname);

$result = mysql_query("SELECT * FROM login");
$daten = mysql_fetch_array($result);

 session_register(Password);
 session_register(Name);

$pass = md5($Password); //Passwort mit MD5 umwandeln zum Abgleich


if ($Name == "$daten[Name]" && $pass == "$daten[Password]") {

 echo "Erfolgreich eingeloggt";


 $Password = $daten[Passwordu];
 $Name = $daten[Name];

 $dbhost="";
 $dblogin="";
 $dbpwd="";
 $dbname="";
 
mysql_connect($dbhost, $dblogin, $dbpwd) or
 die("Verbindung zur Datenbank fehlgeschlagen");
mysql_select_db($dbname);

$result = mysql_query("SELECT * FROM gb ORDER BY ID DESC"); 

 //Daten l&ouml;schen
if($clear){ 

mysql_query("DELETE FROM gb WHERE ID=$clear LIMIT 1");

} 

while ($daten = mysql_fetch_array($result)) { ?>
<center>
		<table border="0" bgcolor="#3f3f3f" width="50%">
			<tr>
				<td width="23%"><? echo "ID" ?></td>
				<td width="77%"><? echo $daten[ID]; ?></td>
			</tr>
			<tr>
				<td><? echo "Datum" ?></td>
				<td><? echo $daten[Datum]; ?></td>
			</tr>
			<tr>
				<td><? echo "Name" ?></td>
				<td><? echo $daten[Name]; ?></td>
			</tr>
				<? $daten[OS] = str_replace("NT 5.0","2000", $daten[OS]); ?>
				<? $daten[OS] = str_replace("NT 5.1","XP", $daten[OS]); ?>
			<tr>
				<td valign="top"><? echo "OS und Browser" ; ?></td>
				<td valign="top"><? echo "$daten[OS]" ; ?></td>
			</tr>
			<tr>
				<td valign="top"><? echo "IP" ; ?></td>
				<td valign="top"><? echo "$daten[IP]" ; ?></td>
			</tr>
			<tr>
			  <td>Nachricht:</td>
			  <td>
				<form name="form1" method="post" action="<? echo ''.$PHP_SELF.'?sid='.session_id().'&update1='.$daten[ID].'' ?>">
				<textarea name="text1" cols="31" rows="8"><? echo $daten[Nachricht] ?></textarea>
			  	<input name="submit" type="submit" value="<? echo "Datensatz ".$daten[ID]." Aktualisieren"; ?>">
				</form>
			  </td>
		  </tr>
			<tr>
				<td>&nbsp;</td>
				<td><a href="<? echo 'admincp.php?sid='.session_id().'&clear='.$daten[ID].'' ?>">l&ouml;schen</a></td>		
			</tr>
			<tr>
			  <td colspan="2">
			    <? 
				if($update1){ mysql_query("UPDATE `gb` SET `Nachricht` = '$text1' WHERE `ID` = '$update1' LIMIT 1");}
				if($update1 || "" or $clear || "") { ?>Datensazupdate Läuft:<img src="loading.gif" width="166" height="14"><meta http-equiv="refresh" content="3; url=<? echo ''.$PHP_SELF.'?sid='.session_id().'' ?>"><? }
			    ?>
			   </td>
		  </tr>

		</table>
		
	<br>
	<br>
	<br>

<?

}

 }else{ echo "Falscher Unsername und oder Kennwort"; 
 echo "$pass";
 echo "$_POST[Password]";

 }


?>
</body>
</html>

In "$daten[Passwordu]" steht das PW unverschlüsselt, was aber auch keinen Erfolg brachte. Die ausgabe des falschen PW nach dem falschen einloggen ist nur um zu sehen ob das PW übergeben wurde.
Gruß GalaxyWarrior
 
PHP:
$result = mysql_query("SELECT * FROM login WHERE password=$eingegebenes_pw AND name=$eingegebener_name");
/* ist sicherer, als die daten aus der datenbank zu holen und dann in PHP zu vergleichen, 
vergleich lieber direkt, OB die daten überhaupt in der Datenbank stehen..
*/

gib auf der 2. Seite bitte mal das von der SESSION überlieferte password an, dann siehst du, ob er die session überhaupt gesetzt hat.

session_start(); GANZ an den anfang.. ist besser ;)
 
Meinst du ein echo $Password;
Das habe ich schon gemacht, das is das korrekte Password, nur wenn ich im acp weiterverlinke, dann gehts net. Auch der Tipp mit session_start am anfang bringt keinen Erfolg
Gruß GalaxyWarior
 
mach mal bitte an allen stellen, wo du session_register() benutzt hast $_SESSION['name'] = Wert;

Beispiel:

PHP:
$_SESSION['pass'] = $password;
 
// anstatt session_register(Password);


darauf greifst du dann einfach auf der nächsten seite so zu:


PHP:
echo $_SESSION['pass'];

weil 1. kenn ich mich mit session_register() nicht aus und 2. weiß ich nicht, wie du einen Wert dann ausgeben kannst, jedoch meiner Meinung nach nicht mit echo $password; da $password als normale variable deklariert ist...
 
Mir sticht als erstes das hier ins Auge:

PHP:
 session_register(Password && Name);

Ich denke einfach, dass da der Fehler liegt. Korrekt wäre:

PHP:
 session_register("Password", "Name");

Versuche das mal, und denke immer daran, die Variablennamen in der Parameterliste in Anführungszeichen zu setzen!

Ab PHP 4.1.0 sollte man session_register eh nicht mehr verwenden, sondern das superglobale Array $_SESSION, in dem man die Variablen direkt setzen kann:

PHP:
 $_SESSION["Name"] = $_POST["Name"];
 $_SESSION["Password"] = $_POST["Password"];

Um die Variablen aus der Session zu entfernen, genügt:

PHP:
 unset($_SESSION["Name"]);
 unset($_SESSION["Password"]);
 
ich hab das so gemacht wie du das gesagt hast CodAv
aber da ja bei weiteren links $_POST nicht mehr vorhanden ist, hab ich im form TAG von Datensatzupdat folgendes gemacht:
HTML:
  <input type="hidden" value="<? $_SESSION["Name"]; ?>" name="Name" size="35">    <input name="Password" type="hidden" value="<? $_SESSION["Password"]; ?>" size="35">
aber trozdem geht es nicht.
Was hab ich falsch gemacht?
Gruß GalaxyWarrior
 
generell, wenn du php-code im html code ausgeben willst:

PHP:
 <input type="hidden" value="<? echo $_SESSION['Name']; ?>" name="Name" size="35">	<input name="Password" type="hidden" value="<? echo $_SESSION['Password']; ?>" size="35">
 
// beachte das echo und vorallem: die >'< anstatt den >"<, denn da du in html schon >"< 
//verwendet hast, musst du in php die einfachen anführungszeichen ( ' ) nehmen.
 
allerdings brauchst du das in diesem fall gar nicht, denn auch wenn $_POST nicht vorhanden ist, du hast mit $_SESSION eine superglobales array, wie CodAv schon gesagt hat.

allerdings kannst bzw. solltest du $_SESSION[]; und session_register nicht zusammen verwenden, zumindest steht das so im manual.

Wie $_SESSION funktioniert habe ich dir oben schon beschrieben, aber CodAv kann es dir gerne nochmal ausführlich erklären.. vieleicht schaust du aber einfach mal bei php.net vorbei:

http://de3.php.net/manual/de/function.session-start.php

da steht genau beschrieben WIE du sie anwendest.
 
Das mit dem superglobalen array is mir schon klar, aber beim aktualliesieren läd der ja die seite neu, und weil ich mit $_SESSION ... blaablabla = $_POST blablabla
gemacht habe, und beim aktuallisieren ja wieder diese page geladen wird wo das mit post drinn sthet, dann wird odch der inhalt mit diesen neuen sachen überschrieben, was aber dann Leer is
 
So, hab es nun so gemacht, das ich eine page zwischen den login und das admin cp gemacht habe, wo das password überprüft wird.
Dort habe ich die stehen:
PHP:
$_SESSION['LOGTIN'] = "ok";
//Das steht unter dem if() welches das PW und den Namen prüft
und auf allen folgenden Seiten dann
PHP:
if ($_SESSION['LOGTIN'] == "ok") {   
$_SESSION['LOGTIN'] = "ok";
// und der rest unter dem if()
}
Doch das funktioniert nicht, warumm? normal müsste doch
PHP:
$_SESSION['LOGTIN']
den Wert "ok" enthalten.
Danke schon mal.
Gruß GalaxyWarrior
 
Zurück