Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z enterem w formularzu.
Forum PHP.pl > Forum > PHP
david8213
Napisałem dwa pliki:

index.php
Kod
<form action="back.php" method="post">
<br><br><table border=1 borderColor=#000000 cellSpacing=1 cellPadding=5 rules=1 align=center bgColor=#DCDCDC width="550"><tr><td><center><a>Dodaj wiadmo?ć

<br><br>
<textarea name="mess" rows="4" cols="30" WRAP=physical></textarea><br>
<input SIZE="18" type="text" name="podpis" value="podpis" MAXLENGTH="10">

<input type="submit" value=" Wy?lij " style="BACKGROUND-COLOR: #FF8040;  FONT-FAMILY : Verdana; FONT-SIZE : 12; color: #FFFFFF" ></form>
<INPUT TYPE="button" VALUE=" Powrót "  onClick="parent.location.href='../index.php'" style="BACKGROUND-COLOR: #FF8040;  FONT-FAMILY : Verdana; FONT-SIZE : 12; color: #FFFFFF"><br><br></td></tr></table>

<?php

$file = file("message.txt");

foreach($file as $value) {  // foreach to  pętla, służy do przegladania tablic
                // pętla ma analizować tablicę $file, a aktualnie przetwarzany element ma być zapisany w zmiennej $value.

$exp = explode("|",$value);

  $exp[0] = stripslashes($exp[0]);
  $exp[0] = ereg_replace("<","<", $exp[0]);
  $exp[0] = ereg_replace(">",">", $exp[0]);

  $exp[1] = stripslashes($exp[1]);
  $exp[1] = ereg_replace("<","<", $exp[1]);
  $exp[1] = ereg_replace(">",">", $exp[1]);


echo "<center><br><table rules=1 border bgColor=#DCDCDC width=550><tr><td><b><a title=".$exp[3]."> ".$exp[0]."</a></b></td>";
echo "<td><div align=right>".$exp[2]." ";
echo "<tr><td colspan=2 ><div style=margin-left:5 style=margin-right:5>".$exp[1]."</td>";
echo "</td></tr></table>";

}
?>


back.php
Kod
<?php

  $podpis = stripslashes($podpis);
  $podpis = ereg_replace("<","<", $podpis);
  $podpis = ereg_replace(">",">", $podpis);

  $mess = stripslashes($mess);
  $mess = ereg_replace("<","<", $mess);
  $mess = ereg_replace(">",">", $mess);

$podpis = trim($_POST['podpis']);
$mess = trim($_POST['mess']);
$date = date("d,m,Y - H:i:s");
$REMOTE_ADDR = $_SERVER[REMOTE_ADDR];
$REMOTE_HOST = $_SERVER[REMOTE_HOST];

$dane = $podpis."|".$mess."|".$date."|".$REMOTE_ADDR."\n";

  if(($mess=="") or ($podpis==""))  
  {
  print("<BR><BR><BR><BR><font color=red><B><center>Nie wpisałe? wiadmo?ci!</B>");
  print("<BR><P class=\"styl\"><font color=red><B><A HREF=\"index.php\">[powrót]</A></b></font></P>");
  exit();
  }

  $podpis = stripslashes($podpis);
  $podpis = ereg_replace("<","<", $podpis);
  $podpis = ereg_replace(">",">", $podpis);

  $mess = stripslashes($mess);
  $mess = ereg_replace("<","<", $mess);
  $mess = ereg_replace(">",">", $mess);

    $file = "message.txt";
    $fp = fopen($file, "r+");
    $dane=$dane.fread($fp, filesize($file));
    rewind($fp);
    fputs($fp, $dane);
    fclose($fp);
?>

<center>
<p><p>

<script LANGUAGE="JavaScript">
if(top.frames.length==0) {
document.write("<br>Wiadomosc została dodana");
window.clear;
window.location.href="index.php";
}
else
{ document.write("index.php"); }
</SCRIPT>


W pliku message.txt zapisywane są dane.

Wszystko jest dobrze dopóki w textarea nie użyty zostanie enter.
Sprawdźcie jak to ominąć.
thek
Różnica między systemami to nie tylko logo na starcie czy inne winksmiley.jpg
Entery w systemach Unixowych, Windowsach i Macach mają inne "rozwinięcia"
Ty \n tylko wyłapujesz, co jest rozwiązaniem stricte Unixowym.
Bo wygląda Enter w systemach tak
Unix: \n
Windows: \n\r
Mac: \r

Rozwiązanie? nl2br i potem kombinuj. Ale z drugiej strony babrać się w wyrażeniach regularnych mając htmlspecialchars to trochę jak wbijanie drewnianego pala zwykłym młotkiem tongue.gif
david8213
Kombinowałem z nl2br i nic mi nie wyszło
Proszę o porady, alternatywy
Za dobrze na tym się nie znam
athei
W pliku back.php 12 linia
Kod
$mess = trim($_POST['mess']);
zamień na
$mess = urlencode(htmlspecialchars(trim($_POST['mess'])));


W pliku index.php 31linia
Kod
echo "<tr><td colspan=2 ><div style=margin-left:5 style=margin-right:5>".$exp[1]."</td>";
zamień na
echo "<tr><td colspan=2 ><div style=margin-left:5 style=margin-right:5>".urldecode($exp[1])."</td>";


Jeśli robisz księgę gości na plikach to zobacz sobie to http://mylittlehomepage.net/en/miscellaneous/code-collection (guestbook).
david8213
Dzięki.
To rozwiązało mój problem

Podczas zapisu danych do pliku ma nie tworzyć znaku enter tylko jak w tym przypadku znacznik %0D%0A.
Następnie podczas odczytu pokazać ten enter:
$exp[1] = ereg_replace("%0D%0A", "<br>", $exp[1]);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.