Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z wyświetleniem newsów.
Forum PHP.pl > Forum > Przedszkole
Fiox
Witam.
Mam prosty skrypt newsów oparty na plikach i podczas dodawania newsa, gdy w formularzu dam enter, aby rozpoczęło mi nową linię, to dzieli mi newsa na dwa, i ogólnie wszystko się rozwala. Wygląda to mniej więcej tak jak na screenie niżej.



A tutaj kod z pliku dodaj.php który odpowiada za tworzenie nowego newsa
  1. <?php
  2. // Ten skrypt należy tylko i wyłącznie do Marii Budnik. Kopiowanie i wykorzystywanie go tylko z tym komentarzem.
  3. ?>
  4. <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  8. <meta name="description" content="krótki opis">
  9. <meta name="keywords" content="keyword1, keyword2, keyword3">
  10. <meta name="Authoring-tool" content="Pajaczek NxG PRO v5.9.5">
  11. <title>Tytuł</title>
  12. </head>
  13. <body>
  14. <?php
  15. if($_SESSION['login']==Fiox)
  16. {
  17. if(isset($_SESSION['login']))
  18. {
  19. if (isset($_POST['dodaj']))
  20. {
  21. if (empty ($_POST['tytul']) OR empty($_POST['tresc']))
  22. {
  23. echo 'Dodawanie<br />';
  24. echo 'Jezli chcesz dodać newsa wypełnij poniższy formularz. Jezeli nie, wróć do <a href="main.php">poprzedniej strony</a>.<br />';
  25. echo '<form method="post" action="dodaj.php">';
  26. echo '<table>';
  27. echo '<tr><td>Autor newsa:</td>';
  28. echo '<td><input type="text" name="autor" size="50" value="'.$autor.'" /></td></tr>';
  29. echo '<tr><td>Tytuł newsa:</td>';
  30. echo '<td><input type="text" name="tytul" size="50" value="'.$tytul.'" /></td></tr>';
  31. echo '<tr><td>Tresc newsa:</td>';
  32. echo '<td><textarea name="tresc" cols="50" rows="15" value="'.$tresc.'"/></textarea></td></tr>';
  33. echo '<tr><td colspan="2" align="center">';
  34. echo '<input type="submit" value="Dodaj" name="dodaj" /></td></tr>';
  35. echo '</table></form>';
  36. }
  37. else
  38. {
  39. $tytul=trim($_POST['tytul']);
  40. $autor=trim($_POST['autor']);
  41. $tresc=trim($_POST['tresc']);
  42. $data=date('d-m-Y');
  43. {
  44. $tytul=addslashes($tytul);
  45. $autor=addslashes($autor);
  46. $tresc=addslashes($tresc);
  47. }
  48. $ciagwyjsciowy = $tytul."\t".$data."\t".$tresc."\t".$autor."\n";
  49. @ $wp = fopen('newsy.txt', 'ab');
  50. if (!$wp)
  51. {
  52. echo 'Błąd<br />';
  53. echo 'News nie może zostać zapisany w tej chwili. Proszę spróbować póĽniej.';
  54. }
  55. fwrite($wp, $ciagwyjsciowy, strlen($ciagwyjsciowy));
  56. fclose($wp);
  57. echo 'Dodawanie<br />';
  58. echo 'News dodany.<br /></a><a href="main.php">>>Wróć</a>';
  59. }
  60. }
  61. else
  62. {
  63. echo 'Dodawanie<br />';
  64. echo 'Jezeli chcesz dodać newsa wypełnij poniższy formularz. Jezeli nie, wróć do <a href="main.php">poprzedniej strony</a>.<br />';
  65. echo '<form method="post" action="dodaj.php">';
  66. echo '<table>';
  67. echo '<tr><td>Autor newsa:</td>';
  68. echo '<td><input type="text" name="autor" size="50" value="'.$autor.'" /></td></tr>';
  69. echo '<tr><td>Tytuł newsa:</td>';
  70. echo '<td><input type="text" name="tytul" size="50" value="'.$tytul.'" /></td></tr>';
  71. echo '<tr><td>Tresc newsa:</td>';
  72. echo '<td><textarea name="tresc" cols="50" rows="15" value="'.$tresc.'"/></textarea></td></tr>';
  73. echo '<tr><td colspan="2" align="center">';
  74. echo '<input type="submit" value="Dodaj" name="dodaj" /></td></tr>';
  75. echo '</table></form>';
  76. }
  77. }
  78. }
  79. else
  80. {
  81. echo 'Aby dodać newsa musisz byc zalogowany jako admin!';
  82. }
  83. ?>
  84. </body>
  85. </html>


Oraz wyświetl.php, które odpowiada za wyświetlanie newsa

  1. <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  5. <meta name="description" content="krótki opis">
  6. <meta name="keywords" content="keyword1, keyword2, keyword3">
  7. <meta name="Authoring-tool" content="Pajaczek NxG PRO v5.9.5">
  8. <title>Tytuł</title>
  9. </head>
  10. <body>
  11. <?php
  12. // Ten skrypt należy tylko i wyłacznie do Marii Budnik. Kopiowanie i wykorzystywanie go tylko z tym komentarzem.
  13. $newsy = file("newsy.txt");
  14. $ile_znal = count($newsy);
  15. $ile_newsow=$ile_znal-5;
  16. echo '<center><b>Aktualnosci</b></center><br />';
  17. for ($i=$ile_znal-1; $i>=$ile_newsow; $i--)
  18. {
  19. $linia = explode( "\t", $newsy[$i]);
  20. if ($linia[0]==null) {
  21. }
  22. else
  23. {
  24. echo "".$linia[0]."<br />".$linia[1]."<br />";
  25. echo '<img src="aeonnews.png" align="left" />'.$linia[2];
  26. echo "<table><tr><td>Napisał: ".$linia[3]."</td></tr></table><br /><hr><br />";
  27.  
  28. }
  29.  
  30. }
  31. echo '<center><a href="archiwumnewsow.php">Archiwum aktualnosci</a></center>';
  32. ?>
  33.  
  34.  
  35. </body>
  36. </html>


Oraz plik newsy.txt w którym są zapisywane newsy:
News testowy (1)<tabulator>15-04-2011<tabulator>TEST TEST1 TEST2 TEST3 TEST4 TEST5 TEST6 TEST7 TEST8 TEST9 TEST10 i tak dalej...<tabulator>FioxNews testowy (2)<tabulator>15-04-2011<tabulator>TEST1 TEST2 TEST3 TEST4 TEST5 enter<nowa linia>
i tutaj po enterze TEST6 TEST7 TEST8 TEST9 TEST10<tabulator>Mat

Tutaj nie zmieściło mi się tak jak jest w pliku .txt więc znak tabulatora oznaczyłem <tabulator> a znak nowej lini <nowa linia>

PS: Skrypt nie jest mój
auto-all
W dodaj.php masz:
  1. $ciagwyjsciowy = $tytul."\t".$data."\t".$tresc."\t".$autor."\n";

Na koncu kazdego newsa masz znak nowej linii a reszta danych jest oddzielona tabulatorami.

A w wyświetl.php masz:
  1. $newsy = file("newsy.txt");

Czyli każda napotkana nowa linia w pliku powoduje wpisanie do tablicy danych jako nowy news (potem następuje dzielenie z wykorzystaniem tabulacji).

Rozwiązanie Twoich problemów. Plik dodawania linia 42.
  1. // Zamiana znaków nowej linii na tagi <br />
  2. $tresc = nl2br(trim($_POST['tresc']));
pmir13
Z formularza zapisujesz tekst bezpośrednio w pliku, bez zamiany nowych linii na coś innego (na przykład <br />).
Następnie wczytując newsy z pliku
  1. $newsy = file("newsy.txt");

tworząc tablicę newsy, której elementami są linie w pliku, bo file() właśnie w ten sposób dzieli. Czyli nowa linia oznacza nowy news.
Newsy bez odpowiednich ilości tabulatorów, będące wynikiem takiego zapisu rozwalają układ strony.
Problemem jest także zapisywanie zwykłego tekstu a w drugą stronę wysyłanie go jako html.
Poczytaj o htmlentities() i podobnych funkcjach.
Fiox
Auto-All
Zrobiłem tak jak mówisz, i dodaje się <br> na końcu, ale i tak z każdym enterem w pliku tekstowym tworzy się nowa linia. Wygląda to teraz tak
TESTOWY NEWS TO JEST 15-04-2011 jeden dwa trzy cztery pięć:<br />
-sze¶ć siedem osiem dziewięć dziesięć<br />
-jedyna dwana trzyna czterna pietna<br />
-szesna siedemna osiemna dziewietna dwa Fiox

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.