[php] wstawianie enterów do tekstu

Mam taki problem, nie wiem nawet o czym szukać informacji dlatego pisze na forum.

Mam załóżmy skrypt dodający do bazy danych tekst pochodzący z formularza. Chcę uzyskać taki efekt że jeśli w formularzu zrobie wolne linie “enterem” to żeby potem przy wyświetlaniu tekstu te wolne linie też się wyświetlały.

Jak się za to zabrać??

dodajesz do cięgu przed zapisaniem do bazy danych \n i potem f-cja nl2br().

hmm…ale jak dodaje do ciagu \n … nie rozumiem jak i po co

EDIT: juz wiem…doszedłem sam do tego. Źle mi napisałeś! Własnie nie przed zapisaniem do bazy tylko PO gdy już odczytuje treść.

Heh, jeżeli dodajesz do bazy danych jakiś ciąg, i chcesz aby w nim były entery, to w dodwanym ciągu dodajesz w miejsce enterów \n, i potem przy odczytywaniu tego cięgu, w dokumencie odczytującym stosujesz do cięgu nl2br(). nl2br() pobiera znaki \n nie odczytywane dla html, i konwertuje je na

(HTML). Czy ja się w czymś mylę?

Pozdrawiam

no kurcze…ja ciebie nie rozumiem… jak w miejsce enterów mam sobie wstawić \n ?? Przecież to jest tekst wpisywany w formularzu i nie bede przecież kazał użytkownikowi w każdym miejscu gdzie ma być enter wstawiać \n. W ogóle nie trzeba tego wstawiać. Mam zrobione poprostu tak, że formularz i skrypt dodający odo bazy nic się nie zmienił, natomiast tylko i wyłącznie dodałem funkcję nl2br() w momencie wyświetlania rekordów na stronie. Żadnego \n nie trzeba kombinować

Mi natomiast chodziło o to, że jak użytkownik wpisuje tekst to w ciągu zapisywanym do bazy danychh, przez operator przypisania .(kropka) dodajesz \n. Wtedy jeżeli nawet użytkownik nie da entera, w miejscu w którym ty chcesz żeby był enter będzie on się pojawiał.

po pierwsze primo, to od kiedy kropka jest operatorem przypisania?!

po drugie primo (jak kto woli - secundo), to od kiedy operator łączenia (właśnie kropka) dodaje \n?!

\n, czyli znak nowej lini powstaje, jak sama nazwa wskazuje, w momencie gdy przechodzimy do nowej linii (poprzez wciśnięcie entera w polu textarea), stąd też nie ma potrzeby żadnego doklejania \n

uzikan , ze względów optymalizacji, lepiej jest wywołać funkcję nl2br() przed dodaniem tekstu do bazy danych, wtedy będzie ona wywoływana tylko raz i nie będzie niepotrzebnego przetwarzania łańcucha za każdym razem gdy próbujesz wyświetlić łańćuch

Z kropką mój błąd, fakt. Kropka jest operatorem łączenia ciągów znaków. Ale powiedzmy że np, mamy dane z formularza, treść jakąś po której chcemy żeby był ten enter to możemy to przed zapisaniem do bazy danych(lub do pliku) dodać ten \n, co jest jednoznaczne ze zwykłym enterem. I też nie wiem skąd ten mój pomysl z kropką, poprostu chciałem przekombinować. Wystarczy np. że dane z formularza mamy w zmiennej $dane, i chcemy zapisać ze znakiem nowego wiersza, to możemy zrobić to poprzez:

$dane."\n";

I potem przy odczycie tego użyć nl2br()?

Fakt że jest to bez sensu bo można od razu użyć nl2br() przed zapisem, i potem w będą już w bazi znaczniki hmtl(lub xhtml).

PS. Dopiero uczę się PHP, jeszcze dużo nauki przedemną.

Nie trzeba dodawać \n :slight_smile: Jeśli tekst pochodzi z formularza (dokładnie z textarea), to znaki przejścia do nowej linii już są.

A tak na marginesie, to czasem dodawanie

od razu może być trochę kłopotliwe, np. gdy przewidujemy późniejszą edycję ów tekstu. Musielibyśmy z powrotem zamieniać

na znaki przejścia do nowej linii.

To mi nie działa… jak tekst pochodzący z pola typu textarea przepuszczę przez funkcje nl2br() jeszcze przed wysłaniem go do bazy danych to mi nic nie daje. Jest tak samo jakbym tej funkcji w ogóle nie użył. Dopiero jak pobieram tekst z bazy to w momencie gdzie go wyświetlam wywołuję ta funkcje (tylko tak mi to działa).

A w jaki sposób ją wywołujesz przed dodaniem do bazy ?

$tekst=nl2br($tekst);

próbowałem także:

nl2br($tekst);

Pytanie, czy potem nie robisz na tej samej zmiennej jakiegoś strip_tags() albo czegoś jeszcze innego

<?php

session_name(‘sesja’);

ini_set(‘session.use_trans_sid’, 1); //przechowuj SID zawsze w adresie

ini_set(‘session.use_cookies’, 0); //nie używaj cookies

session_start();

include(‘gora.php’);

echo’

Dodaj artykuł

';

if(isset($_POST[‘dodaj’])){

if(empty($_POST[‘tytul’])){

echo’Nie podałeś tytułu.’;

$tytul=FALSE;

echo’

}

if(empty($_POST[‘zrodlo’])){

echo’Nie podałeś źródła artykułu.’;

$zrodlo=FALSE;

echo’

}

if(empty($_POST[‘kategoria’])){

echo’Nie wybrałeś kategori.’;

$kategoria=FALSE;

echo’

}

if(empty($_POST[‘skrot’])){

// funkcja obcinania tekstu

function utnij($tekst,$ile) {

$licz = strlen($tekst);

if ($licz=$ile) {

$tnij = substr($tekst,0,$ile);

$uciete = $tnij."…";

}

else {

$uciete = $tekst;

}

return $uciete;

}

$skrot=utnij($_POST[‘tresc’],500);

} else {

$skrot=$_POST[‘skrot’];

}

if(empty($_POST[‘tresc’])){

echo’Nie podałeś opisu strony.’;

$tresc=FALSE;

echo’

}

$tekst=nl2br($tekst);

if($tytul $zrodlo $kategoria $tresc){

$roz=explode(’.’, $_FILES[‘zdjecie’][‘name’]); //wybranie rozszerzenia

$doz=array(‘jpg’,‘jpeg’,‘gif’,‘bmp’,‘tif’); //tablica dozwolonych rozszerzeń

if($roz[1]==$doz[0] || $roz[1]==$doz[1] || $roz[1]==$doz[2] || $roz[1]==$doz[3] || $roz[1]==$doz[4]){

require_once(‘polaczenie.php’);

$zapytanie=“INSERT INTO newsy VALUES (NULL, ‘{$_POST[‘tytul’]}’, ‘{$_POST[‘tresc’]}’, ‘$skrot’, ‘{$_FILES[‘zdjecie’][‘name’]}’, ‘{$_POST[‘kategoria’]}’, ‘{$_POST[‘zrodlo’]}’, ‘{$_SESSION[‘login’]}’, NOW())”;

$wynik=@mysql_query($zapytanie);

$wynik=TRUE;

if($wynik){

$id=mysql_insert_id(); //ID pliku

$nazwa=$id.’.’.$roz[1]; //nadanie nowej nazwy

if(move_uploaded_file($_FILES[‘zdjecie’][‘tmp_name’], “zdjecia_arty/$nazwa”)){

echo’Artykuł został dodany.’;

} else {

echo’Przeniesienie pliku nie było możliwe.’;

$zapytanie=“DELETE FROM newsy WHERE id=’$id’”;

$wynik=@mysql_query($zapytanie);

}

} else {

echo’Błąd systemu. Przepraszamy.’;

}

} else {

echo’Niepoprawny format wybranego zdjęcia.’;

}

} else {

echo’Dodanie artykułu nie powiodło się. Spróbuj ponownie.’;

}

} else {

echo’Dodanie artykułu nie powiodło się. Spróbuj ponownie.’;

}

echo’