Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Licznik kliknięć
Forum PHP.pl > Forum > Przedszkole
mperlam
Cześć. Chciałbym stworzyć dość nietypowy licznik ale niestety nie wiem jak. Chodzi o to, że na stronie głównej strony www chcę mieć umieszczony graficzny licznik. Dodawanie do niego pojedynczych liczb wyglądałoby tak, że na osobnej podstronie znajdowałyby się dwa przyciski: + oraz -. Po kliknięciu w + wartość na stronie pow. się o jeden, minus- pomniejsza.

Znalazłem taki skrypt:

Kod
<?php
//Moj pierwszy zegar :-)
if(file_exists("counter.txt")){            //Sprawdza czy istnieje taki plik
    $fp=fopen("counter.txt","r+");        //Otwiera plik paramtetr r+ pozwala pisac, zapisuje w zmiennej $fp
    $count=fgets($fp,6);            //Odczytuje to co jest w pliku
    $count++;                //Inkrementuje zmienna $count
    rewind($fp);            //Ustawia wskaznik na poczatku pliku
    fputs($fp,$count,6);            //Zapisuje inkrementowana $count w pliku mozna urzyc fwrite()
    fclose($fp);            //Zamyka plik
}else{
    $fopen("counter.txt","wb");        //Tworzy plik
    $count="1";            //$count jest inicjowany z wartoscia 1
    fputs($fp,$count,6);            //Wartosc zostaje zapisana w pliku
    fclose($fp);            //Utworzony plik zostaje zamkniety
}

//Ta funkcja troszczy sie o pierwsze zera
$count=sprintf("%03d",$count);

//Tutaj skladam licznik z gifow
for($i=0;$i<3;$i++){
$img_counter=$img_counter . "<img src=counter/" . substr($count,$i,1) . ".gif align=absmiddle width=10 height=14>";
}
echo $img_counter;
?>


Działa bardzo fajnie bo na plikach txt i nie jest skomplikowany. Działa on jednak tak, że wyświetla liczbę wyświetleń strony. Czy mogę prosić o przeróbkę (czyli stworzenie drugiego pliku i przeróbkę tego)? Nie jestem zbyt kumaty a próbowałem coś wymodzić ale średnio mi się to udało...
sadistic_son
Link z plusem i minusem musi wyglądać tak:
  1. <a href="adres.php?klik=plus">PLUS</a><a href="adres.php?klik=minus">MINUS</a>
A przerobiony skrypt:
  1. if(isset($_GET['klik']) && ($_GET['klik']=='PLUS' || $_GET['klik']=='MINUS')){
  2. if(file_exists("counter.txt")){ //Sprawdza czy istnieje taki plik
  3. $fp=fopen("counter.txt","r+"); //Otwiera plik paramtetr r+ pozwala pisac, zapisuje w zmiennej $fp
  4. $count=fgets($fp,6); //Odczytuje to co jest w pliku
  5. if($_GET['klik']=='PLUS'){ $count++; }
  6. if($_GET['klik']=='MINUS'){ $count--; }
  7.  
  8. rewind($fp); //Ustawia wskaznik na poczatku pliku
  9. fputs($fp,$count,6); //Zapisuje inkrementowana $count w pliku mozna urzyc fwrite()
  10. fclose($fp); //Zamyka plik
  11. }else{
  12. $fopen("counter.txt","wb"); //Tworzy plik
  13. $count="1"; //$count jest inicjowany z wartoscia 1
  14. fputs($fp,$count,6); //Wartosc zostaje zapisana w pliku
  15. fclose($fp); //Utworzony plik zostaje zamkniety
  16. }
  17.  
  18. //Ta funkcja troszczy sie o pierwsze zera
  19. $count=sprintf("%03d",$count);
  20.  
  21. //Tutaj skladam licznik z gifow
  22. for($i=0;$i<3;$i++){
  23. $img_counter=$img_counter . "<img src=counter/" . substr($count,$i,1) . ".gif align=absmiddle width=10 height=14>";
  24. }
  25. }
  26. echo $img_counter;
mperlam
Niestety jest chyba jakiś błąd składni gdyż zwraca mi błąd na piątej lini (Parse error: syntax error, unexpected T_STRING in /home/.../index.php on line 5)

Dobra uało się smile.gif

Kod wyglądać powinien tak:

Kod
<?php

if(file_exists("counter.txt")){ //Sprawdza czy istnieje taki plik

$fp=fopen("counter.txt","r+"); //Otwiera plik paramtetr r+ pozwala pisac, zapisuje w zmiennej $fp

$count=fgets($fp,6); //Odczytuje to co jest w pliku

if($_GET['klik']== plus){ $count++; }

if($_GET['klik']== minus){ $count--; }
      
rewind($fp); //Ustawia wskaznik na poczatku pliku

fputs($fp,$count,6); //Zapisuje inkrementowana $count w pliku mozna urzyc fwrite()

fclose($fp); //Zamyka plik

}else{

$fopen("counter.txt","wb"); //Tworzy plik

$count="1"; //$count jest inicjowany z wartoscia 1

fputs($fp,$count,6); //Wartosc zostaje zapisana w pliku

fclose($fp); //Utworzony plik zostaje zamkniety

}


//Ta funkcja troszczy sie o pierwsze zera

$count=sprintf("%03d",$count);

//Tutaj skladam licznik z gifow

for($i=0;$i<3;$i++){

$img_counter=$img_counter . "<img src=counter/" . substr($count,$i,1) . ".gif align=absmiddle width=10 height=14>";

}

echo $img_counter;
?>


Czy można zrobić tak, że po kliknięciu w plus lub minus pozostaję z powrotem na stronie z której klikam w ten PLUS lub MINUS?
piotrooo89
a gdzie masz ten link do klikania?
MateuszS
  1. <script type="text/javascript">
  2. function submit(id) {
  3. var input=document.getElementById('input');
  4. if(id=='plus') {
  5. input.value='plus';
  6. } else {
  7. input.value='minus';
  8. }
  9. document.form.submit();
  10. }
  11. </script>
  12. <form action="" method="POST" name="form" />
  13. <a href="#" style="color: green" onClick="submit('plus')">+</a> /
  14. <a href="#" style="color: red" onClick="submit('minus')">-</a>
  15. <input type="hidden" name="glos" id="input" />
  16. </form>
  17. <?
  18. // utworz plik glosy.txt
  19. if(isset($_POST['glos'])) {
  20. $glos=$_POST['glos'];
  21. $plik=fopen('glosy.txt','r');
  22. $tekst=fread($plik,200);
  23. if(!empty($tekst)) {
  24. $dziel=str_replace(' ','',$tekst);
  25. $dziel=explode('|',$dziel);
  26. if($glos=='plus') {
  27. @ $plus=$dziel[0]+1;
  28. $tekst=$plus.' | '.$dziel[1];
  29. } else {
  30. @ $minus=$dziel[1]+1;
  31. $tekst=$dziel[0].' | '.$minus;
  32. }
  33. fclose($plik);
  34. $wykasuj=fopen('glosy.txt','w+');
  35. $zapisz=fwrite($wykasuj,$tekst);
  36. if(!$zapisz) {
  37. echo 'Blad przy dodaniu glosu<br /><br />';
  38. } else {
  39. echo 'Dodano glos<br /><br />';
  40. }
  41. fclose($wykasuj);
  42. } else {
  43. $tekst=(0).' | '.(0);
  44. $zapisz=fwrite($plik,$tekst);
  45. fclose($plik);
  46. }
  47.  
  48.  
  49. }
  50.  
  51. // wyswietlanie
  52. $otworz=fopen('glosy.txt','r');
  53. $czytaj=fread($otworz,200);
  54. $plusminus=str_replace(' ','',$czytaj);
  55. $plusminus=explode('|',$plusminus);
  56. echo 'Na + zaglosowalo '.$plusminus[0].' userow, natomiast na - zaglosowano '.$plusminus[1].' razy';
  57. fclose($otworz);
  58.  
  59. ?>


kurcze spoznilem sie ;D jak na matme ;/ No nic moze komus sie przyda
sadistic_son
Cytat(mperlam @ 9.11.2009, 16:17:10 ) *
Czy można zrobić tak, że po kliknięciu w plus lub minus pozostaję z powrotem na stronie z której klikam w ten PLUS lub MINUS?
1) Można, wklej ten kod po prostu do tej strony na ktorej chcesz zostać.
2) Nie usuwaj pierwszej linijki, która sprawdza czy kliknięto w link 'klik'. Tam brakowało nawiasu i średnika, już poprawiłem.
mperlam
Kod
<input value="PLUS" type="button" onClick="self.location.href=('index.php?klik=plus')" />
<input value="MINUS" type="button" onClick="self.location.href=('index.php?klik=minus')" />



Zrobiłem dwa Buttony w takim stylu w pliku (załóżmy plik.php). W pliku index.php jest skrypt. Chcę aby po kliknięciu w plus lub minus pozostać z powrotem w plik.php bo teraz trafiam do index.php.


Usunąłem pierwszą linijkę gdyż jest ona dla mnie zbędna ponieważ skrypt od strony technicznej (kliknięcie w "klik") będę wykonywał tylko ja winksmiley.jpg
piotrooo89
  1. <input value="PLUS" type="button" onClick="self.location.href=('?klik=plus')" />
  2. <input value="MINUS" type="button" onClick="self.location.href=('?klik=minus')" />


a coś takiego?

aha no i skrypt do obsługi tego musisz mieć na stronie z tymi buttonami.
sadistic_son
Cytat(sadistic_son @ 9.11.2009, 16:22:28 ) *
1) Można, wklej ten kod po prostu do tej strony na ktorej chcesz zostać.
No to jest odpowiedź na Twoje pytanie! No i wiadomo, że musisz kierować linka/buttona do tej właśnie strony. Ni wklejaj tego skryptu do index.php tylko do plik.pxp skoro chcesz na nim pozostać.
mperlam
O kliknieciu adres się zmienia na klik... Chce aby nadal był taki jak przed kliknieciem winksmiley.jpg
sadistic_son
To zamiast linka uzyj formularza i metody POST.
mperlam
Formularz raczej odpada wiec pozostaje jednak przy tym adresie
Blame
To jest php. Strona musi się przeładować, a tym musisz jakoś przekazać informacje do skryptu co ma robić. Jeśli ci to nie pasuje to javascript.
mperlam
smile.gif Już nie trzeba smile.gif Skrypt działa dobrze ale muszę do tego dodać hasło. Chcę aby po prostu nad przyciskami był wyświetlany formularz na hasło i dopiero po wpisaniu prawidłowego dało się wykonać polecenia (czyli aby PLUS i MINUS dopiero po wpisaniu hasła zadziałały).

Powinno to wyglądać +/- tak:

Kod
<form action="?">
    <input [b]type="password"[/b] name="nazwa" />
</form>


Kod
if(? == 'haslo'){
if($_GET['klik']== plus){ $count++; }
if($_GET['klik']== minus){ $count--; }}


Bardzo proszę o poprawienie lub przeróbkę kodu gdyż niestety nie umiem tego zrobić :/

Blame
Według mnie jest to bezsensowne rozwiązanie, bo najlepiej by było jakbyś wyświetlał przyciski dopiero po wpisaniu poprawnego hasła bądź prosił o hasło po wciśnięciu przycisku i jeśli hasło jest ok skrypt by zliczał.
Według twojego pomysłu, aby skrypt działał musiałbyś przekazać plus i minus za pomocą $_POST czyli formularza, nie da się tego zrobić tak jak jest teraz, bo żeby sprawdzić czy hasło jest poprawne musisz je wysłać co wiąże się z przeładowaniem strony a dopiero potem możesz wcisnąć któryś z linków nie da się zrobić tego na raz. To tak jak byś chciał oskrobać i ugotować ziemniaki jednocześnie.
mperlam
Dziękuję za odpowiedź. Jeżeli nie jest to zbyt proste to sobie odpuszczę smile.gif Dziękuję wszystkim, którzy pomogli mi w temacie.
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.