lopik_ Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) 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 19 Września 2006 przez Rocky998 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) zamiast : \n napisz: \r\n Edytowane 19 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) \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 19 Września 2006 przez Rocky998 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 zamień ' na " czyli nie '\r\n' tylko "\r\n" Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) 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 19 Września 2006 przez Rocky998 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) $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 19 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 Super działa :) Wielkie Dzięki!!! Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) jak ktoś lubi można i tak: $zapisac = implode("\r\n",array($_POST['imie'],$_POST['email'],$_POST['odpisz'],$_POST['wiadomosc'])); :D Edytowane 20 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 Nie bede się juz bawił ;) Jak działa to oka :) PS. Właśnie udało mi się zrobic str_replace() zmienianie ogonków na zwykłe litery bo coś nie ładnie wyglądały polskie znaki w pliku.txt ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 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 :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 (edytowane) 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 19 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 19 Września 2006 Zgłoś Opublikowano 19 Września 2006 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 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... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
DiJo Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 może przy zapisie zakodować przy pomocy urlencode? :D i przy odczycie urldecode? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 Narazie jest dobrze. Jak będe chciał coś zrobić z tym plikiem, dam znać ;P Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 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 ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 (edytowane) 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 20 Września 2006 przez Rocky998 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 (edytowane) 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 20 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 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: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 20 Września 2006 Zgłoś Opublikowano 20 Września 2006 (edytowane) 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 20 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
PelzaK Opublikowano 21 Września 2006 Zgłoś Opublikowano 21 Września 2006 no więc są 2 rozwiązania, tylko że nie każdy początkujący zna wszystkie funkcje na pamięć i samo file() na niewiele mu się przyda... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 21 Września 2006 Zgłoś Opublikowano 21 Września 2006 (edytowane) 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 21 Września 2006 przez Rocky998 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Yacho Opublikowano 21 Września 2006 Zgłoś Opublikowano 21 Września 2006 (edytowane) 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 21 Września 2006 przez Yacho Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
lopik_ Opublikowano 21 Września 2006 Zgłoś Opublikowano 21 Września 2006 @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 ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bellum Opublikowano 21 Września 2006 Zgłoś Opublikowano 21 Września 2006 (edytowane) 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 21 Września 2006 przez Zawadaki Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Yacho Opublikowano 29 Września 2006 Zgłoś Opublikowano 29 Września 2006 nie koniecznie zapisywanie jest takie straszne, jest wiele funkcji które to ułatwiają, oraz wiele sytuacji kiedy koniczne jest zapisanie czegoś w postaci plikuPodaj 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...