Yadgar: PHP: Bedingung wird nie erfüllt

Beitrag lesen

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

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