[php] wstawianie enterów do tekstu


(Uzikan) #1

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ć??


(Marcin E Pc) #2

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


(Uzikan) #3

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


(Marcin E Pc) #4

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


(Uzikan) #5

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ć


(Marcin E Pc) #6

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


(Airborn) #7

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


(Marcin E Pc) #8

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


(Kutar 0) #9

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.


(Uzikan) #10

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


(Kutar 0) #11

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


(Uzikan) #12

$tekst=nl2br($tekst);

próbowałem także:

nl2br($tekst);


(Airborn) #13

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


(Uzikan) #14

<?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'