Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] nl2br(); generuje znaki dwukrotnie?
Forum PHP.pl > Forum > Przedszkole
Mefiuu
Witam. Przy pisaniu mojego mini CMS'a natrafiłem na problem. Taki oto kod odpowiada za wyświetlenie aktualnego menu przechowywanego w bazie danych i po kliknięciu odpowiednio w dany link ma się edytować dana podstrona lub usuwać. Usuwanie działa, edytowanie również lecz:
  1. elseif($_GET['menu']=='yes') {
  2. echo "<br /><a href=\"admin.php\">Panel administracyjny</a> >> <a href=\"?menu=yes\">Ustawienia menu</a><br /><br />";
  3. if($_GET['edit']) {
  4. $id = $_GET['edit'];
  5. $menu = mysql_query("SELECT * FROM menu WHERE id='$id'");
  6. $menu = mysql_fetch_assoc($menu);
  7.  
  8. $id = $menu['id'];
  9. $link = $menu['link'];
  10. $nazwa = $menu['nazwa'];
  11. $tresc = $menu['tresc'];
  12. $widoczny = $menu['widoczny'];
  13.  
  14. echo "<form action=\"#\" method=\"post\"><table><tr><td>ID:</td><td><input type=\"text\" size=\"118\" name=\"eid\" value=\"$id\" /></td></tr>";
  15. echo "<tr><td>Link:</td><td><input type=\"text\" size=\"118\" name=\"elink\" value=\"$link\" /></td></tr>";
  16. echo "<tr><td>Nazwa:</td><td><input type=\"text\" size=\"118\" name=\"enazwa\" value=\"$nazwa\" /></td></tr>";
  17. echo "<tr><td>Treść</td><td><textarea cols=\"90\" rows=\"10\" name=\"etresc\">".str_replace("<br />", "\n", $tresc)."</textarea></td></tr>";
  18. echo "<tr><td>Widoczny:</td><td><input type=\"text\" size=\"118\" name=\"ewidoczny\" value=\"$widoczny\" /></td></tr><tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Edytuj!\" /></td></tr></table></form>";
  19.  
  20. if($_POST){
  21. $eid = $_POST['eid'];
  22. $elink = $_POST['elink'];
  23. $enazwa = $_POST['enazwa'];
  24. $etresc = nl2br($_POST['etresc']);
  25. $ewidoczny = $_POST['ewidoczny'];
  26.  
  27. $update = mysql_query("UPDATE menu SET id='$eid', link='$elink', nazwa='$enazwa', tresc='$etresc', widoczny='$ewidoczny' WHERE id='$id'");
  28. if($update) {
  29. echo "Dane poprawione";
  30. }
  31. else {
  32. echo "Wystąpił błąd przy edycji danych!";
  33. }
  34. }
  35. }
  36. elseif($_GET['delete']) {
  37. $id = $_GET['delete'];
  38. $delete = mysql_query("DELETE FROM menu WHERE id='$id'");
  39.  
  40. if($delete) {
  41. echo "Usunięto poprawnie podstronę";
  42. }
  43. else {
  44. echo "Błąd przy usuwaniu!";
  45. }
  46.  
  47. }
  48. }
  49.  


ogólnie to ma śmigać tak: po kliknięciu w "edytuj" przy danej podstronie ma się otworzyć formularz do edycji i ma wczytać w te pola aktualne treści. Na polu "tresc" użyłem funkcji str_replace("<br />", "\n", $tresc); aby w polu tekstowym nie było znaczników html'a tylko nowa linia. Przy zapisywaniu dodaję do pola "tresc" funkcję nl2br(); aby dodać zamiast nowej linii znacznik <br />. Wszystko śmiga, ale jeżeli zapiszę kod tak:

Cytat
Moja
Strona
Domowa

Siemka


to wyświetla mi tak samo, jednak przy edycji, w polu tekstowym to wygląda tak:

Cytat
Moja

Strona

Domowa



Siemka


czyli praktycznie dodaje mi <br /> 2 razy i nie wiem dlaczego. Muszę za każdym razem przy edycji usuwać zbędne <br />'y. Jak temu zaradzić?

Pozdrawiam.
everth
Przy twoim sposobie zamiast nl2br() zastosuj odwrotny str_replace(), czyli:
  1. $etresc = str_replace("\n",'<br />',$_POST['etresc']);

nl2br nie zamienia znaków nowej linii na <br> tylko wstawia go przed znakiem nowej linii. Przy nowym odczycie br-y się dublują.
Mefiuu
Pomógł winksmiley.jpg


A teraz mój drugi problem. Dlaczego nazwa, wyświetlana na pasku menu, nie może mieć spacji w sobie? Czyli np. nie "O mnie" tylko "Omnie". Bo inaczej mi nie wczyta treści za tę sekcję odpowiedzialnej. MySQL jakoś tego pilnuje?

  1. if($_GET['page']) {
  2. $nazwa = $_GET['page'];
  3. $tresc = mysql_query("SELECT tresc FROM menu WHERE nazwa='$nazwa'");
  4. echo mysql_result($tresc,0,0);
  5. }
  6. else {
  7. $tresc = mysql_query("SELECT tresc FROM menu WHERE id='1'");
  8. echo mysql_result($tresc,0,0);
  9. }
  10.  


Ten kod odpowiada za wyświetlanie treści dla konkretnej podstrony dołączanej sposobem ?page=costam.


edit:

Nie wiem właśnie dlaczego to nie działa + jest inny problem. Dodałem sobie opcję dodawania nowej podstrony. Kod jest taki:

  1. elseif($_GET['add']=='yes') {
  2. echo "<form action=\"#\" method=\"post\"><table><tr><td>ID:</td><td><input type=\"text\" size=\"118\" name=\"id\" /></td></tr>";
  3. echo "<tr><td>Link:</td><td><input type=\"text\" size=\"118\" name=\"link\" /></td></tr>";
  4. echo "<tr><td>Nazwa:</td><td><input type=\"text\" size=\"118\" name=\"nazwa\" /></td></tr>";
  5. echo "<tr><td>Treść</td><td><textarea class=\"mceSimple\" cols=\"90\" rows=\"20\" name=\"tresc\"></textarea></td></tr>";
  6. echo "<tr><td>Widoczny:</td><td><input type=\"text\" size=\"118\" name=\"widoczny\" /></td></tr><tr><td colspan=\"2\"><input type=\"submit\" name=\"submit\" value=\"Edytuj!\" /></td></tr></table></form>";
  7.  
  8. if($_POST) {
  9. $id = $_POST['id'];
  10. $link = $_POST['link'];
  11. $nazwa = $_POST['nazwa'];
  12. $tresc = $_POST['tresc'];
  13. $widoczny = $_POST['widoczny'];
  14.  
  15. $add = mysql_query("INSERT INTO menu VALUES('$id', '$link', '$nazwa', '$tresc', '$widoczny')");
  16.  
  17. if($add) {
  18. echo "Dodano pomyślnie podstronę";
  19. }
  20. else {
  21. echo "Błąd";
  22. }
  23. }
  24. }


I jeżeli dodam podstronę o nazwie np. "Stronatestowa" (czyli nie ma pomiędzy spacji), to pokaże mi ją w menu, ale po przejściu na nią niestety nie pokazuje mi treści zawartej w polu "tresc" tylko pusta strona, choć dane w bazie są. Dlaczego tak się dzieje?

Bardzo proszę o pomoc.

edit 2:

Już nieaktualne, wszystko jest w porządku, pomoc niepotrzebna. Warunek był zły winksmiley.jpg
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.