Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z enterem w formularzu.
david8213
post 14.01.2010, 12:50:23
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 0
Dołączył: 9.12.2009

Ostrzeżenie: (10%)
X----


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ąć.

Ten post edytował david8213 14.01.2010, 13:40:18
Go to the top of the page
+Quote Post
thek
post 14.01.2010, 13:03:06
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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

Ten post edytował thek 14.01.2010, 13:03:29


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
david8213
post 14.01.2010, 13:43:05
Post #3





Grupa: Zarejestrowani
Postów: 308
Pomógł: 0
Dołączył: 9.12.2009

Ostrzeżenie: (10%)
X----


Kombinowałem z nl2br i nic mi nie wyszło
Proszę o porady, alternatywy
Za dobrze na tym się nie znam

Ten post edytował david8213 14.01.2010, 13:44:42
Go to the top of the page
+Quote Post
athei
post 14.01.2010, 14:15:08
Post #4





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

Ostrzeżenie: (0%)
-----


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).

Ten post edytował athei 14.01.2010, 14:18:18
Go to the top of the page
+Quote Post
david8213
post 16.01.2010, 20:21:28
Post #5





Grupa: Zarejestrowani
Postów: 308
Pomógł: 0
Dołączył: 9.12.2009

Ostrzeżenie: (10%)
X----


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]);

Ten post edytował david8213 16.01.2010, 20:52:46
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 01:00