Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] Tekst w bazie danych.
Forum PHP.pl > Forum > Przedszkole
mayu11
Mam problem... zrobiłem system newsów i nie wiem jak zrobić automatyczne entery w bazie danych (a wiem, że jakoś się da).

Chcę np. wysłać przez textarea i, żeby przy wczytaniu (do edycji, lub wyświetleniu na stronie głównej) automatycznie zawierało "enter", zamiast <br>.
luck
Przed zapisem do bazy, albo po odczycie potraktuj wynik odpowiednią funkcją:
  1. str_replace("\n", '<br />', $string);
albo
  1. nl2br($string)

Zależy w którą stronę potrzebujesz.
mayu11
Chodzi mi o to, by w bazie NIE BYŁO (!) wpisów tego typu.
luck
Więc zamień miejscami dwa pierwsze parametry funkcji str_replace().
mayu11
Ale będzie wtedy w bazie "\n" czy może się mylę?
W treści newsa też ma się nie pisać "<br />"
luck
Jak zamienisz <br /> na "\n" to w bazie zapiszą się "entery". Pytałeś "jak zrobić automatyczne entery w bazie danych", więc myślałem, że o to Ci chodzi.
mortus
Mamy pole:
  1. <textarea name="content"></textarea>
I wpisujemy do niego przykładową treść (wpisujemy dokładnie tak, jak to przedstawia kod poniżej):
Kod
Tekst w pierwszej linii
Tekst w drugiej linii
Tekst w trzeciej linii
Po przesłaniu formularza tekst możemy pobrać ze zmiennej $_POST['content'] i przypisać do zmiennej $tekst:
  1. $tekst = $_POST['content'];
Zawartość zmiennej $tekst będzie następująca:
Tekst w pierwszej linii\nTekst w drugiej linii\nTekst w trzeciej linii
przy czym '\n' to niewidoczny dla nas znak przejścia do nowej linii. Przeglądarka nie potrafi zinterpretować '\n' jako przejścia do nowej linii, dlatego jeśli chcemy wyświetlić wiadomość tak, jak została wpisana, musimy zamienić znaki przejścia do nowej linii na odpowiedni kod html. Zadanie to spełnia funkcja nl2br, która automatycznie zamienia wszystkie '\n' na '<br />' (odpowiednikiem tej funkcji jest str_replace("\n", '<br />', 'tekst')). Zatem zastosujmy funkcję:
  1. $wersja_html = nl2br($tekst);
Teraz zmienna $wersja_html zawiera ciąg znaków:
Tekst w pierwszej linii<br />Tekst w drugiej linii<br />Tekst w trzeciej linii
który przez przeglądarkę jest wyświetlany tak, jak w kodzie z drugiego listingu. Jeśli chcemy się całkowicie pozbyć znaków przejścia do nowej linii możemy zastąpić je np. spacjami:
  1. $nowy_tekst = str_replace("\n", ' ', $tekst);
Zawartość zmiennej $nowy_tekst będzie następująca:
Tekst w linii pierwszej Tekst w linii drugiej Tekst w linii trzeciej
Jednak w tej chwili nie możemy już wyświetlić (w ogóle) tekstu tak, jak był wpisywany.
I przykład:
  1. <?php
  2. ini_set('display_errors', 1);
  3.  
  4. if(!empty($_POST['content']) ) {
  5. $tekst = $_POST['content'];
  6. $wersja_html = nl2br($tekst);
  7. $inny_teskt = str_replace("\n", ' - ', $tekst);
  8. echo 'tekst zawierający znaki przejścia do nowej linii \'\n\', przeglądarka ich nie interpretuje<br />';
  9. echo stripslashes($tekst);
  10. echo '<br /><br />tekst zawierający kod html przejścia do nowej linii \'&lt;br /&gt;\', przeglądarka je interpretuje<br />';
  11. echo $wersja_html;
  12. echo '<br /><br />tekst, który zawiera znaki spacji zamiast znaków przejścia do nowej linii, nie możemy go wyświetlić tak, jak był wpisany:<br />';
  13. echo $inny_teskt;
  14. }
  15. ?>
  16. <form action="" method="post">
  17. <textarea name="content"><?php echo isset($tekst) ? $tekst : ''; ?></textarea><br />
  18. <input type="submit" name="action" value="send" />
  19. </form>
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.