Absätze ignorieren?

d-braun

Erfahrenes Mitglied
Hallo ich habe wieder ein kleines Problem.

Ich schreibe über ein Kontaktformular (Textarea) die Daten in eine Textdatei, verarbeite Sie dann wieder mit einem PHP-Script welches ich später in eine HTML include damit ich die Kontaktanfragen sehen und löschen kann.

Funktioniert alles wunderbar bis auf die Kleinigkeit dass wenn ich mir die Anfragen ansehe mein Script bei jedem Absatz in der Textdatei eine Checkbox hinzufügt um den Absatz (sprich eine einzelne Anfrage) zu löschen. Da ein Absatz in der Textarea auch einen Absatz in der Textdatei bedeutet zeigt es mir bei jedem Absatz eine Checkbox an.

Wie kann ich es machen dass die Absätze in der Textarea durch ein <br> ersetzt werden ohne BBCode zu benutzen?

Hier noch meine Scripts:


Mail.php (eigentliches Script zum eintragen in die Textdatei)
PHP:
<?
$name=$HTTP_POST_VARS['Name'];
$email=$HTTP_POST_VARS['E-Mail'];
$tel=$HTTP_POST_VARS['Telefon'];
$betreff=$HTTP_POST_VARS['Betreff'];
$nachricht=$HTTP_POST_VARS['Nachricht'];

$ausgabe="<b>".$betreff."</b><br>von: ".$name." (<a href=mailto:".$email."?subject=Re: ".$betreff.">".$email."</a>)<br>"."Tel: ".$tel."<br><br>".$nachricht."<br><br><hr size=1 width=100%><br><br>"."\r\n";
$datei=fopen("mail.txt","a");
$output=fwrite($datei,$ausgabe);
fclose($datei);
echo "Ihre Kontaktanfrage wurde erfolgreich versendet."."\n"."Wir werden sie so früh wie möglich bearbeiten.";
?>


Mail.php (Script zur Aufbereitung der Daten um sie in der HTML zu includen)
PHP:
<?php

#Datenverarbeitung
if (isset($HTTP_POST_VARS['delete'])) {
    $inhalt = file('../../../php/data/mail.txt');
    $fp = fopen('../../../php/data/mail.txt','w');
    flock($fp,2);
    while (list($inhalt_key,$inhalt_val) = each($inhalt)) {
        if (!isset($HTTP_POST_VARS['delete'.$inhalt_key])) {
            fwrite($fp,$inhalt_val);
        }
    }
    flock($fp,3);
    fclose($fp);
}
#ENDE: Datenverarbeitung

#Datenausgabe
$inhalt = file('../../../php/data/mail.txt');

echo '<form method="post" action="'.$HTTP_SERVER_VARS['PHP_SELF'].'">';
while (list($inhalt_key,$inhalt_val) = each($inhalt)) {
    echo '<input type="checkbox" name="delete'.$inhalt_key.'"><br>'.$inhalt_val;
}
echo '<input type="submit" name="delete" value="Löschen"></form>';
#ENDE: Datenausgabe

?>


Ich hoffe ihr könnt mir helfen.
MFG

dom
 
Hab ich mir schon angeschaut.
Aber da ich relativ neu in PHP bin weiß ich nicht wie ich das in mein Script integrieren soll.
Ich hab schon einiges probiert aber ohne Erfolg.
Es soll ja auch nicht alle Absätze in ein <br> umwandeln sondern nur die die der User später in der Textarea macht.

plz help this little stupid dummy :-)
 
Du hast ja den Inhalt der Textarea in einer Variablen.
Diese Variable jagst Du durch nl2br(), z.B. bei der Ausgabe, ungefaehr so:
PHP:
echo nl2br($meintextareainhalt);
So werden die in der Textarea gemacht Zeilenumbrueche in <br>-Tags umgewandelt.
Oder genauer gesagt, dass <br>-Tag wird an der Stelle eingefuegt, denn die eigentlichen Umbrueche bleiben auch erhalten.
 
Hab ich schon gemacht.
PHP:
$ausgabe="<b>".$betreff."</b><br>von: ".$name." (<a href=mailto:".$email."?subject=Re: ".$betreff.">".$email."</a>)<br>"."Tel: ".$tel."<br><br>".$nachricht."<br><br><hr size=1 width=100%><br><br>"."\r\n";
$ausgabe = nl2br($ausgabe);
$datei=fopen("mail.txt","a");
$output=fwrite($datei,$ausgabe);
fclose($datei);

tut sich aber nix
 
d-braun hat gesagt.:
tut sich aber nix
Kann nicht.
Bist Du sicher, dass Du Zeilenumbrueche drin hast?

Sagen wir mal der Inhalt Deiner Textarea sieht so aus:
Code:
Hallo.
Ich bin
ein mehrzeiliger
Text.
Dann wird durch ein simples echo folgendes ausgegeben (im Browser, auf der Shell funktioniert es wunderbar, nur gibt es da ja keine Textareas)
Code:
Hallo.Ich binein mehrzeiligerText.
Wenn Du die Variable nun durch vor der Ausgabe mit nl2br() bearbeitest, dann bekommst Du den Text in der Form ausgegeben wie er im Browser eingegeben wurde:
Code:
Hallo.
Ich bin
ein mehrzeiliger
Text.
 
Ach jetzt kapier ich wo der Fehler liegt: in der Kommunikation ^^
ich meinte keine Absätze sondern Zeilenumbrüche.

Hab mal nen Beispiel in den Anhang gehängt
Wär nett wenn du dir das mal anschauen könntest dann siehst du das Problem

MFG

dom
 

Anhänge

Wenn Du die Zeilenumbrueche in $nachricht (der Textarea) mit <br>-Tags versehen willst kannst Du sowas machen:
PHP:
$nachricht=nl2br($nachricht);
Ausserdem wuerde ich Dir empfehlen von $HTTP_POST_VARS auf $_POST umzusteigen.
 
Hallo,
das mit dem umwandeln von Absätzen in <br>-Tags klappt ja aber es speichert den Text trotzdem in einer neuen Zeile

Code:
zeile1<br>
zeile2<br>

es soll ihn aber so speichern:
Code:
zeile1<br>zeile2<br>

und erst am ende des gesamten Texts eine neue Zeile anfangen sodass die nächste Eingabe wieder in einer Zeile für sich steht.

Kann mir da keiner sagen was genau ich falschn mache?


greetz dom
 
Entferne einfach zusätzlich alle Zeilenumbruch-Zeichen:
PHP:
preg_replace('/(?:\x0A|\x0D\x0A|\x0D|\x0C)/s', '', nl2br($string))
 
Zurück