Hi(gh)!
Vorab zum Kontext:
Meine Datenbank soll das Stichwortverzeichnis für ein mehrere Monate umspannendes privates Tagebuch verwalten. Sie enthält die Stammdatentabellen STICHWOERTER (nr, stichwort) und KATEGORIE (nr, kategorie) sowie die Relationstabellen STICHWORT_DATUM (nr, stichwoerter_nr, datum) und STICHWORT_KATEGORIE (nr, stichwoerter_nr, kategorie_nr). Indizes sind jeweils PRIMARY über nr und UNIQUE über die nachfolgenden Felder.
Die Grundfunktionalität der mit PHP programmierten Eingabemasken ist mittlerweile fertiggestellt, mir geht es jetzt die Möglichkeit nachträglicher Bearbeitung von bereits eingegebenen Datensätzen.
Im oberen Teil des Eingabebereiches werden die Datensätze zum "Durchblättern" als Tabelle in Zehnerblöcken angezeigt, die erste Spalte enthält jeweils interne Links ($_GET-Methode) zum Bearbeiten und Löschen.
Klickt man diese Links an, wird die Indexnummer des jeweiligen Datensatzes an die neu aufgerufene Eingabeseite übermittelt. In diesem Fall sollen die bisherigen Werte als Voreinstellung in den Eingabeelementen des Formulars angezeigt werden.
Bei einfachen Textfeldern (in meinem konkreten Fall: datum in STICHWORT_DATUM) funktioniert das einwandfrei, während ich es bei den Auswahlmenüs (<select><option>...) aus mir unerfindlichen Gründen nicht hinbekomme.
Damit im Auswahlmenü das der übernommenden Indexzahl aus STICHWORT (also STICHWORT_DATUM.stichwoerter_nr) entsprechende Stichwort im Klartext anzeigt wird, schicke ich folgende Query ab:
$sql3 = "SELECT STICHWOERTER.stichwort FROM STICHWOERTER, STICHWORT_DATUM WHERE STICHWORT_DATUM.stichwoerter_nr = STICHWOERTER.nr AND STICHWORT_DATUM.nr = '".$req."'";
$req nimmt hier den Wert von $_GET["edit"] auf.
Der komplette relevante Code sieht so aus:
$sql1 = "SELECT nr, datum FROM STICHWORT_DATUM";
$res1 = $db->query($sql1);
qcheck($res1, $db);
if (empty($_GET["edit"]))
{
$entry1 = "";
$entry2 = "";
}
else // falls Datensatz bearbeitet werden soll
{
while($zeile1 = $res1->fetch_array())
{
if ($zeile1[0] == $_GET["edit"])
{
$entry2 = $zeile1[1]; // vorselektierter Eintrag für Datum
break;
}
}
$req = $_GET["edit"];
$sql3 = "SELECT STICHWOERTER.stichwort FROM STICHWOERTER, STICHWORT_DATUM WHERE STICHWORT_DATUM.stichwoerter_nr = STICHWOERTER.nr AND STICHWORT_DATUM.nr = '".
//
$req."'";
$res3 = $db->query($sql3);
qcheck($res3, $db);
$entry1 = $res3->fetch_array(); // Eintrag für Stichwort im Auswahlmenü
}
$sql2 = "SELECT stichwort FROM STICHWOERTER";
$res2 = $db->query($sql2);
qcheck($res2, $db);
var_dump($entry1); // Kontrollausgabe
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST">
Stichwort:<br>
<select name="stichwort">
<?php
$zusatz="";
while ($zeile2 = $res2->fetch_array())
{
if (!empty($_GET["edit"]) && $zeile2[0] == $entry1)
{
echo "Bedingung erfüllt!<br>"; // Kontrollausgabe
$zusatz = " selected";
}
echo "<option".$zusatz.">".$zeile2[0]."</option>\n";
}
?>
</select><br>
Datum<br>
<?php
echo '<input type="text" name="datum" size="10" value="'.$entry2.'">';
?>
Die Kontrollausgabe von $entry1 zeigt den korrekten String... aber trotzdem wird die Bedingung (!empty($_GET["edit"]) && $zeile2[0] == $entry1) nie erfüllt! Warum?
Bis bald im Khyberspace!
Yadgar