Wątek przeniesiony 2015-01-04 21:16 z PHP przez dzek69.

Umieszczenie licznika odwiedzin w podstronie

0

Witam
Mam nadzieje że teraz dobrze to zrobiłem ;).
Jestem początkującym programistą w php, chciałem umieścić na stronie licznik odwiedzin niewidzialny dla innych. Czyli wywołuje go w ten sposób www.http://4programmers.net/Forum/licznik.php

Ma on przechowywać: czas odwiedzin, IP i nazwe hosta. Zrobiłem coś takiego. Gdy chce sprawdzić czy działa to pojawia się tabela, ale bez zawartości. Nie wiem co robię źle, proszę o pomoc.

<div align="center">
<?php

$ile=0;

$zzz=fopen("odwiedziny","r");
while ($linia=fgets($zzz,4096))
{
$ile++; // taki durny sposób na policzenie linijek - czyli ilości całkowitej wejść na nasze stronę :) 
}
$linia=explode("!@!@!",$zzz[1]);

fclose($zzz);


$plik = file("odwiedziny");
$linia=explode("!@!@!",$plik[0]); 
         

echo "<p align="center">
      Wszystkich odwiedzin: $ile (począwszy od $linia[0])<br><br>
      Szczegółowy wykaz wejść: <br><br>"; // wypisujemy ile było wszystkich wejść od początku

?>

<table border="1">

<tr width="1%">
<td width="25%">
czas</td>
<td width="25%">IP</td>
<td width="50%">host</td>
</tr>

<?

$plik = file("odwiedziny");
$liczba_wierszy = sizeof ($plik);

for ($i=0;$i<=$liczba_wierszy;$i++) // wyświetlimy teraz ostatnie 20 wpisów, zamiast wszystkich których może być kilka tysięcy...

{

$linia=explode("!@!@!",$plik[$i]); 
echo "<tr><td>$linia[0]</td>
<td>$linia[1]</td>
<td>$linia[2]</td>
</tr>";
         
}
?>
</table>
</div> 
0

Zacznij sobie od analizowania krok po kroku swojego kodu. Zastosuj Metodę gumowej kaczuszki i mów głośno o tym co robisz, tj:

$zzz=fopen("odwiedziny","r");
// do zmiennej $zzz przypisuję zasób z otwartym plikiem
while ($linia=fgets($zzz,4096)) // dopóki jest możliwe odczytanie 4096 znaków z kolejnej linii w pliku
{
$ile++; // zwiększam licznik
}
// po zakończeniu pętli próbują użyć funkcji explode na ZASOBIE $zzz, który w dodatku traktuję z niewyjaśnionego powodu jako tablicę
$linia=explode("!@!@!",$zzz[1]);
// a gdyby to nawet była ostatnia linia pliku - to nie wiem po co to robię
 
fclose($zzz);

potem znowu powtarzasz ten myk z explode nie wiadomo w jakim celu..

Generalnie to tak:
WŁĄCZ sobie pokazywanie wszystkich możliwych błędów i ostrzeżeń w php - żebyś od razu je widział i poprawiał. Nauczą Cię dobrych praktyk.
Dwa - analizuj kod!! Nie kopiuj z tutoriali z myślą "może zadziała", a jak nie działa to nie zmieniaj losowych nazw zmiennych "aż zadziała". Jeżeli kodu nie rozumiesz to go nie używaj. Jeżeli chcesz go użyć - to go zrozum.
Jeżeli masz problem z przewidzeniem co zwróci dana funkcja - zajrzyj do manuala http://php.net/
Jeżeli chcesz wiedzieć co zwróciła funkcja - użyj prymitywnej, ale najprostszej metody debugowania - użyj funkcji var_dump.

$nieznanywynik = magicznafunkcja($parametr1, 10);
echo "<pre>";
var_dump($nieznanywynik);
echo "</pre>";

Rób tak W KAŻDEJ LINIJCE jeżeli masz problem ze zrozumieniem kodu - z każdej linii kodu wywalaj bieżące dane i jeżeli w którymś kroku nie będą takie, jak spodziewane - szukaj przyczyny.

Kod to jest jeden wielki chaos i tragedia - zachowaj go sobie, za rok się będziesz śmiał, po dwóch Ci będzie wstyd - ale ja też podobnie zaczynałem (choć miałem gorzej, bo praktycznie brak dostępu do internetu). Póki co - poprawiaj go. Idea jest zła, wszystko jest złe, ale najpierw doprowadź ten do ładu :)

Czyli wywołuje go w ten sposób www.http://4programmers.net/Forum/licznik.php

No a to dalej coś nawala ;] I nie wiem co tam miało być.

Polecam rejestrację na forum - masz możliwość edycji postów, otrzymywania powiadomień o odpowiedziach i takie tam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1