Hi(gh)!
Moin Yadgar,
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 allesSELECT
iert. Du möchtest Escaping oder besser prepared statements verwenden!
Nein, das möchte ich in diesem Fall nicht, denn: https://forum.selfhtml.org/self/2021/oct/14/php-bedingung-wird-nie-erfullt/1792511#m1792511
Das Stichwort möchte wohl ein
label
sein.
Ja, das macht man heutzutage wohl so...
- Wenn die Bedingung einmal erfüllt ist, wird
$zusatz
gesetzt, es wird aber nie zurückgesetzt, falls die Bedingung nicht mehr erfüllt ist.
Stimmt, das ist ein Fehler!
$zeile2[0]
ist vermutlich ein Skalar,$entry1
ist ein Array.
Yep!
$zeile2[0]
wird unbehandelt in den HTML-Kontext gesetzt. Damit besteht die Gefahr von Cross Site Scripting.
s. o.
$entry2
wird unbehandelt in den HTML-Kontext gesetzt. Damit besteht die Gefahr von Cross Site Scripting.
s. o.
Vermutlich ist der Vergleich eines Skalars mit einem Array
false
.
Ist er, ich hatte nicht bedacht, dass fetch_array() auch im Falle eines einzigen Feldeintrags als Ergebnis dieses immer in doppelter Ausführung (mit numerischem und Label-Index) und damit natürlich als Array raushaut...
Also korrigierte ich den Code:
<select name="stichwort">
<?php
while ($zeile2 = $res2->fetch_array())
{
echo $zeile2[0]."<br>";
if (!empty($_GET["edit"]) && $zeile2[0] == $entry1[0]) // jetzt mit Index!
{
echo "Bedingung erfüllt!<br>"; // Kontrollausgabe
$zusatz = " selected";
}
else
{
$zusatz =""; // auf Leerstring zurückgesetzt falls Bedingung unwahr
}
echo "<option".$zusatz.">".$zeile2[0]."</option>\n";
}
?>
</select><br>
...und jetzt funktioniert es! Danke für die Hinweise!
Bis bald im Khyberspace!
Yadgar