Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kolejność wczytywania, z pliku .txt
kimu
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Chciałym zmienić kolejność wczytywania informacji z pliku "ogloszenia.txt". Skrypt który wczytuje informacje to:

  1. <?php 
  2. // wczytanie zawartości pliku do tablicy 
  3. $file = file("ogloszenia.txt"); 
  4. // przechodzimy przez tablicę za pomocą pętli foreach 
  5. foreach($file as $value) { 
  6. // rozbijamy poszczególne linie na części 
  7. $exp = explode("`",$value); 
  8. // wyświetlamy rozbity tekst 
  9. echo $exp[0]."<br />"."<br />".$exp[1]."<br />"; 
  10. } 
  11. ?>


Nastomiast ksrypt który te informacje wcześniej dopisuje do pliku to:

  1. <?php 
  2.  $pole2 = trim($_POST['pole2']);
  3. $pole2 = str_replace("\n","<br>",$pole2); 
  4.  
  5. if(empty($pole1) and empty($pole2)) { 
  6.  
  7. // prosty formularz zawieraj&plusmn;cy dwa pola 
  8. echo '<form action="" method="post"> 
  9. <textarea name="pole2" style="width: 580px; height: 300px; background-color: #C5CDCE; border: 1 solid #000000" rows="1" cols="20">
  10. Wpisz treść ogłoszenia.
  11. </textarea><br /> 
  12. <input type="submit" value="Zapisz" /> 
  13. </form>'; 
  14. } 
  15. else { 
  16.  
  17. // dane pochodz&plusmn;ce z formularza 
  18. $dane = $pole2."<br />"."<br />"."<br />"."<hr color=gray size=1 />"."<br />"."<br />";"\n";
  19. // przypisanie zmniennej $file nazwy pliku 
  20. $file = "ogloszenia.txt"; 
  21. // uchwyt pliku, otwarcie do dopisania 
  22. $fp = fopen($file, "a"); 
  23. // blokada pliku do zapisu 
  24. flock($fp, 2); 
  25. // zapisanie danych do pliku 
  26. fwrite($fp, $dane); 
  27. // odblokowanie pliku 
  28. flock($fp, 3); 
  29. // zamknięcie pliku 
  30. fclose($fp); 
  31. } 
  32. ?>


Dzięku temu skryptowi dane wczytywane są w ten sposób że nowe wpisy idą w dół. A ja chciałbym aby nowe wpisy były zawsze na samej górze. Jak zmienić skrypt aby tak właśnie było ?

Ten post edytował kimu 19.08.2007, 18:23:59
Go to the top of the page
+Quote Post
qba10
post
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 20
Dołączył: 19.08.2007
Skąd: Bryńsk k. Lidzbarka Welskiego (nie mylić z Warmińskim)

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


Cytat
  1. <?php
  2. $fp = fopen($file, "r+");
  3. ?>

wystarczy "a" zmienić na "r+" w funkcji fopen()

Ten post edytował qba10 19.08.2007, 19:00:31
Go to the top of the page
+Quote Post
kimu
post
Post #3





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Przy zamianiae "a" na "r+" poprostu mi podmienia wpisy, a nie dopisuje. Tzn. dodając "wpis 2" kasuje się "wpis 1".
Go to the top of the page
+Quote Post
koval7
post
Post #4





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 9.02.2007

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


  1. <?php
  2. $dane.=fread($fp, filesize('ogloszenia.txt'));
  3. ?>

daj to przed
  1. <?php
  2. fwrite($fp, $dane);
  3. ?>

a plik otwórz tak, jak mówił qba10

Ja zrobiłbym to z file_get_contents i file_put_contents

Ten post edytował koval7 19.08.2007, 20:54:59
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




:|
po co tak kombinować? Skoro skrypty są już napisane chyba najlepiej pójść po najmniejszej linii oporu...
Zamień linijkę:
  1. <?php
  2. $file = file("ogloszenia.txt");
  3. ?>

na
  1. <?php
  2. $file = array_reverse(file("ogloszenia.txt"));
  3. ?>
Go to the top of the page
+Quote Post
kimu
post
Post #6





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Teraz plik odczytujący wygladą tak (zgodnie z tym co napisał phpion.com):

  1. <?php 
  2. // wczytanie zawartości pliku do tablicy 
  3. $file = array_reverse(file("ogloszenia.txt"));
  4. // przechodzimy przez tablicę za pomocą pętli foreach 
  5. foreach($file as $value) { 
  6. // wyświetlamy rozbity tekst 
  7. echo $value."<br />"."<br />"."<br />"; 
  8. } 
  9. ?>


plik zapisujący natomiast tak:

  1. <?php 
  2. $pole2 = trim($_POST['pole2']);
  3. $pole2 = str_replace("\n","<br>",$pole2); 
  4.  
  5. if(empty($pole1) and empty($pole2)) { 
  6.  
  7. // prosty formularz zawieraj&plusmn;cy dwa pola 
  8. echo '<form action="" method="post"> 
  9. <textarea name="pole2" style="width: 580px; height: 300px; background-color: #C5CDCE; border: 1 solid #000000" rows="1" cols="20">
  10. Wpisz treść ogłoszenia.
  11. </textarea><br /> 
  12. <input type="submit" value="Zapisz" /> 
  13. </form>'; 
  14. } 
  15. else { 
  16.  
  17. // dane pochodz&plusmn;ce z formularza 
  18. $dane = $pole2."<br />"."<br />"."<br />"."<hr color=gray size=1 />"."<br />"."<br />";"\n";
  19. // przypisanie zmniennej $file nazwy pliku 
  20. $file = "ogloszenia.txt"; 
  21. // uchwyt pliku, otwarcie do dopisania 
  22. $fp = fopen($file, "a"); 
  23. // blokada pliku do zapisu 
  24. flock($fp, 2); 
  25. // zapisanie danych do pliku 
  26. fwrite($fp, $dane); 
  27. // odblokowanie pliku 
  28. flock($fp, 3); 
  29. // zamknięcie pliku 
  30. fclose($fp); 
  31. } 
  32. ?>


I nadal zamiast dopisywać kolejne wpisy do góry, skypt dodaje je w dół. Więc nadal coś jest nie tak :/

Pliki ze skryptem znajdują się tutaj: zapis, odczyt oraz plik ogloszenia.txt

Ten post edytował kimu 20.08.2007, 17:46:59
Go to the top of the page
+Quote Post
legorek
post
Post #7





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Zapisuj z góry na dół a wyświetlaj tak jak podał phpion.com, z dołu do góry i uzyskasz efekt który chciałeś.
Go to the top of the page
+Quote Post
kimu
post
Post #8





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Kiedy zmieniac "a" na "r+" to wtedy wpisy się podmieniają a nie dopisują.
Go to the top of the page
+Quote Post
legorek
post
Post #9





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


Okej napiszę tak, żebyś zrozumiał. Wróć do bazowej wersji skryptu.

W skrypcie zapisującym nic nie zmieniaj. Czyli pozostaw 'a'.
W skrypcie odczytującym zamień:
  1. <?php
  2. $file = file("ogloszenia.txt");
  3. ?>

na
  1. <?php
  2. $file = array_reverse(file("ogloszenia.txt"));
  3. ?>


W ten sposób co prawda, w pliku będziesz miał najnowsze na dole, ale dzięki zastosowaniu array_reverse" title="Zobacz w manualu PHP" target="_manual przy wyświetlaniu będą na górze.

A temat nadaje sie do przedszkola.

Ten post edytował legorek 20.08.2007, 20:13:36
Go to the top of the page
+Quote Post
Hacker
post
Post #10





Grupa: Zarejestrowani
Postów: 225
Pomógł: 0
Dołączył: 1.11.2005

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


Ale przecież to mu nic nie da. Nadal będzie nie działać... dlaczego?
średnik zamiast kropki (a tak propos to za dużo tych kropek...)
  1. <?php
  2. $dane = $pole2."<br /><br /><br /><hr color=gray size=1 /><br /><br />".PHP_EOL;
  3. ?>


Ten post edytował Hacker 20.08.2007, 20:37:09
Go to the top of the page
+Quote Post
kimu
post
Post #11





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 25.06.2007

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


Czyli to co napisał legorek plus zamiana tego:

  1. <?php
  2. $dane = $pole2."<br />"."<br />"."<br />"."<hr color=gray size=1 />"."<br />"."<br />";"\n";
  3. ?>


na to:

  1. <?php
  2. $dane = $pole2."<br /><br /><br /><hr color=gray size=1 /><br /><br />".PHP_EOL;
  3. ?>

Tak ?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 02:46