Mailinglisten-Archive |
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