Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Licznik
kamil_lk
post
Post #1





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Mam pewien problem. Napisałem licznik oparty na pliku tekstowym. Na początku działał jak należy, a po dodaniu komentarzy wartość licznika nie wzrasta. O co chodzi?

  1. <?php
  2. $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  3. $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  4. $wartosc++; // zwieksza wartość odczytanego pliku o 1
  5. echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  6. fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  7. fclose($plik); // zamyka otowrzony plik licznik.txt
  8. ?>


Proszę o pomoc.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
a po dodaniu komentarzy wartość licznika nie wzrasta

No to mozna by sie domyslic, ze chodzi ocos z tymi komentarzami... niestety nie byles na tyle domyslny by wkleic kod odpowiedzialny za komentarze i wogole wyjasnic co mają komentarze do licznika wiec.... domysl sie sam co wiec...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamil_lk
post
Post #3





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


napisałem sobie komentarze, aby wiedzieć krok po kroku co robi skrypt.. po usunięciu tych komentarzy nadal nie działa :/ .. tylko czemu? mógłbyś mnie naprowadzić co jest źle?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




aaaaa, mowisz o komentarzach php smile.gif myslalem ze napisales dodatkowy moduł komentarzy do swego serwisu.... smile.gif
Wyrażaj się jaśniej na przyszlosc winksmiley.jpg

A jak usuniesz teraz komentarze to zacznie dzialac? Niemozliwe. KOmentarze nie mają wplywu na kod. Moze dodając komentarze dodales cos innego przypadkiem?

Kod co tu podales jest ok. Przy zalozeniu ze istnieje plik licznik.txt winksmiley.jpg

edit: wlacz sobie wyswietlanie wszystkich bledow. moze masz jakies:
http://nospor.pl/php-faq-n29.html#faq-2


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamil_lk
post
Post #5





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


plik licznik.txt istnieje, dodałem skrypt od błędów, ale żadnego mi nie wywaliło. a może to wina krasnala?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. <?php
  2. $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  3. var_dump($plik);
  4. $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  5. echo "Przed: $wartosc ";
  6. $wartosc++; // zwieksza wartość odczytanego pliku o 1
  7. echo "Po: $wartosc ";
  8. echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  9. fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  10. fclose($plik); // zamyka otowrzony plik licznik.txt
  11. ?>

Pokaz co wyswietlilo


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamil_lk
post
Post #7





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


resource(2) of type (stream) Przed: 1 Po: 1 Oglądano nas: 1 razy.

po odświezaniu nie wzrasta wartość
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




dobre, dobre.... smile.gif
a tak:
  1. <?php
  2. $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  3. var_dump($plik);
  4. $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  5. $wartosc = (int)$wartosc;
  6. echo "Przed: $wartosc ";
  7. $wartosc++; // zwieksza wartość odczytanego pliku o 1
  8. echo "Po: $wartosc ";
  9. $wartosc = $wartosc + 1; // zwieksza wartość odczytanego pliku o 1
  10. echo "Po2: $wartosc ";
  11.  
  12. echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  13. fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  14. fclose($plik); // zamyka otowrzony plik licznik.txt
  15. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamil_lk
post
Post #9





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


resource(2) of type (stream) Przed: 2 Po: 3 Po2: 4 Oglądano nas: 4 razy.

po jednym odświeżeniu:
resource(2) of type (stream) Przed: 4 Po: 5 Po2: 6 Oglądano nas: 6 razy.
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




czyli kluczem jest to:
$wartosc = (int)$wartosc;
smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamil_lk
post
Post #11





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


  1. <?php
  2. $plik= fopen(&#092;"licznik.txt\", \"r+\"); //otwiera plik licznik.txt
  3.  
  4. $wartosc= file_get_contents(&#092;"licznik.txt\"); // odczytuje wartość z pliku licznik.txt
  5. $wartosc = (int)$wartosc;
  6. $wartosc = $wartosc + 1; // zwieksza wartość odczytanego pliku o 1
  7. echo &#092;"Oglądano nas: $wartosc razy.\"; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  8. fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  9. fclose($plik); // zamyka otowrzony plik licznik.txt
  10. ?>


działa winksmiley.jpg ) dzięki winksmiley.jpg

bez liniki:
$wartosc = (int)$wartosc;

oraz ze zmienioną linijką:
$wartosc++ na $wartosc= $wartosc+1
też działa winksmiley.jpg

Ten post edytował kamil_lk 19.03.2009, 11:43:43
Go to the top of the page
+Quote Post
Zyx
post
Post #12





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

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


Ktoś lub coś musiał dopisać jakieś spacje i tabulacje na koniec pliku licznik.txt i z tego powodu PHP nie potrafił tego zinkrementować po wczytaniu - przetestowałem Twój skrypt i gdy zawartość pliku była poprawna, wszystko działało. Dopisałem na końcu dwa zejścia do nowej linii wraz z tabulacją i przestało. Wczytując dane z plików, musisz pamiętać o sprawdzeniu ich poprawności i odfiltrowaniu syfu, o który naprawdę nietrudno. Inaczej jesteś narażony na takie właśnie kwiatki.

Przy okazji odkryłem ciekawą własność operatora ++. Otóż okazuje się, że potrafi on poprawnie inkrementować również alfabet smile.gif.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Przy okazji odkryłem ciekawą własność operatora ++. Otóż okazuje się, że potrafi on poprawnie inkrementować również alfabet

http://pl.php.net/manual/pl/language.operators.increment.php
Cytat
Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.
winksmiley.jpg

Cytat
oraz ze zmienioną linijką:
$wartosc++ na $wartosc= $wartosc+1
Zachodzi wowczas domyslna konwersja na inta dlatego dziala smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Mephistofeles
post
Post #14





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Jako ciekawostkę powiem, że lepiej jest zrobić ++$zmienna (szybsze), no i zamiast fopen, fwrite i fclose używać file_put_contents winksmiley.jpg.
Go to the top of the page
+Quote Post
kamil_lk
post
Post #15





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


  1. <?php
  2. $ciastko= setcookie("count","1");
  3. if ($ciastko !="1") {
  4. $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  5. $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  6. $wartosc= $wartosc+1; // zwieksza wartość odczytanego pliku o 1
  7. echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  8. fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  9. fclose($plik); // zamyka otowrzony plik licznik.txt
  10. }
  11. else {
  12. $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  13. $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  14. echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  15. fclose($plik);
  16. }
  17. ?>


moglibyście powiedzieć czy jest to dobrze napisane? chodzi mi o to żeby licznik był odporny na odświeżanie
Go to the top of the page
+Quote Post
b4x
post
Post #16





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Zrób może tak (wydaje mi się, że lepiej będzie na sesjach.):

  1. <?php
  2.  
  3.    if (!isset($_SESSION['zaliczono'])) {
  4.  
  5.        $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  6.        $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  7.        $wartosc= $wartosc+1; // zwieksza wartość odczytanego pliku o 1
  8.        echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  9.        fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  10.        fclose($plik); // zamyka otowrzony plik licznik.txt
  11.        $_SESSION['zaliczono'] = true;
  12.  
  13.    } else {
  14.  
  15.        $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  16.        $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  17.        echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  18.        fclose($plik);
  19.    }
  20. ?>


Ten post edytował b4x 19.03.2009, 21:53:19


--------------------
Go to the top of the page
+Quote Post
kamil_lk
post
Post #17





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


a czy tamten kod jest poprawny?
Go to the top of the page
+Quote Post
b4x
post
Post #18





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

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


Co do tamtego kodu:

1. Ustawiasz ciastko przed zapisaniem wartości - czyli nawet nie dodałeś wartości tylko "na start" dałeś że odwiedził stronę (pierw sprawdź, i jeśli nie odwiedził - ustaw cookie).
2. Sprawdzasz ciasteczko czy jego wartość != 1 funkcja setcookie" title="Zobacz w manualu PHP" target="_manual, odwołaj się do $_COOKIE['count'].

Czyli poprawnie powinno wyglądać jakoś tak:

  1. <?php
  2.   if (!isset($_COOKIE['count'])) {
  3.  
  4.       $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  5.       $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  6.       $wartosc= $wartosc+1; // zwieksza wartość odczytanego pliku o 1
  7.       echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  8.       fwrite($plik, $wartosc); // zapisuje zwiększoną wartość do pliku licznik.txt
  9.       fclose($plik); // zamyka otowrzony plik licznik.txt
  10.       setcookie("count","1"); // ustawiasz ciasteczko jak już zwiększysz ilość ;)
  11.  
  12.   } else {
  13.  
  14.       $plik= fopen("licznik.txt", "r+"); //otwiera plik licznik.txt
  15.       $wartosc= file_get_contents("licznik.txt"); // odczytuje wartość z pliku licznik.txt
  16.       echo "Oglądano nas: $wartosc razy."; // wyświetla wartość odczytanego i zwiększonego wcześniej pliku licznik.txt
  17.       fclose($plik);
  18.   }
  19. ?>


A tak poza tym wygląda ok.

Ten post edytował b4x 19.03.2009, 22:03:41


--------------------
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 Aktualny czas: 21.08.2025 - 10:01