Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem ze znakiem nowej lini
Gwozdyk
post 5.01.2008, 17:15:11
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 5.01.2008

Ostrzeżenie: (0%)
-----


Czesc!
Jestem bardzo poczatkujacy w tematyce php i html. Probuje wlasnie napisac prosty serwis w ktorym mozna dodawac osoby, podajac ich imie, nazwisko, wiek, miasto, telefon oraz wyswietlac liste wszystkich dodanych osob. Osoby zapisywane sa w pliku tekstowym, kazda w nowej linii, imie, nazwisko, wiek itp oddzielone sa od siebie tabulacja.

Problem polega na tym ze nie udaje mi sie potem prawidlowo odczytac informacji z pliku. Odczytywana jest jedynie pierwsza osoba. Ogladajac plik w notatniku widac ze poszczegolne osoby sa w jednej linii, oddzielone znakiem wygladajacym jak kwadracik, w wordpadzie jest to interpretowane juz jako nowa linia.

Podejrzewam ze problem polega na tym ze serwer php nie interpretuje tego jako nowej linii tak samo jak notatnik. Jesli recznie umieszcze wpisy w nowych liniach poslugujac sie notatnikiem to skrypt dziala poprawnie.

Tak wyglada skrypt zapisujacy:
Kod
$imie=$_POST['imie'];
$nazwisko=$_POST['nazwisko'];
$miasto=$_POST['miasto'];
$wiek=$_POST['wiek'];
$telefon=$_POST['telefon'];
$plik=fopen('osoby.txt', ab);
//flock($plik, LOCK_SH);
if(!plik)
{
    echo '<p>W tej chwili nie ma mozliosci dodania nowych osob do serwisu';
    exit;
}
$ciagwejsciowy=$imie."\t".$nazwisko."\t".$wiek."\t".$miasto."\t".$telefon."\n";
fwrite($plik, $ciagwejsciowy, strlen($ciagwejsciowy));
//flock($plik, LOCK_UN);
fclose($plik);
echo '<p>Dodano nowa osobe!</p>';
echo '<p><a href=index.html>Wroc2</a></p>'



A tak odczytujacy:
Kod
<?php
$plik=fopen('osoby.txt', r);
while(!feof($plik))
{
    $osoba=fgets($plik, 999);
    echo $osoba.'<br>';
}
fclose($plik);
?>


Mam nadzieje ze mi pomozecie rozwiazac ten problem.

Ten post edytował Gwozdyk 5.01.2008, 17:17:20
Go to the top of the page
+Quote Post
sticker
post 5.01.2008, 17:41:56
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


kodowniae znaku nowej linii zależy od systemu operacyjnego ( kombinacje : "\r\n" , "\n\r", "\n") pewnie siedzisz pod windowsem i samo "\n" nie wystarczy


--------------------
Go to the top of the page
+Quote Post
CrazyProgrammer
post 5.01.2008, 17:52:11
Post #3





Grupa: Zarejestrowani
Postów: 41
Pomógł: 3
Dołączył: 3.01.2008
Skąd: PHP Planet

Ostrzeżenie: (0%)
-----


Popraw kod z
Kod
$ciagwejsciowy=$imie."\t".$nazwisko."\t".$wiek."\t".$miasto."\t".$telefon."\n";


na

Kod
$ciagwejsciowy=$imie."\t".$nazwisko."\t".$wiek."\t".$miasto."\t".$telefon."\r\n";


yahoo.gif


--------------------
INŻYNIERIA OPROGRAMOWANIA - PROGRAMOWANIE AJAX PHP SQL VB C++ C Perl d(html) Flash & Grafika

Any questions ??? contact me: crazyprogrammer (at) rocketmail ( dot) com

skype: chrisnovack
Go to the top of the page
+Quote Post
Gwozdyk
post 5.01.2008, 18:11:11
Post #4





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 5.01.2008

Ostrzeżenie: (0%)
-----


Super! Dziala! Dzieki!
Go to the top of the page
+Quote Post
--m4573r--
post 8.08.2011, 15:01:55
Post #5





Goście







A u mnie ta metoda nie działa. Serwa mam na apache (linux), php5 i chyba wszystkie możliwe bajery i rozszerzenia. Różnica taka, że ja w poprzednim pliku tworzę katalog, przekazuję dane z formularza metodą post do tablicy $_POST, a w tym pliku dodaję do zmiennych dodatkowe informacje i zapisuję je do pliku.

  1. // Uzupełnienie danych wejściowych
  2. $dane = "Nazwa klienta: ".$_POST['nazwaklienta']."/r/n";
  3. $dane1 = "Realna nazwa firmy: ".$_POST['firma']."/r/n";
  4. $dane2 = "Imię i nazwisko: ".$_POST['nazwisko']."/r/n";
  5. $dane3 = "E-mail kontaktowy: ".$_POST['contactmail']."/r/n";
  6. $dane4 = "E-mail dla klientów: ".$_POST['clientmail']."/r/n";
  7. $dane5 = "Tel. kontaktowy: ".$_POST['contactphone']."/r/n";
  8. $dane6 = "Tel. komórkowy: ".$_POST['gsmphone']."/r/n";
  9. $dane7 = "Tel. dla klientów: ".$_POST['clientphone']."/r/n";
  10. $dane8 = "Ulica i numer: ".$_POST['ulica']."/r/n";
  11. $dane9 = "Kod pocztowy: ".$_POST['kodp']."/r/n";
  12. $dane10 = "Miejscowość: ".$_POST['miejscowosc']."/r/n";
  13. $dane11 = "NIP: ".$_POST['nip']."/r/n";
  14. $dane12 = "Regon: ".$_POST['regon']."/r/n";
  15. $dane13 = "Strona www: ".$_POST['www']."/r/n";
  16. // Przekazanie ścieżki pliku do zmiennej
  17. $file = "./seo_clients/seo_".$_POST['nazwaklienta']."/".$_POST['nazwaklienta']."_info.txt";
  18. // Utworzenie pliku
  19. $fp = fopen($file, "w");
  20. // Zablokowanie do zapisu
  21. flock($fp, 2);
  22. // Zapis danych
  23. fwrite($fp, $dane);
  24. fwrite($fp, $dane1);
  25. fwrite($fp, $dane2);
  26. fwrite($fp, $dane3);
  27. fwrite($fp, $dane4);
  28. fwrite($fp, $dane5);
  29. fwrite($fp, $dane6);
  30. fwrite($fp, $dane7);
  31. fwrite($fp, $dane8);
  32. fwrite($fp, $dane9);
  33. fwrite($fp, $dane10);
  34. fwrite($fp, $dane11);
  35. fwrite($fp, $dane12);
  36. fwrite($fp, $dane13);
  37. // Odblokowanie pliku
  38. flock($fp, 3);
  39. // Zamknięcie pliku
  40. fclose($fp);
  41. // Następny proszę...
  42. header('Location: addclient.php');


Jak skonstruowałem to w ten sposób, to zapis wygląda mniej więcej tak:
Nazwa klienta: jakas nazwa klienta/r/nRealna nazwa firmy: jakas nazwa firmy/r/n i tak dalej, czyli znak nowej linii jest traktowany jako tekst.

Jak użyłem konstrukcji opisanej w tym artykule, tj...
  1. $dane0 = "Nazwa firmy: ".$_POST['nazwafirmy']."/r/n"."Imię i nazwisko: ".$_POST['nazwisko']."/r/n";

...to efekt był ten sam, a nawet gorszy, bo wartości zmiennych z tablicy $_POST nie zostały zapisane do pliku.

Pewnie gdzieś robię jakiś idiotycznie banalny błąd, ale nie mogę go wypatrzyć. Będę go szukał, ale może ktoś z Was będzie szybszy.

BTW: Proszę o nie zamieszczanie komentarzy typu "używaj edytora z podświetlaniem składni" czy "czytaj manual", bo to oczywiste. Po podświetleniu składni nie widać niczego niepokojącego.
Go to the top of the page
+Quote Post
mortus
post 8.08.2011, 15:07:46
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


Jest różnica pomiędzy "/r/n" a "\r\n". Na Linuxie wystarczy "\n". Można również użyć stałej PHP_EOL i nie ma problemów z aplikacją ani na Windowsie, ani na Linuxie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 11:23