Undefinierte Variablen - warum?

preko

Erfahrenes Mitglied
Hi,

ich habe folgendes Script (logincheck.php) aufgesetzt (die Zeilennummer habe ich davorgeschrieben):

PHP:
[1] <?php
[2] echo "<link rel='Stylesheet' type='text/css' href='css/text.css' media='screen' />";
[3] echo "<link rel='Stylesheet' type='text/css' href='css/print.css' media='print' />";
[4] include ("pass.php");
[5] $db = @mysql_connect($host, $user, $password)
[6] 	or die ("Verbindung mit MySQL-Server fehlgeschlagen!");
[7] @mysql_select_db($database, $db)
[8] 	or die ("Verbindung mit Datenbank fehlgeschlagen!");
[9] $sql_query = "SELECT 
[10]             `betreuernr`,
[11]             `password`,
[12]             `vorname`,
[13]             `name`
[14]       FROM 
[15]             `betreuerdaten`
[16]       WHERE
[17]             betreuernr='".$_POST['betreuernr']."'
[18]       AND
[19]       			password='".sha1($_POST['password'])."'
[20]     "; 
[21]   if( !$result = mysql_query($sql_query, $db) ) { 
[22]     echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>"; 
[23]     exit; 
[24]   } 
[25] mysql_close($db); 
[26]  
[27]   echo ($_POST['betreuernr'])."<br />";
[28]   echo ($_POST['password'])."<br />";
[29]   echo (sha1($_POST['password']))."<br /><br />";
[30]   echo ($vorname)."<br />";
[31]   echo ($name);
[32] ?>

Daraufhin wird die Betreuernummer dargestellt, dass Passwort in Klartext und dann mit SHA1 maskiert - soweit ist die Welt in Ordnung.

Danach, wenn Vorname und Name dargestellt werden sollen, kommt die Fehlermeldung:

PHP Notice: Undefined variable: vorname in c:\..logincheck.php on line 30
PHP Notice: Undefined variable: name in c:\..logincheck.php on line 31

Vielleicht zur Ergänzung ein Auszug aus dem davorgeschalteten Loginscript:

PHP:
...
<div style="width:400px;margin:150px auto;text-align:left;background-color:#FF8306;border:1px solid #FF0000;">
<p><center>Bitte geben Sie Ihre Zugangsdaten ein:</center></p>
	<form action="logincheck.php" method="post">
		<table width="400" border="0" cellpadding="1" cellspacing="5">
			<tr>
				<td width="195"><strong>PIN</strong></td><td width="10"align="center">:</td>
				<td width="200"><input name="betreuernr" type="text" size="4" maxlenght="4" tabindex="1"></td>
			</tr>
			<tr>
				<td width="195"><strong>Passwort</strong></td>
				<td align="center">:</td><td width="200"><input name="password" type="password" size="20" tabindex="2"></td>
			</tr>
			<tr>
				<td width="195"><center><input type="submit" value=" Anmelden " tabindex="3"></center></td>
				<td align="center"></td><td width="200"><center><input type="reset" value=" Abbrechen " tabindex="4"></center></td>
			</tr>
		</table>
	</form>
</div>
...
Ich verstehe jedoch nicht warum dies so ist. Die Betreuernummer existiert sowohl in der Eingabe als auch in der MySQL Datenbank. Das eingegebene SHA1-maskierte Passwort stimmt mit dem SHA1-maskierten Passwort in der Datenbank ("betreuerdaten") überein.

Demnach müsste er sich doch den Vornamen und Namen ziehen. Habe ich mich irgendwo vor lauter Scripten verrannt?

Beste grüße,
Preko
 
Wenn ich das richtig sehe, dann kommen vorname und name aus der Datenbank.
Aber wo übergibst Du denn die Werte, die Du aus der datenbank holst, an die variablen $vorname und $name?
Wenn die Variablen nicht gesetzt werden, dann können sie auch nicht angezeigt werden, ...

redlama
 
Ähm, das ist keine Fehlermeldung. Da steht PHP Notice. Wahrscheinlich hast du error_reporting auf E_ALL oder ähnliches gesetzt und dann gibt er überall dort, wo du eine Variable nutzt, die zuvor nicht initialisiert wurde eine Notice aus. Kann und wird meistens aber trotzdem funktionieren, weil PHP nunmal nicht so rigoros mit dem Variablen und Geltungsbereich Handling ist, wie das die meisten anderen Sprachen sind.
 
Dein Freund ist die Funktion [phpf]mysql_fetch_array[/phpf] oder [phpf]mysql_fetch_assoc[/phpf].
Du musst Die Daten aus der Datenbank auch Zeilenweise auslesen. Das Query ausführen alleine reicht nicht.

Gruß hpvw
 
Hi an alle,

vielen Dank für die schnellen Antworten.

Ganz besonderen Dank an:
hpvw hat gesagt.:
Dein Freund ist die Funktion [phpf]mysql_fetch_array[/phpf] oder [phpf]mysql_fetch_assoc[/phpf].
Du musst Die Daten aus der Datenbank auch Zeilenweise auslesen. Das Query ausführen alleine reicht nicht.

Gruß hpvw

Dies brachte Licht in das Dunkel. Es funktioniert jetzt! ;)

Ich habe die Ausgabe wie folgt geändert:

PHP:
...
  if( !$result = mysql_query($sql_query, $db) ) { 
    echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>"; 
    exit; 
  } 
  while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { 
  echo ($_POST['betreuernr'])."<br />";
  echo ($_POST['password'])."<br />";
  echo (sha1($_POST['password']))."<br /><br />";
  echo ($row['vorname'])." ".($row['name']);  
  }
mysql_close($db); 
...


Beste Grüße,
preko
 
Und wo wir grad dabei sind dir was beizubringen:
1. lass doch bei echo die Klammern weg. Und wenn du sie schon unbedingt hernehmen willst, dann über die komplette Ausgabe und ned über nen kleinen Teil.
2. Wenn nicht nötig immer ' ' verwenden.
Und vielleicht auch bisl besser aufs Einrücken schauen.

Ach ja, da du das ned mal wusstest -> tut.php-q.net
 

Neue Beiträge

Zurück