Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pętla szukająca według daty
Forum PHP.pl > Forum > Przedszkole
matiz123
witam!
Proszę bardzo o pomoc Jak zrobić pętle która szukała by wpisy do pliku według daty.
Szukałem w googlach ale nic nie mogłem znaleźć jaka jest to pętla?

Proszę bardzo o pomoc wstydnis.gif
matyskiewicz
Nie ma różnicy jaką pętlę wykorzystasz...
Opisz dokładnie co potrzebujesz, bo z Twojego posta nic nie wynika.
matiz123
chodzi mi o to że mam licznik odwiedzin strony, który zapisuje odwiedziny w postaci

$today!@!@!$IP!@!@!$host

i chcę aby pętla przeszukała tablice w znalezieniu wpisów z dzisiaj
matyskiewicz
użyj np pętli while a w niej http://php.net/manual/en/function.array-search.php
matiz123
Mam taką pętle do zliczania wszystkich wpisów

  1. $ile=0;
  2.  
  3. $zzz=fopen("odwiedziny","r");
  4. while ($linia=fgets($zzz,4096))
  5. {
  6. $ile++; // taki durny sposób na policzenie linijek - czyli ilości całkowitej wejść na naszą stronę :)
  7. }
  8.  


i chciałbym zrobić coś takiego tylko do zliczania wpisów z dzisiejsza datą
matyskiewicz
Dlaczego robisz to na plikach nie łatwiej w DB?

  1. $ile = 0;
  2. $dzisiaj = date('Y-m-d'); //pamietaj o odpowiednim formacie;
  3. $uchwyt = @fopen("/tmp/plik_wejsciowy.txt", "r");
  4. if ($uchwyt) {
  5. while (($bufor = fgets($uchwyt, 4096)) !== false) {
  6. $data = explode("|", $bufor); //poszukujemy w linijce date
  7. if($data[0] == $dzisiaj)
  8. {
  9. $ile++;
  10. }
  11. }
  12. if (!feof($uchwyt)) {
  13. echo "Błąd: niespodziewany błąd fgets()\n";
  14. }
  15. fclose($uchwyt);
  16.  
  17. }
  18. echo $ile;


Cos w tym stylu, posalem to z reki.

matiz123
Nie odpisywałem bo próbowałem to dodać do reszty kodu zeby zadziałało ale teraz to pokazuje że jest 0 wyświetleń.

To wygląda tak mam kod na stronie która wpisuje odwiedziny do tablicy oto kod:

<?php
  1. <?php
  2.  
  3. if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"] != ""){
  4. $IP = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
  5. $proxy = $HTTP_SERVER_VARS["REMOTE_ADDR"];
  6. $host = @gethostbyaddr($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]);
  7. }else{
  8. $IP = $HTTP_SERVER_VARS["REMOTE_ADDR"];
  9. $host = @gethostbyaddr($HTTP_SERVER_VARS["REMOTE_ADDR"]);
  10. } // tutaj pobieramy IP i sprawdzamy czy delikwent łączy się przez proxy
  11.  
  12.  
  13. $today = date("F j, Y, g:i a"); // pobieramy dzisiejszą datę
  14.  
  15. $tablica=file("odwiedziny"); // wrzucamy plik odwiedziny do zmiennej w postaci tablicy
  16. $buffer=$tablica[count($tablica)-1]; // liczymy długość tablicy (ilość linijek w pliku)
  17.  
  18. $lip=explode("!@!@!",$buffer); // zamiast wrzucać date, ip i proxy linijka pod linijką, wrzucamy je w jedną i oddzielamy je ciągiem znaków !@!@! :)
  19.  
  20. if ($lip[1]!=$IP) { // sprawdzam czy ostatni wpis nie jest tym samym ip które teraz pobraliśmy, to zapobiegnie dopisywaniu odwiedzin przez odświeżanie strony
  21. $zzz=fopen("odwiedziny","a"); // otwieramy plik do nadpisania
  22. fputs($zzz,"$today!@!@!$IP!@!@!$host\n"); // zapisujemy odwiedziny w tej 'dziwnej' formie ;)
  23. fclose($zzz); // zamykamy plik
  24. }
  25.  
  26. ?>


zmieniłem

format zapisywanie dat na :

  1. <?php
  2.  
  3. $ile2 = 0;
  4.  
  5. $today = date("F j, Y,"); //pamietaj o odpowiednim formacie;
  6. $uchwyt = fopen("odwiedziny", "r");
  7. if ($uchwyt) {
  8. while (($bufor = fgets($uchwyt, 4096)) !== false) {
  9. $data = explode("|", $bufor); //poszukujemy w linijce date
  10. if($data[0] == $dzisiaj)
  11. {
  12. $ile2++;
  13. }
  14. }
  15. if (!feof($uchwyt)) {
  16. echo "Błąd: niespodziewany błąd fgets()\n";
  17. }
  18. fclose($uchwyt);
  19.  
  20. }
  21. echo "<p align=center><font size=1 face=Tahoma><b>Wszystkich odwiedzin:<font color=red> $ile2<br><br></font>";
  22. ?>


ale nie wiem dlaczego tez nie działa
matyskiewicz
Pokaż jeszcze wygenerowany plik.
matiz123
przykładowy wpis w pliku odwiedziny:

February 24, 2011, 3:44 pm!@!@!157.55.17.105!@!@!157.55.17.105

a oto cała strona z licznikiem

  1.  
  2. <?php
  3.  
  4. $ile=0;
  5.  
  6. $zzz=fopen("odwiedziny","r");
  7. while ($linia=fgets($zzz,4096))
  8. {
  9. $ile++; // taki durny sposób na policzenie linijek - czyli ilości całkowitej wejść na naszą stronę :)
  10. }
  11.  
  12. fclose($zzz);
  13.  
  14.  
  15. echo "<p align=center><font size=1 face=Tahoma><b>Wszystkich odwiedzin:<font color=red> $ile<br><br></font>"; // wypisujemy ile było wszystkich wejść od początku
  16.  
  17. ?>
  18.  
  19. <TABLE BORDER="1">
  20.  
  21. <tr width="1%"><td width="25%"><b>czas</td><td width="25%"><b>IP</td><td width=80%><b>host</td></tr>
  22.  
  23. <?
  24.  
  25. if (!isset($_REQUEST['n'])) // sprawdzamy czy jest zmienna $n przekazana w linku licznik.php?n=... - jeśl nie to :
  26. $n=20; // ustawiamy ją na 20 (pokażemy 20 ostatnich wejść)
  27. else
  28. $n=$_REQUEST['n']; // inaczej sprawdzamy na ile jest ustawiona
  29.  
  30. $plik = file("odwiedziny");
  31. $liczba_wierszy = sizeof ($plik);
  32.  
  33. for ($i=$liczba_wierszy-$n;$i<=$liczba_wierszy;$i++)
  34.  
  35. {
  36.  
  37. $linia=explode("!@!@!",$plik[$i]);
  38.  
  39. $angielskie = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
  40. $polskie = array("Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "PaĄdziernik", "Listopad", "Grudzień");
  41.  
  42. $linia[0] = str_replace($angielskie, $polskie, $linia[0]); // tutaj zamienimy daty na polski język, ponieważ zmienne przekazują datę po angielsku
  43.  
  44. echo ("<tr><td><b>$linia[0]</td>
  45. <td><b>$linia[1]</td><td>
  46. <b><a href=http://$linia[2]>$linia[2]</a></td></tr>");
  47.  
  48. }
  49.  
  50.  
  51. ?>
  52.  
  53. </TABLE>
  54.  
  55. <?
  56. echo ("<br><b><a href=\"?n=$liczba_wierszy\">Pokaz wszystkie odwiedziny</a></b><br>"); // a w ten sposób wyświetlimy link, który po kliknięciu pokaże nam wszystkie odwiedziny... :)
  57. ?>
  58.  




czy moze ktoś mi pomóc?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.