phpbar.de logo

Mailinglisten-Archive

[php] Navigationslink

[php] Navigationslink

Friederun Göllner goellner at macnews.de
Son Jan 11 08:13:59 CET 2004


Hi und einen schoenen Sonntag,

versuche mir gerade PHP4 anzueignen (schon 
laenger), stosse aber gerade an eine scheinbar 
unueberwindliche Grenze. Moechte eine Navigation 
erstellen, wo ich in einer Hauptauswahl 
Kategorien aus einer Datenbank auswaehle und in 
Abhaengigkeit davon wieder aus einer Datenbank 
Unterkategorien darstelle. Habe fuer etwas 
aehnliches ein Beispiel in einem Buch gefunden 
(brauche Beispiele, um sowas nachzuvollziehen), 
und kriege diesen Code beim besten Willen nicht 
zum Laufen. Weder die Version, die ich selbst 
erstellt habe noch das Originallisting von CD 
noch den 100sten von Versuchen ihn abzuwandeln.

Umgebung:
MacOS 10.3.1
Apache 1.3.28
PHP 4.3.2
MySQL 4.0.13
Browser local Safari

Probleme:
1. Die Verbindung zur Datenbank wird aufgebaut 
(Datenbank ist angelegt und enthaelt Daten!). 
Normalerweise. Eine Dateiversion mit dem exakt 
selben Code hat das nicht getan, hat aber auch 
keine Fehlermeldung generiert bis auf die Meldung 
"Verbindungsaufnahme mit MySQL-Server 
fehlgeschlagen!". Die Funktion getError hat 
nichts ausgegeben.

2. Problem:
Bei der Navigation funktioniert der Selbstverweis 
$SELF_PHP offenbar nicht. Schaue ich mir im 
Browser den Quelltext an, erscheint gar kein 
Dateiverweis. Aendere ich den Link in 
$_SERVER[SELF_PHP] wird der Dateiname im Klartext 
ausgegeben im Quelltext, also eine 
Verweisdarstellung auf eine reale Datei.

3. Problem:
Um in Abhaengigkeit vom gewaehlten Link die 
Unterdarstellung auszugeben werden bei dem Link 
flags mit aufgerufen 
(menue=true&autorMenue=true), die, wenn ich das 
richtig interpretiere, als Variablen fungieren 
sollen. Mit isset() sollen die anschliessend 
ausgelesen und entsprechend weiterverarbeitet 
werden in einem Formular. isset() erkennt sie 
nicht, und so passiert einfach gar nichts, noch 
nicht einmal eine Fehlermeldung.

Wo kann ich ansetzen?
- Hat das was mit meiner PHP4-Version zu tun? Das 
Buch hat im Titel PHP 4.3, aber das muss ja nicht 
heissen, das dieses Beispiel unter PHP 4.3.x 
entwickelt wurde ...
- Kann ich hier irgendwas local nicht testen?
- Tritt hier in abgewandelter Form die "register 
globals = off"-Problematik auf? Und wenn ja, wie 
kann ich sie umgehen?

Hier der Beispielcode:

//globale Verbindungsdaten
$host = "localhost";
$user = "xyz";
$pass = "";
$database = "phpbuecher";

// Verbindungsaufnahme
$vk = @mysql_connect($host, $user, $pass)
	or die ("Verbindungsaufnahme mit MySQL-Server fehlgeschlagen!");

	@mysql_select_db($database, $vk)
	or die ("Verbindungsaufnahme mit Datenbank fehlgeschlagen!");

//globale Fehlerabfangroutine
function getError($myError, $myErrno) {
	echo "<font color='red'>Bei dem Versuch, 
einen Datensatz auszulesen, ist ein Fehler
	      aufgetreten.<br>\nFehler-Nummer: <b>".$myErrno."</b>
              <br>\nFehler-Ausgabe:<b>".$myError."</font></b>";
}

?>

<!-- Navigation -->

<div align="center">
<table border="0" align="center" cellpadding="2" cellspacing="10">
    <tr>
	<td><a href="<?php echo $PHP_SELF ?>?menue=true&autorMenue=true">
	Nach Autor anzeigen</a>
	</td>
	<td><a href="<?php echo $PHP_SELF ?>?menue=true&buchMenue=true">
	Nach Buchtitel anzeigen</a>
	</td>
	<td><a href="<?php echo $PHP_SELF ?>?menue=true&verlagMenue=true">
	Nach Verlag anzeigen</a>
	</td>
    </tr>
</table>
</div>

<!-- / Navigation -->

<?php

/*
+------------------------------------------------------------------------------+
| Sub-Menue: Anfang:
|
| - Hilfsvaribalen fuer Formular werden erzeugt
| - Formular
+------------------------------------------------------------------------------+
*/

if (isset($menue)) {

	if (isset($autorMenue)) {

	//Variablen für Autor-Menue
	$sql_query = "SELECT autorID, autorname FROM autor ORDER BY autorname";
	$setVar = "autorID";
	$setRow_1 = "autorID";
	$setRow_2 = "autorname";
	}

	if (isset($buchMenue)) {
	//Variablen für Buch-Menue
	$sql_query = "SELECT buchID, buchtitel FROM buch ORDER BY buchtitel";
	$setVar = "buchID";
	$setRow_1 = "buchID";
	$setRow_2 = "buchtitel";
	}

	if (isset($verlagMenue)) {
	//Variablen für Buch-Menue
	$sql_query = "SELECT verlagID, verlagname 
FROM verlag ORDER BY verlagname";
	$setVar = "verlagID";
	$setRow_1 = "verlagID";
	$setRow_2 = "verlagname";
	}

//Formular Ausgabe:
$result = mysql_query($sql_query, $vk);
	if($result) {
		echo "<div align='center'><form 
method='post' action='$PHP_SELF'>";
		echo "<select name='$setVar' size='1'>\n";

		while ($row = mysql_fetch_array($result)) {
			echo "<option 
value=\"$row[$setRow_1]\">".$row[$setRow_2]."\n";
		}
		echo "</select>\n";
		echo "<input type='submit' name='showInfo' value='Anfrage
absenden'></form></div>";
	}
	else {
		getError(mysql_errno($vk), mysql_error($vk));
  	}
}
// Sub-Menue: Ende
?>


<?php

Waere sehr dankbar fuer jeden Tip.

Gruesse
Friederun

php::bar PHP Wiki   -   Listenarchive