Robert B.: PHP: Bedingung wird nie erfüllt

Beitrag lesen

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 alles SELECTiert. 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

Mit spitzen Klammern machst du hier im Forum übrigens aus einer URL einen Link.

Ich habe dir dort geantwortet, warum du das trotzdem tun möchtest.

Das Stichwort möchte wohl ein label sein.

Ja, das macht man heutzutage wohl so...

Es hat auch gewisse Vorteile, weil das label nämlich auch klickbar ist. Bei einem Radiobutton oder eine Checkbox macht sich das richtig bemerkbar – oder wenn es ums Styling geht.

  • $zeile2[0] wird unbehandelt in den HTML-Kontext gesetzt. Damit besteht die Gefahr von Cross Site Scripting.

s. o.

siehe „seitwärts“

$entry2 wird unbehandelt in den HTML-Kontext gesetzt. Damit besteht die Gefahr von Cross Site Scripting.

s. o.

siehe „seitwärts“

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...

Es gibt laut Handbuch von fetch_array() genau einen Fall, in dem kein Array zurückgegeben wird:

Return Values

Returns an array of values that corresponds to the fetched row or null if there are no more rows in result set.

Und mir ist bislang noch kein Fall untergekommen, in dem das PHP-Handbuch eine Funktion falsch beschrieben hätte.

Also korrigierte ich den Code:

… in Teilen …

  <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!

bis

Viele Grüße
Robert