Skocz do zawartości
lopik_

[php] Zapisywanie Do Pliku I Nowa Linia W Pliku

Rekomendowane odpowiedzi

W PHP nie jestem jeszcze za bardzo obeznany, więc mogłem coś napisac źle.

 

Zrobiłem sobie takie coś:

 

<?php $plik = fopen("plik.txt", "a+");

$zapisac = ''.$_POST['imie'].'\n'.$_POST['email'].'\n'.$_POST['odpisz'].'\n'.$_POST['wiadomosc'].'\n';

if (!empty($zapisac)) {
	fwrite($plik, $zapisac);	}

?>

Tag PHP nie działa ;/

 

 

I gdy formularz jest wysyłany, to zapisują się dane do pliku.

 

I ja chcę (jeśli się da) zrobić tak, żeby każdy element tablicy POST tj: "Imię" , "Email" , "Wiadomosc" zapisywane były w pliku w nowej lini.

 

Da się tak zrobić ?

Edytowane przez Rocky998

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

\r\n - niec nie pomaga ;/

 

dalej to samo...

 

//

 

Jeźli zapisuje tekst ze zmiennej, z parametrem \n lub \r to zapisuje w nowej lini za każdym razem, a z tablicy POST nie chce ;/

Edytowane przez Rocky998

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A mógł byc mi to napisac w całości jak ta zmienna z " ma wyglądać ?

Bo cos mi nie wychodzi.

 

Takie cos, to wywala błąd PHP

$zapisac = $_POST['imie']"\r\n"$_POST['email']"\r\n"$_POST['odpisz']"\r\n"$_POST['wiadomosc']"\r\n";

 

Ale chyba tak sie nie zapisuje... nie wiem.

Edytowane przez Rocky998

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

$zapisac = $_POST['imie']."\r\n".$_POST['email']."\r\n".$_POST['odpisz']."\r\n".$_POST['wiadomosc'];

pamiętaj o kropkach przy łączeniu do ciągu tekstowego, można i bez ale wtedy na początku i na końcu musza być "

ale ta metoda jest na ogól wolniejsza w wykonaniu

Edytowane przez Zawadaki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

jeśli chcesz dalej przetwarzać ten plik za pomocą php to dzielenie tego na wiersze nie jest dobrym pomysłem, bo nie wiesz czy w wiadomości ktoś nie wciśnie entera np i wszystko ci się wykrzaczy :)

 

Lepiej imho zapisać to jednym ciągiem rozdzielając poszczególne zmienne za pomocą jakiejś kombinacji znaków, np "||" a gdy będziesz chciał odzyskać tak poszczególne zmienne użyć funkcji explode() i list()..

całość wyglądała by mniej więcej tak o.. (wyciąganie zmiennych z jednoliniowego stringa)

 

list($imie,$email,$odpisz,$wiadomosc)=explode('||',$liniaStringowa);

a linie stringowe możesz porozdzielać w pliku za pomocą innego symbolu, np symbolu <jakiśTag> i po wczytaniu takiegoż pliku explodować go najpierw do tablicy linii $tablicaLinii=explode('<jakisTag>',$plik) a następnie za pomocą pętli foreach() przelecieć po wszystkich liniach i zastsowac kod podany wyżej...

 

po co to? Np gdybyś chciał potem na stornie wyświetlić wszystkie te dane które ludzie powysyłali.. i/lub odmejlować im autatycznie :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

stosując przejścia do nowego wiersza, do odczytu możemy korzystać z szybkiej funkcji file()

 

jak juz idziemy tak daleko to zamiast stosować jakieś tam tagi znaczniki można wykorzystać funkcje serjalizacji i deserializacji tablicy:

 

fputs(fopen('plik.txt', "w"), serialize(array($_POST['imie'],$_POST['email'],$_POST['odpisz'],$_POST['wiadomosc'])));list($a,$b,$c,$d) = unserialize(fread(fopen('plik.txt', "r"), filesize('plik.txt')));

operacje na tablicach są łatwe i szybkie :wink:

Edytowane przez Zawadaki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dobra Wielkie dzięki za rady. :)

Jeden problem jest taki że ja nie jestem profesjonalistą w PHP ;) wiem wiem, to są podstawy, ale niektórych funkcjo jeszcze nie znam :)

 

Tego pliku, jak narazie przetwarzał nie bede, chcę tylko tam zapisywac dane z formularza.

 

Co to sposobów które podaliście, to o wszystkich coś tam czytałęm, ale nie z wszystkimi umiem jeszcze się "dogadac" ;)

 

Najprostrza wydaje mi się funkcja "file()" to tego, ale moge się mylić.

 

Dzięki za pomoc, w rozwiązaniu problemu, jeśli się jakies jeszcze pojawią, to napewno się odezwie :)

 

Pozdrawiam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

tylko że file czyta każdą linię pliku i ładuje do tablicy.. co sie zatem stanie gdy któraś dana w pliku będzie miała więcej niż 1 linię? :)... wszystko się posypie...

wyjaśnij nie rozumiem

 

tobie się wydajnie ze wiersz dla funkcji file(), jest tym samym co w notatniku z włączonym automatycznym zawijaniem wierszy, tak ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja się nie znam jeszcze na tym wieć moge źle gadać....

 

Ale czy to nie jest tak że funkcja file() czyta linię od począdku wiersza do entera (koniec lini) a koniec lini w tablicy jest oznaczone tak "\n" ?

 

PS. Ale napisałem, ja to tak zrozumialem ... (ale napewno źle :P )

Edytowane przez Rocky998

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja się nie znam jeszcze na tym wieć moge źle gadać....

 

Ale czy to nie jest tak że funkcja file() czyta linię od począdku wiersza do entera (koniec lini) a koniec lini w tablicy jest oznaczone tak "\n" ?

 

PS. Ale napisałem ;) <gafa>

tak, "enter" = \r\n

 

w pliku nie ma tablicy jest ciąg znaków

Edytowane przez Zawadaki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

tobie się wydajnie ze wiersz dla funkcji file(), jest tym samym co w notatniku z włączonym automatycznym zawijaniem wierszy, tak ?

ehh znowu Ty... :\ .. kod entera w przybliżeniu jest wszędzie taki sam, niech to będzie dajmy \n w uproszczeniu... Zatem jeśli ktoś przechowuje w pliku informacje w kolejnych wierszach, dajmy na to w powyższym przykładzie są to 4 różne zmienne, to oczywiste jest, że w 5 linijce pliku znajdzie się pierwsza zmienna drugiego wpisu... Wczytując zatem wszystko do tablicy za pomocą file() otrzymujesz kopię pliku w tablicy... następnie możesz sobie pobrać np mejle wszystkich osób lecąc po pętli i przeskakując co 4 wiersze począwszy od 2 wiersza... Ale co jeśli ktoś wprowadził wiadomość i nacisnął enter... Z kontrolki textarea zostanie wprowadzony kod \n co spowoduje że ta zmienna przeniesie sie na 2 linijki w pliku. Przy wczytaniu takiego pliku za pomocą file() nie można już tak beztrosko wierzyć w to że co 4 wiersze znajduje się ta sama zmienna ale dla innego wpisu...

 

Poza tym jeśli wydaje Ci się, że mi się wydaje, że kod entera i zawijanie wierszy w viewiórce plików txt to to samo... to masz rację... wydaje Ci się :wink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ehh znowu Ty... :\ .. kod entera w przybliżeniu jest wszędzie taki sam, niech to będzie dajmy \n w uproszczeniu... Zatem jeśli ktoś przechowuje w pliku informacje w kolejnych wierszach, dajmy na to w powyższym przykładzie są to 4 różne zmienne, to oczywiste jest, że w 5 linijce pliku znajdzie się pierwsza zmienna drugiego wpisu... Wczytując zatem wszystko do tablicy za pomocą file() otrzymujesz kopię pliku w tablicy... następnie możesz sobie pobrać np mejle wszystkich osób lecąc po pętli i przeskakując co 4 wiersze począwszy od 2 wiersza... Ale co jeśli ktoś wprowadził wiadomość i nacisnął enter... Z kontrolki textarea zostanie wprowadzony kod \n co spowoduje że ta zmienna przeniesie sie na 2 linijki w pliku. Przy wczytaniu takiego pliku za pomocą file() nie można już tak beztrosko wierzyć w to że co 4 wiersze znajduje się ta sama zmienna ale dla innego wpisu...

 

Poza tym jeśli wydaje Ci się, że mi się wydaje, że kod entera i zawijanie wierszy w viewiórce plików txt to to samo... to masz rację... wydaje Ci się :wink:

po to człowiek potrafi myśleć, żeby wpaść na pomysł wykorzystania funkcji: nl2br()

 

zamiast pętli i innych cudów, kiedy nie są potrzebne, wystarczy odpowiednio zapisać, treść pliku i tak będzie wyświetlane w przeglądarce wiec pewnie i tak zamiana \r\n na <br> będzie koniczna

jak nie to z pomocą przychodź funkcja: str_replace()

Edytowane przez Zawadaki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Na dzień dzisiejszy z moją wiedzą, jeśli bym chciał jakoś przetwarzać plik do którego zapisuję dane to wydaje mi się że zrobił bym to za pomoca funkcji "file()" pewnie by coś nie wyszło ale może bym to jakoś wykombinował :)

 

Druga sprawa, właśnie czytam o funkcj "foreach()" bo w niej też można jakoś przetwarzać plik umieszczony w tablicy. Ale jeszcze za dużo nie wiem, więc w przetwarzanie plików jeszcze nie będe się bawił bo gdyby coś nie wychodziło, to mógł by mój komputer to odczuć ;)

Edytowane przez Rocky998

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

specjalne znaki whitespace w stylu \n są znakami specjalnymi i wymagają przetworzenia przez parser ! dlatego piszemy zamiast '\n' "\n";

 

BTW. zapisywanie plikow to jest metoda rodem z epoki kamienia Łupanego - prosciej wygodniej bezpieczniej jest uzywac SQLite...

EDIT: i juz mowie dlaczego - bo tak samo do obslugi SQLite sa 3 funkcje na krzyz a zabawa z petlami przy odczycie i innymi whitespaces poprostu nie istnieje - jedynie gdy mamy do dyspozycji tylko PHP4 uzywalbym plikow.

 

tylko że file czyta każdą linię pliku i ładuje do tablicy.. co sie zatem stanie gdy któraś dana w pliku będzie miała więcej niż 1 linię? :)... wszystko się posypie...

 

file wczytuje zawartosc całego pliku do tablicy w taki sposób że jedna linia jest jednym wierszem w tablicy a indeksem jest numer linni -1 :P

EDIT - OPS nie doczytałem - masz racje - jeszcze jeden argument za SQLite :P:P:P

Edytowane przez Yacho

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Yacho nie wiem ile ty już w tym siedzisz, ale cikawi mnie, jak zaczynałeś z PHP tez wszystko wiedziałeś / umiałemś od razu ? tak sobie po prostu wiedza przyszła w jeden dziś i już ? ;)

 

Z bazami danych to ja jeszcze nic nie robię, narazie chcę w miare opanować PHP, a bazy danych to później.

Narazie się tego boje ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

specjalne znaki whitespace w stylu \n są znakami specjalnymi i wymagają przetworzenia przez parser ! dlatego piszemy zamiast '\n' "\n";

 

BTW. zapisywanie plikow to jest metoda rodem z epoki kamienia Łupanego - prosciej wygodniej bezpieczniej jest uzywac SQLite...

EDIT: i juz mowie dlaczego - bo tak samo do obslugi SQLite sa 3 funkcje na krzyz a zabawa z petlami przy odczycie i innymi whitespaces poprostu nie istnieje - jedynie gdy mamy do dyspozycji tylko PHP4 uzywalbym plikow.

file wczytuje zawartosc całego pliku do tablicy w taki sposób że jedna linia jest jednym wierszem w tablicy a indeksem jest numer linni -1 :P

EDIT - OPS nie doczytałem - masz racje - jeszcze jeden argument za SQLite :P:P:P

nie koniecznie zapisywanie jest takie straszne, jest wiele funkcji które to ułatwiają, oraz wiele sytuacji kiedy koniczne jest zapisanie czegoś w postaci pliku

choć tworzenie bazy danych z podstawie plików jest metoda bardzo obciążająca serwer i nie należy tego robić

 

file_put_contents('plik.txt',"tresc",LOCK_EX)vfprintf(fopen('plik.txt',"w"),"%s%s%s%s",array($a,$b,$c),$x);fflush(fopen('plik.txt',"r+"));

i wiele wiele innych, zależnie od potrzeby

 

PS. nie ma czegoś takiego jak epoka kamienia łupanego, bo co innego można z kamienia zrobić, poza rzuceniem

Edytowane przez Zawadaki

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

nie koniecznie zapisywanie jest takie straszne, jest wiele funkcji które to ułatwiają, oraz wiele sytuacji kiedy koniczne jest zapisanie czegoś w postaci pliku

Podaj przyklad kiedy tworzenie pliku jest niezbedne - jesli masz dostep do obydwu zrodel danych to ktorego uzywasz jest sprawa gustu - bazy wymyslono po to zeby przechowywac dane tekstowe w wiekszosci - pliki niekoniecznie - , twierdze ze jesli siema do wyboru baze to nalezy z niej skorzystac - za czasow PHP4 nie kazdy baze mial dlatego z plikow korzystano - teraz nastała epoka PHP5 i dostep do mini bazy ma kazy - obsluga plikow zostala w sumie do operacji typu reczna zmiana jakiegos pliku na serwerze ale :

przechowywanie danych w plikach jest malo praktyczne - mamy baze wiec z niej korzystany

- nawet jesli mamy za pomoca php wykonywac operacje na plikach innych niz stworzone przez skrypt - apache musi miec do tego praw, nadanie takich praw to deczka samobojstwo :P

choć tworzenie bazy danych z podstawie plików jest metoda bardzo obciążająca serwer i nie należy tego robić

nie na podstawie - ja mowie o porzuceniu pomyslu plikow jako podstawowego zrodla danych dla PHP - sqlite jjest wlasnie po to

 

co do predkosci :

http://sqlite.org/speed.html

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...