Zeilenumbrüche in Formular werden ignoriert

xtratz

Gesperrt
Hallo Leute,

habe ein kleines Script welches mir emails an bestimmte Empfänger schickt.

PHP:
<?
       $name    = $_REQUEST['name'];
       $from    = $_REQUEST['from'];
       $subject = $_REQUEST['betreff'];
       $message = $_REQUEST['text'];

       $xtra    = "From: \"".$name."\" <".$from.">\r\n";

 $array = file("letter.txt");
 for($i=0; $i<count($array); $i++){
     $to  = $array[$i];
     mail($to, $subject, $message, $xtra);
 }
 ?>

Mein Problem ist das die Zeilenumbrüche vom Formular total ignoriert werden.

Mit nl2br() hab ich es schon versucht aber dann bekommen Leute die nur txt Emails empfangen können unschöne <br> angezeigt.

Wie kann man das Lösen ?!

Viele Grüße und Danke.
 
Wie ich sehe übergibst den Mail-text über die URL, oder?
Ich würde sagen, dass es daran liegt. Man kann in einer URL, also in einem Link auch nicht rechnen!
Beispiel:
PHP:
<?php
$zahl1 = 4;
$zahl2 = 6;
//DAS GEHT NICHT!
echo "<a href='http://sonstwas1234.de?ergebnis=$zahl1+$zahl2'>Link</a>";
//DAS GEHT NICHT!
?>
Gruß,
Snowowl
 
mmmhhh !

Also "$message" also der Text wird per POST an die Datei geschickt und dort verarbeitet.

Der Text wird nicht per GET also über die URL übergeben.

Oder wie meinst Du das ?
Wie kann man das denn anders machen ? Mir fällt nix ein.

Gruss
 
Wenn das Formular per Post-Methode übermittelt wird, solltest du auch mit der $_POST-Variable darauf zugreifen.
Kontrolliere mal mit nachfolgender Funktion, ob die Zeilenumbruchzeichen überhaupt vorhanden sind:
PHP:
function cc_replace($string) {

	return preg_replace('<[\x0-\x20\x7F]>es', '"&#x".dechex(0x2400+ord("\0")).";"', $string);

}
 
Hallo Gumbo,

nein die Zeilenumbrüche sind leider unverständlicherweise nicht vorhanden.
Es wird alles in einer Reihe ausgegeben.

Das ist echt merkwürdig.
Gibts vielleicht noch eine Idee, ist sicher wiedermal nur eine Kleinigkeit.

Gruss
 
In welchem Formularelement werden die Werte denn eingegeben? Denn nur in input-Elemente lassen sich Zeilenumbrücke mit der Eingabe-Taste eingeben.
 
Wenn es ein Textfeld ist (<textarea></textarea>) fügst einfach ein wrap=hard oder wrap=phyikal ein, dann werden Zeilenumbrüche die in diesem Textfeld gemacht werden übernommen.

Beispiel:
<textarea name="message" wrap="physikal"></textarea>
 
Also nichts von all dem klappt.
Das kann doch einfach nicht sein oder?.

Wie machen das denn andere mit dem KOntaktformular.

Habe hier mal den kompletten code, vielleicht entdeckt ja jemand den Fehler wenn er Zeit hat.

Funktion für das Formular:
PHP:
<?
 function tep_output_string_protected($string) {
    return tep_output_string($string, false, true);
  }

  function tep_sanitize_string($string) {
    $string = ereg_replace(' +', ' ', trim($string));

    return preg_replace("/[<>]/", '_', $string);
  }

 function tep_not_null($value) {
    if (is_array($value)) {
      if (sizeof($value) > 0) {
        return true;
      } else {
        return false;
      }
    } else {
      if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
        return true;
      } else {
        return false;
      }
    }
  }

// Parse the data used in the html tags to ensure the tags will not break
  function tep_parse_input_field_data($data, $parse) {
    return strtr(trim($data), $parse);
  }

  function tep_output_string($string, $translate = false, $protected = false) {
    if ($protected == true) {
      return htmlspecialchars($string);
    } else {
      if ($translate == false) {
        return tep_parse_input_field_data($string, array('"' => '&quot;'));
      } else {
        return tep_parse_input_field_data($string, $translate);
      }
    }
  }
// Output a form textarea field
  function tep_draw_textarea_field($name, $wrap, $width, $height, $text = '', $parameters = '', $reinsert_value = true) {
    $field = '<textarea name="' . tep_output_string($name) . '" wrap="' . tep_output_string($wrap) . '" cols="' . tep_output_string($width) . '" rows="' . tep_output_string($height) . '"';

    if (tep_not_null($parameters)) $field .= ' ' . $parameters;

    $field .= '>';

    if ( (isset($GLOBALS[$name])) && ($reinsert_value == true) ) {
      $field .= tep_output_string_protected(stripslashes($GLOBALS[$name]));
    } elseif (tep_not_null($text)) {
      $field .= tep_output_string_protected($text);
    }

    $field .= '</textarea>';

    return $field;
  }
?>


Ausgabe der Textarea:
PHP:
<? echo tep_draw_textarea_field('bemerkung', 'hard', 50, 15);?>


Hier werden die Daten verarbeitet:
PHP:
mail('meine@mailadresse.de', 'Kontaktanfrage',
         '------------------------------------------------------' . "\n\n" .
         'Anrede:' . "\t\t" . $_REQUEST['anrede']. "\n" .
         'Name:' . "\t\t\t" . $_REQUEST['nachname']. "\n" .
         'Vorname:' . "\t\t" . $_REQUEST['vorname']. "\n" .
         'Email:' . "\t\t" . $_REQUEST['email']. "\n\n" .

         'IP:' . "\t\t\t" . $_SERVER['REMOTE_ADDR']. "\n\n" .

         'Mitteilung:' . "\t" . $_POST['bemerkung'] . "\n".
         '------------------------------------------------------' . "\n\n",
  "From: ".$_REQUEST['email']." <".$_REQUEST['email'].">");


Bin für jeden Tipp dankbar.
 
Zurück