Moin Yadgar,
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.
Das ist so keine gute Idee, weil das eine astreine SQL-Injection-Lücke ist. Man braucht dein Script nur mit dem URL-Parameter ?edit=' or ''='
aufrufen und es wird einfach mal alles SELECT
iert. Du möchtest Escaping oder besser
prepared statements verwenden!
Der komplette relevante Code sieht so aus:
<?php // … while($zeile1 = $res1->fetch_array()) { if ($zeile1[0] == $_GET["edit"]) { $entry2 = $zeile1[1]; // vorselektierter Eintrag für Datum break; } } // … $entry1 = $res3->fetch_array(); // Eintrag für Stichwort im Auswahlmenü } // … ?> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST"> Stichwort:<br>
Das Stichwort möchte wohl ein label
sein.
<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>
- Wenn die Bedingung einmal erfüllt ist, wird
$zusatz
gesetzt, es wird aber nie zurückgesetzt, falls die Bedingung nicht mehr erfüllt ist. $zeile2[0]
ist vermutlich ein Skalar,$entry1
ist ein Array.$zeile2[0]
wird unbehandelt in den HTML-Kontext gesetzt. Damit besteht die Gefahr von Cross Site Scripting.
⇒ Du möchtest dich mit dem Thema Kontextwechsel beschäftigen.
Datum<br> <?php echo '<input type="text" name="datum" size="10" value="'.$entry2.'">'; ?>
$entry2
wird unbehandelt in den HTML-Kontext gesetzt. Damit besteht die Gefahr von Cross Site Scripting.
Die Kontrollausgabe von $entry1 zeigt den korrekten String... aber trotzdem wird die Bedingung (!empty($_GET["edit"]) && $zeile2[0] == $entry1) nie erfüllt! Warum?
Vermutlich ist der Vergleich eines Skalars mit einem Array false
.
Viele Grüße
Robert