Ankündigung

Einklappen
Keine Ankündigung bisher.

Formularwerte in Schleife überprüfen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formularwerte in Schleife überprüfen

    Hallo zusammen!

    Ich möchte überprüfen, ob die Usereingaben eines Formulars Datenbankgerecht sind.

    Das mache ich so:
    PHP-Code:
    <?
    $VORNAME = mysql_real_escape_string($_POST['VORNAME']);
    ?>
    Soweit sogut, aber ich hab sehr viele Formularfelder und möchte nicht jedes Feld einzeln prüfen müssen.

    Deshalb hab ich mir gedacht, ich mach es mit einer Schleife:
    PHP-Code:
    <?
    $anzahl_POST = count($_POST);
    for ($i = 0; $i < $anzahl_POST; $i++)
    {
        $_POST[$i] = mysql_real_escape_string($_POST[$i]);
    }
    ?>
    --> Leider funktioniert das so nicht, da die Felder des $_POST Arrays nun mal nicht numerisch sind...

    Frage:
    Wie kann ich das ganze trotzdem in eine Schleife einbauen?
    Geht das überhaupt?
    Oder muss ich jedes $_POST Feld einzeln prüfen?

    Vielen Dank im Vorraus für jede Antwort!

  • #2
    Wie kann ich das ganze trotzdem in eine Schleife einbauen?
    foreach() oder so ?

    Kommentar


    • #3
      1000 Dank!

      Nur eines ist seltsam:
      PHP-Code:
      <?
      foreach($_POST as $value)
      {
          $value = mysql_real_escape_string($value);
      }
      ?>
      --> es sollten nun eigentlich alle ' Zeichen (Hochkomma) durch \' ersetzt werden.
      zB aus Ludwig's Bar sollte Ludwig\'s Bar werden
      es wird aber Ludwig's Bar daraus, also ändert sich nichts...

      Wo liegt da mein Denkfehler?

      Kommentar


      • #4
        Du weist den Rückgabewert von mysql_real_escape_string() der Variablen $value zu? Diese wird aber nach dem Durchlauf der Schleife nicht mehr weiterverwendet. Um die Daten im $_POST-Array stehen zu haben, müsstest du es auch dem $_POST-Array zuweisen:
        PHP-Code:
        <?php
            
        foreach($_POST as $key => $value) {
                
        $_POST[$key] = mysql_real_escape_string($value);
            }
        ?>
        Wenn du PHP 5 benutzt, ist es einfacher die foreach-Schleife so zu verändern, dass $value als Referenz behandelt wird:
        PHP-Code:
        <?php
            
        foreach($_POST as &$value)
                
        $value mysql_real_escape_string($value);
        ?>
        Noch einfacher wäre dann sogar array_map():
        PHP-Code:
        <?php
            $_POST 
        array_map('mysql_real_escape_string'$_POST);
        ?>

        Kommentar


        • #5
          PHP-Code:
          <?php
              $_POST 
          array_map('mysql_real_escape_string'$_POST);
          ?>
          Ist wunderbar!
          DANKE!

          Eine Frage hab ich aber noch zum Thema mysql_real_escape_string():
          Ich hab einen Query der sich auf Daten bezieht, die ' (Hochkomma) enthalten können.
          Solange kein ' vorkommt gibt's kein Problem, wenn aber eins vorkommt, dann zerstört das aber meinen Query...
          Ich muss den Query also irgendwie escapen.
          So funktioniert es aber nicht:
          PHP-Code:
          <?
          $mysql = "SELECT t.IDENT, t.TITEL1, t.TITEL2, t.FAMNAME, t.VORNAME, t.VORNAME2, t.NAME2A, t.GEBNAME,
                           t.NAME3, t.TELEFON_2, t.TELEFON_MOBIL, t.FAX, t.BERUF, t.GEB_DATUM, t.GEB_ORT, t.TOD_DATUM,
                           t.TOD_ORT, t.GESCHLECHT, t.STAND, t.HAUSHALT, t.ANREDE, t.PARTNER, t.HOCH_DATUM, t.VATER,
                           t.MUTTER, t.EMAIL, t.WEB, t.ADRES_TEXT_M, t.SELECT0, t.EVI_STELLE, u.HAUSHALT, u.STRASSE,
                           u.PLZ, u.ORT, u.LAND, u.NATION, u.TELEFON_01
                   FROM ".$tb_name_03." t LEFT JOIN ".$tb_name_02." u ON u.HAUSHALT = t.HAUSHALT
                   WHERE ((t.FAMNAME = '".$option_f."' AND t.VORNAME = '".$option_v."' AND t. TITEL2 > '".$option_t."')
                       OR (t.FAMNAME = '".$option_f."' AND t.VORNAME > '".$option_v."')
                       OR (t.FAMNAME > '".$option_f."'))
                      OR (t.FAMNAME = '".$option_f."' AND t.VORNAME = '".$option_v."' AND t. TITEL2 = '".$option_t."'
                                                      AND t.IDENT > '".$option_id."')
                   ORDER BY t.FAMNAME ASC, t.VORNAME ASC, t. TITEL2 ASC
                   LIMIT 1";
          $mysql = mysql_real_escape_string($mysql);
          ?>
          denn dann werden ALLE ' (Hochkomma) maskiert...

          Weiß jemand wie ich NUR die in den Daten vorkommenden ' (Hochkomma) escapen kann?

          Kommentar


          • #6
            Nöja, vielleicht
            mysql_real_escape_string($tb_name_03) ...
            mysql_real_escape_string($tb_name_02)... ?

            Kommentar


            • #7

              Na klar, sorry, da hatte ich wohl ein Brett vorm Kopf

              VIELEN DANK !

              Kommentar

              Lädt...
              X