• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Zeilenumbruch im Eingabefeld

disconnect

Neues Mitglied
Huhu, ich arbeite gerade an einem Gästebuch und habe das kleine Problemchen, dass der Zeilenumbruch in <textarea> übernommen wird.
Sprich: Ich drücke enter in <textarea>. Das Skript macht eine neue Tabelle und behandelt diesen Zeilenumbruch als neuen Kommentar.
Kann einfach den Fehler nicht finden, geschweige denn vom Beheben :oops:
Der HTML-Teil wird wohl nicht gebraucht. Hier mal der PHP-Code.

guestbook.php
PHP:
<?php
//Hier die Seite mit der Ausgabe und
//dem eigentlichen Formular
$beitrag = file("book.txt");
krsort($beitrag);
//Anlegen der Tabelle
if(empty($beitrag))
{
   echo "
   <table align='center' border='0' cellspacing='0' id='box'>
     <tr>
       <td align='center'>Keine Einträge vorhanden.</td>
     </tr>
        ";
}        
         else
         {
         foreach($beitrag as $ausgabe)
         {
           $ausgabe = stripslashes($ausgabe);
           $text = explode("|", $ausgabe);
           echo "
           <table align='center' border='0' cellspacing='0' id='box'>
                 <tr>
                   <td>Eintrag von $text[0] mit Bewertung:</td>
                   <td align='center' > $text[1]</td>
                 </tr>
                 <tr>
                   <td colspan='2'>$text[2]</td>
                 </tr>
           </table><br>";
         }
         }
?>
eintrag.php
PHP:
<?php
//Skript, das die Textdatei beschreibt.

$name = $_POST['name'];
$bewertung = $_POST['bewertung'];
$eintrag = $_POST['eintrag'];
$submit = $_POST['submit'];

if(!isset($submit))
{
  echo "<div id='link'>Bitte gehen Sie <a href='guestbook.php' target='_self'>zurück</a></div>";
}

if($name == "" || $eintrag == "")
{
  echo "<div id='link'>Sie müssen alle Felder ausfüllen. Hier <a href='guestbook.php' target='_self'>zurück</a></div>";
}
else
{
   $eintrag="$name|$bewertung|$eintrag";
   $datei = fopen("book.txt", "a");
   fwrite($datei, $eintrag."\n");
   fclose($datei);

   echo "<div id='link'>Ihr Eintrag wurde erfolgreich gespeichert";
   echo "<br><a href='guestbook.php'>Zurück zum Gästebuch</a></div>";
}
?>
Hoffe ihr könnt mir helfen.
Gute Nacht
 
Werbung:
Arbeite am besten mit nl2br(). Das ersetzt die Zeilenumbrüche durch ein <br />.

MfG Icy
Nein tut es nicht. Es fügt vor jedem Zeilenumbruch ein <br /> ein und hilft ihm somit nicht mit seinem Problem ;)

Also, Zeilenumbrüche so entfernen:
PHP:
$eintrag = str_replace(array("\r", "\n"), '', $_POST['eintrag']);

Du solltest vor der Ausgabe unbedingt noch eine dieser beiden Funktionen anwenden:
PHP: htmlspecialchars - Manual
PHP: htmlentities - Manual

Sowas zu schreiben und auszulesen geht übrigens einfacher mit den schon in PHP enthaltenen CSV-Funktionen:
PHP: fgetcsv - Manual
PHP: fputcsv - Manual

Gruß,
Björn
 
Werbung:
Sehr fein :D Danke.
Wie übernehm ich aber den Zeilenumbruch für das Kommentar, ohne dass es so einen Fehler gibt? Also enter wird in der Textarea gedrückt und das ergibt auch eine neue Zeile im Kommentar.
Lieber gleich ne Datenbank anlegen oder würde es mit der dateibasierten Version auch gehen?
 
Du könntest jeden Zeilenumbruch, anstatt ihn zu löschen, durch irgendwas ersetzen und bei der Ausgabe dann wieder einbauen. Müsste nur was sein, was mit hoher Sicherheit nicht im Beitrag vorkommt (also nicht "Umbruch", oder sowas). Wenn du einen HTML-Zeilenumbruch haben möchtest, dann hat Icy die Lösung ja schon genannt.

Gruß,
Björn
 
Ok, muss das Thema wieder ausgraben :D
Ich werd irre mit dem Zeug. Irgendwas ist da faul.
Hier mal das Chaos zur Vorschau

DCs Guestbook

Einfach 2 Zeilen schreiben und dann seht ihr, was ich meine.
 
Werbung:
Hast du schon was mit Mysql gemacht? Es wäre vielleicht einfacher mit Mysql zu arbeiten. (nur so als tipp)
 
guestbook.php - Die Einträge werden hier ausgelesen und ausgegeben
PHP:
<?php
         $beitrag = file("book.txt");
         krsort($beitrag);
if(empty($beitrag))
{
   echo "
   <table align='center' border='0' cellspacing='0' id='box'>
     <tr>
       <td align='center'>Keine Einträge vorhanden.</td>
     </tr>
   </table>
        ";
}
         else
         {
         foreach($beitrag as $ausgabe)
         {
           $ausgabe = stripslashes($ausgabe);
           $text = explode("|", $ausgabe);
           echo "
           <table align='center' border='0' cellspacing='0' id='box'>
                 <tr>
                   <td>Eintrag von $text[0] mit Bewertung:</td>
                   <td align='center' > $text[1]</td>
                 </tr>
                 <tr>
                   <td colspan='2'>$text[2]</td>
                 </tr>
           </table><br>";
         }
         }
?>

eintrag.php - Hier wird die Textdatei geschrieben
PHP:
<?php

$name = $_POST['name'];
$bewertung = $_POST['bewertung'];
$eintrag = $_POST['eintrag'];
$submit = $_POST['submit'];

$bewertung = str_replace("1 Stern", "<img src='img/bewertung.gif'>", $bewertung);
$bewertung = str_replace("2 Sterne", "<img src='img/bewertung.gif'><img src='img/bewertung.gif'>", $bewertung);
$bewertung = str_replace("3 Sterne", "<img src='img/bewertung.gif'><img src='img/bewertung.gif'><img src='img/bewertung.gif'>", $bewertung);
$bewertung = str_replace("4 Sterne", "<img src='img/bewertung.gif'><img src='img/bewertung.gif'><img src='img/bewertung.gif'><img src='img/bewertung.gif'>", $bewertung);
$bewertung = str_replace("5 Sterne", "<img src='img/bewertung.gif'><img src='img/bewertung.gif'><img src='img/bewertung.gif'><img src='img/bewertung.gif'><img src='img/bewertung.gif'>", $bewertung);

if(!isset($submit))
{
  echo "<div id='link'>Bitte gehen Sie <a href='guestbook.php' target='_self'>zurück</a></div>";
}
if($name == "" || $eintrag == "")
{
  echo "<div id='link'>Sie müssen alle Felder ausfüllen. <a href='guestbook.php' target='_self'>Hier zurück</a></div>";
}
else
{
   $eintrag="$name|$bewertung|$eintrag";
   $datei = "book.txt";
   $datei = fopen($datei, "a");
   fwrite($datei, $eintrag."\n");
   fclose($datei);

   echo "<div id='link'>Ihr Eintrag wurde erfolgreich gespeichert";
   echo "<br><a href='guestbook.php'>Zurück zum Gästebuch</a></div>";
}
?>

Das wäre der aktuelle Code.
 
Werbung:
Eigentlich wollte ich nur kurz ein kleines Beispiel mit CSV-Daten machen, aber dann ist es leider doch nicht so klein geworden. Weiß nicht, ob du damit klarkommst, ich habe mich bemüht, den Code ausführlich zu kommentieren.

Features:

- Zeilenumbrüche sind möglich
- HTML-Code wird escapet
- kleine Falle für Bots eingebaut

Gruß Marc

PHP:
<?php

/**
 * Lädt alle Einträge aus der CSV-Datei
 *
 * @return array Array mit allen Einträgen
 */
function loadEntries()
{
    $entries = array();

    $handle = fopen('./book.txt', 'rb');
    while (($data = fgetcsv($handle)) !== false) {
        $entries[] = array('name'   => $data[0],
                           'rating' => $data[1],
                           'text'   => $data[2]);
    }
    fclose($handle);

    return $entries;
}

/**
 * Fügt einen Eintrag in die CSV-Datei ein
 *
 * @param array $data Array mit den hinzuzufügenden Daten
 */
function addEntry(array $data)
{
    $handle = fopen('./book.txt', 'a');
    fputcsv($handle, $data);
    fclose($handle);
}

/**
 * Validiert POST-Daten
 *
 * @return string Gibt Fehlermeldung zurück oder leeren String
 */
function validateData()
{
    // An dieser Stelle sollten die Daten verifiziert werden. Es sollte geprüft
    // werden, ob alle Felder gesetzt sind, ob sinnvolle Werte (Bewertung
    // etwa zwischen 0 und 5) eingetragen wurden usw.

    if (isset($_POST['nickname']) && $_POST['nickname'] != '') {
        // Da ist ein Bot in die Spamfalle getappt. Die Idee ist, dass ein
        // Script nicht versteht, dass dieses Feld für einen Besucher nicht
        // einsehbar ist und deshalb etwas einträgt. Ist hier also ein Wert
        // vorhanden, wurde die Seite nicht von einem Menschen ausgefüllt
        return 'Spamfalle zugeschnappt';
    }

    // Hier ein rudimentärer Test, ob zumindest alle Felder gesetzt sind
    // (Hinweis: Das stellt noch nicht sicher, dass die Felder etwa keinen
    // leeren String als Wert enthalten)
    if (!isset($_POST['name'])
     || !isset($_POST['rating'])
     || !isset($_POST['text'])
    ) {
        return 'Nicht alle Werte gesetzt';
    }

    // Daten sind okay, kein Fehler
    return '';
}

// Wird true, wenn versucht wird, einen neuen Eintrag hinzuzufügen
$newEntry      = false;

// Wird auf einen Wert ungleich '' (leerer String) gesetzt, wenn beim Versuch,
// einen neuen Eintrag hinzuzufügen, ein Fehler auftritt
$newEntryError = '';

// Liste aller Einträge. Wird nicht gefüllt, wenn ein neuer Eintrag hinzugefügt
// werden soll
$entries       = array();

// Automatisch durch "magic quotes" hinzugefügte Slashes entfernen (falls nötig)
if (count($_POST) > 0 && get_magic_quotes_gpc()) {
    $_POST = array_map('stripslashes', $_POST);
}

// Wenn Formular abgeschickt (= Name des Submit-Buttons in POST-Daten gesetzt),
// neuen Eintrag hinzufügen
if (isset($_POST['new_entry'])) {
    // Prüfen, ob übertragene Daten Fehler enthalten
    $newEntryError = validateData();

    if ($newEntryError == '') {
        // Übertragene Daten sind okay, in book.txt eintragen
        addEntry(array($_POST['name'], $_POST['rating'], $_POST['text']));
    }

    $newEntry = true;
}

// Liste aller Einträge zur Darstellung laden
if (!$newEntry) {
    $entries = loadEntries();
}

// Browser anweisen, die Seite als UTF-8 zu interpretieren (meta-Tag im Header
// wird gerne mal ignoriert)
header('Content-Type: text/html; charset=UTF-8');

?>

<!DOCTYPE html>

<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Gästebuch</title>
</head>

<body>
    <h1>Mein Gästebuch</h1>
<?php
    if ($newEntry) :
        if ($newEntryError != '') :
?>
    <p>Beim Einfügen der Daten ist ein Fehler aufgetreten.</p>
    <p><?php echo htmlspecialchars($newEntryError); ?></p>
    <p><a href="./">Zurück zum Gästebuch</a></p>
<?php
        else :
?>
    <p>Vielen Dank für den Eintrag!</p>
    <p><a href="./">Zurück zum Gästebuch</a></p>
<?php
        endif;
    else :
?>
    <h2>Eintrag hinzufügen</h2>

    <form action="" method="post">
        <p>Name: <input type="text" name="name" /></p>
        <p>Bewertung: <input type="text" name="rating" /></p>
        <p>Text:</p>
        <p style="display: none;">Nickname (bitte freilassen, Falle für Bots):
            <input type="text" name="nickname" />
        </p>
        <textarea name="text" rows="8" cols="30"></textarea>
        <p><input type="submit" name="new_entry" value="OK" /></p>
    </form>

    <hr />
<?php
        if (count($entries) == 0) :
?>
    <table align="center" border="1" cellspacing="0" class="box">
        <tr>
            <td align="center">Keine Einträge vorhanden.</td>
        </tr>
    </table>
<?php
        else :
            foreach ($entries as $entry) :
?>
    <table align="center" border="1" cellspacing="0" class="box">
        <tr>
            <td>Eintrag von <?php echo htmlspecialchars($entry['name']); ?> mit Bewertung:</td>
            <td align="center"><?php echo htmlspecialchars($entry['rating']); ?></td>
        </tr>
        <tr>
            <td colspan="2"><?php echo nl2br(htmlspecialchars($entry['text'])); ?></td>
        </tr>
    </table>
<?php
            endforeach;
        endif;
    endif;
?>
</body>

</html>
 
Hehe, so laaaang ist der Code ja nicht.
Vielen Dank für die Mühe.

Werde auf jeden die functions anschauen und mein Skript dadurch verbessern :)
 
Zurück
Oben