martin43: Eintragung in Textfelder

Hallo, ich übergebe Einträge einer Formular-Seite an eine Korrektur-Seite. Für notwendige Korrekturen kann zur Formular-Seite zurückgeklickt werden. Dabei werden die bereits eingetragenen Daten per <INPUT type="hidden" name="telefon" ...> an die Formular-Seite  übertragen. Klappt auch alles wunderbar (Kontrolle auf der Formular-Seite: echo "telefon:  $telefon"; ).
Die Eintragung wird eingefügt mit

<FORM action='kontakt_kontrolle.php' method='GET' enctype='multipart/form-data'>
<INPUT type='text' size='30' maxlength='45' name='telefon' value=<? echo $telefon; ?>>.

Das klappt allerdings nur bei Telefonnummern, die im Format 1234567890 (also ohne Leerzeichen) eingetragen werden. Wenn Leerzeichen eingefügt wurden (z.B. 123 45 67 89), dann werden nur die Zeichen 123 in das Text-Feld eingetragen.

Was ist die Ursache dafür?
Gruß Martin

PS: Bei <TEXTAREA .....> habe ich keine Probleme

  1. Hello,

    Was ist die Ursache dafür?

    Schaun wir mal, was da steht:

    <INPUT type='text' size='30' maxlength='45' name='telefon' value=<? echo $telefon; ?>>.

    und nach dem Parsing:

    <INPUT type='text' size='30' maxlength='45' name='telefon' value=123 45 67 89>
                                                                     ------------

    Was soll der Browser denn mit den Attributen 45, 67 und 89 anfangen?

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

  2. ein wenig mehr php-code wäre hilfreich...

    Klingt aber danach, dass du die Telefonnummer mit
    $telefon = (int)$_GET['telefon'];
    übernimmst. Dann macht der Parser alles richtig, er liest es als "int" solange er Ziffern findet (von links an). Das Problem löst du, indem du vorher die Leerzeichen entfernst.
    $telefon = (int)(str_replace(' ','',$_GET['telefon']));

    1. Hello,

      Klingt aber danach, dass du die Telefonnummer mit
      $telefon = (int)$_GET['telefon'];
      übernimmst.

      Sieht eher danach aus, dass beim Generieren des HTML-Codes Zeichen vergessen wurden :-))

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  3. Hallo Tom, peinlich, peinlich!
    Zwei kleine Striche und schon ist die Welt in Ordnung!
    Gruß Martin

    1. echo $begrüßung;

      Zwei kleine Striche und schon ist die Welt in Ordnung!

      Nein, ist sie nicht. Tipp doch mal

      '><script>alert(23)</script>

      in dein Telefonnummernfeld ein.

      Lehrsatz: Wann immer du Werte in einen anderen Kontext bringst, musst du sie dem Kontext entsprechend behandeln!

      Wenn du das nicht beachtest, bekommst du entweder Fehler(meldungen) oder Sicherheitslücken.

      Für HTML müssen die HTML-eigenen Zeichen berücksichtigt werden. PHP kennt dafür die Funktion htmlspecialchars().

      Weitere Beispiele:

      • SQL-Statements. Jedes DBMS hat seine eigenen Sonderzeichen und meist auch eine Funktion in der API, die sich darum kümmert. PHP kennt für MySQL mysql_real_escape_string().
      • Für URLs gibt es urlencode() und anschließend noch htmlspechialchars().

      echo "$verabschiedung $name";