Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzanie ip,klikanie w baner i dopisywanie ip do .txt
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
Lonely wolf
A więc prosiłbym kogoś o pomoc w stworzeniu następującego skryptu:
Każdy wchodzący na strone aby dostać się do treści właściwej, musiałby kliknąć raz w miesiącu na baner. Chciałbym, żeby oparty był na wpisywaniu numerów IP do pliku tekstowego np. ip.txt. Miło byłyby żeby także wpisywał przy okazji date klikniecia. A więc:

Narazie jestem laikiem w dziedzienie php wiec:
- na poczatku bedzie czytany ip.txt
- nastepnie bedzie pobierany nr IP
- potem byloby sprawdzane czy dany numer IP (ciąg znaków) znajduje sie juz w pliku
- jezeli jest to odrazu otwiera mu index.php, natomiast jezeli nie, to otwiera specjalnie przygotowana strone z danym banerem i jakims napisem
- po kliknieciu strona zostalaby otwarta w nowym oknie, numer IP wraz z datą byłby dopisywany do ip.txt
- po tej operacji skrypt odczekiwalby 5 sekund i otwieralby strone


Jak narazie sam doszedlem do tego:
  1. <?
  2. $dane = fread(fopen("ip.txt","r"),filesize("ip.txt")); /* wczytujemy stare IP */
  3. $czas = time();
  4. $new = getenv("REMOTE_ADDR").'-'.date("d/m/Y", $czas).'-'.strip_tags($ref).'n'; /* ten fragment skopiowalem, 
  5. a funkcja strip_tags ma cos zabezpieczac - szczerze powiedziawszy to nie wiem na jakiej dziala zasadzie */
  6.  
  7. /* Tu mi brakuje sprawdzania nr ip, klikania w baner */
  8.  
  9. $new .= $dane;
  10. $fp = fopen("file/ip.txt","w"); /* zapisujemy nowe IP gdy ktos nie klikal - dopiero po kliknieciu */
  11. fputs($fp,$new);
  12. fclose($fp);
  13. ?>


Jezeli nikomu nie bedzie sie chcialo za to zabrac to prosze o podpowiedzi w stulu funkcja sprawdzajaca ciag znakow, z tym klikaniem(dla mnie najtrudniejszy element) i odczekiwanie 5s. Sprobuje sam to wszystko posklejac smile.gif
Speedy
linia nr 10 -> Jeśli chcesz dopisywać kolejne IPeki, to otwieraj plik w trybie "a" (do dopisywania nowej zawartości), a nie "w" (które wyczyści Ci cały plik i dopisze nową wartość). Bez sensu zczytywać cały plik i sklejać to co się zczyta z nową wartością - wystarczy tę nową wartość jedynie dopisać.

linia nr 4 -> Znak nowej linii daj w cudzysłowie ( " " ), a nie apostrofach ( ' ' ), bo nie zrobi się nowa linia winksmiley.jpg.
Lonely wolf
Właśnie odkryłem błąd, który psułby mi działanie calego skryptu - nie mozna byloby sprawdzac zawartosci ip.txt pod katem $new poniewaz szukaloby rowniez odpowiedniej daty, a przeciez chodzi mi tylko o odnalezienie IP. Dlatego tez chce wprowadzic kolejna zmienna $new2 ktora bedzie tylko numerem IP danego internauty:)

  1. <?
  2. $dane = fread(fopen("ip.txt","r"),filesize("ip.txt"));
  3. $czas = time();
  4. $new = getenv("REMOTE_ADDR")."-".date("d/m/Y", $czas)."-".strip_tags($ref).'n';
  5. $new2 = getenv("REMOTE_ADDR");
  6.  
  7. // Tu mi brakuje sprawdzania nr ip, klikania w baner
  8.  
  9. $fp = fopen("file/ip.txt","a");
  10. fputs($fp,$new);
  11. fclose($fp);
  12. ?>


Niestety dalej nie wiem jak odnajdywac dany ciag znakow
i pliku - podejrzewam ze moze to byc funkcja ereg
  1. <?
  2. if(ereg("$new2", $dane)) // nie jestem pewien co do tego cudzysłowia
  3. // Tutaj ma otwierac stronke index.php
  4. else
  5. // otwiera strone z banerem, wczytuje $fp(nizej) i czeka na spelnienie kolejnego warunku
  6. $fp = fopen("file/ip.txt","a");
  7. if(klikniecie w baner)
  8. czeka 5sek. i ...
  9. fputs($fp,$new);
  10. fclose($fp);
  11. ?>

Kompletnie nie wiem jak jest z tym klikaniem w baner i nie wiem czy funkcja ereg jest wlasciwa - czy to akurat ta ktora poszukuje
Speedy
Apropos kodu nr 1.

Lepiej zrób tablicę z tego pliku, to wtedy łatwiej będzie Ci sprawdzić, czy dany IP tam jest.

Możesz to zmodyfikować tak

  1. <?
  2. $dane = file("ip.txt"); // robimy tablice z pliku
  3. $czas = time();
  4. $new = getenv("REMOTE_ADDR")."-".date("d/m/Y", $czas)."-".strip_tags($ref)."n"; // poprawilem znak nowej linii ;-)
  5. $new2 = getenv("REMOTE_ADDR");
  6.  
  7. // Tu mi brakuje sprawdzania nr ip, klikania w baner
  8.  
  9. // wykonujemy pętlę foreach na tablicy zrobionej z pliku
  10.  
  11. foreach($dane as $zawartosc_pojedynczej_linii)
  12. {
  13.  
  14. // sprawdzamy, czy w pojedynczej linii znajduje sie ip za pomoca stristr()
  15.  
  16.  if(stristr($zawartosc_pojedynczej_linii, getenv("REMOTE_ADDR")) <> "")
  17.  {
  18.  $ip_jest_w_pliku = true;
  19.  }
  20.  else
  21.  {
  22.  $ip_jest_w_pliku = false;
  23.  }
  24.  
  25. }
  26.  
  27. if($ip_jest_w_pliku == true)
  28. {
  29.  
  30. header("Location: index.php") // otworz index.php jesli ip jest w pliku
  31. }
  32. elseif($ip_jest_w_pliku == false)
  33. {
  34.  
  35. // dopisujemy ip do pliku, jesli go tam nie ma
  36.  
  37. $fp = fopen("file/ip.txt","a");
  38. fputs($fp,$new);
  39. fclose($fp);
  40.  
  41. header("Location: strona_z_bannerami.php") // otworz strone z bannerami jesli ip nie ma w pliku
  42. }
  43.  
  44. ?>


Pisałem to z palca - nie wiem, czy będzie działać - pokombinuj, a sam dojdziesz do rozwiązania biggrin.gif
Lonely wolf
Dzieki:) testy zaczna sie dopiero kiedy stronka na ktorej chce to zastosowac bedzie skonczona:) bardzo dziekuje za pomoc:) Baaaaardzo mi pomogles:)


Edycja:
Juz widze ze nie bedzie dzialal tak jak chce - moze i faktycznie bedzie sie cos tam robic, ale dzialac tak jak chce napewno nie bedzie:/ A mianowicie blad wystepuje tutaj:
  1. <?
  2. if($ip_jest_w_pliku == true)
  3. {
  4. header("Location: index.php") // otworz index.php jesli ip jest w pliku
  5. elseif($ip_jest_w_pliku == false) // czy tu nie wystarczy samo else?? przeciez warunek IF'a nie jest spelniony
  6. {
  7.  
  8. header("Location: strona_z_bannerami.php") // otworz strone z bannerami jesli ip nie ma w pliku - cos mi sie wydaje ze ten
  9.  // skrypt na dopisanie ip do ip.txt dopiero wystapi na stronie strona_z_banerami.p
    hp
  10.  
  11. }
  12.  
  13. // tutaj jest KONIEC!!(chyba) dopisywanie bedzie dopiero na stronie z banerami:)
  14.  
  15. ?>


Natomiast na stronie strona_z_banerami.php bedzie cos takiego:
  1. <?
  2. $fp = fopen("file/ip.txt","a");
  3. $new = getenv("REMOTE_ADDR")."-".date("d/m/Y", $czas)."-".strip_tags($ref)."n";
  4. if(klikniecie w baner)
  5. {
  6. fputs($fp,$new);
  7. fclose($fp);
  8. i czeka 5 sekund
  9. }
  10. else
  11. { //tutaj nie ma sie dziać nic
  12. }
  13. ?>

Czy kiedy bedzie dopisywac mi $new dopisze mi to w ostatniej linijce czy tez w nowej?? bo widze ze przed czasem jest "robienie" kolejnej linijki natomiast nie wiem jak jest z tym dopisywaniem
Speedy
uwaga: zauważyłem, że zrobiłem błąd - nie ma być "n" tylko "\n" - na szybko robiłem więc tak wyszło winksmiley.jpg.
Będzie dopisywać w nowej linijce.
Tamtego elesifa z pierwszego kodu można oczywiście zastąpić elsem - po prostu chciałem obrazowo pokazać rozwiązanie winksmiley.jpg.
W drugim kodzie jeśli w else ma nic nie robić, możesz po prostu tego else nie pisać.

if(klikniecie w baner) możesz zrobić tak:

  1. <?php
  2.  
  3. if($_GET['kliknij'] == 'tak')
  4. {
  5. fputs($fp,$new);
  6. fclose($fp);
  7. sleep(5); // czeka 5 sekund
  8. }
  9.  
  10. ?>
  11.  
  12. <a href="plik_z_kodem.php?kliknij=tak"><img src="banner.jpg" alt="" /></a>


To przykładowe rozwiązanie - chodzi o pomysł smile.gif.
Lonely wolf
A wiec ten skrypt znajdzie sie na stronie glownej
  1. <?
  2. $dane = file("ip.txt");
  3. $czas = time();
  4. $new = getenv("REMOTE_ADDR")."-".date("d/m/Y", $czas)."-".strip_tags($ref)."n";
  5. $new2 = getenv("REMOTE_ADDR");
  6.  
  7. foreach($dane as $zawartosc_pojedynczej_linii)
  8. {
  9.  if(stristr($zawartosc_pojedynczej_linii, getenv("REMOTE_ADDR")) <> "")
  10.  {
  11.  $ip_jest_w_pliku = true;
  12.  }
  13.  else
  14.  {
  15.  $ip_jest_w_pliku = false;
  16.  }
  17. }
  18.  
  19. if($ip_jest_w_pliku == true)
  20. {
  21. header("Location: index.php") 
  22. }
  23. else
  24. {
  25. header("Location: strona_z_bannerami.php")
  26. }
  27.  
  28. ?>


Natomiast ten na stronie z banerem
  1. <?php
  2.  
  3. if($_GET['kliknij'] == 'tak')
  4. {
  5. fputs($fp,$new);
  6. fclose($fp);
  7. sleep(5); // czeka 5 sekund
  8. header("Location: index.php")
  9. }
  10.  
  11. ?>
  12.  
  13. <a href="plik_z_kodem.php?kliknij=tak"><img src="banner.jpg" alt="" /></a>


I jeszcze pytanie - czy jest jakas funkcja ktora wykrywalaby przekierowanie w dany adres, ale na zasadzie ze nie musialbym ingerowac w kod banera??

Znalazlem takie o to rozwiazanie ale nie wiem jak je zastosowac, a raczej wykorzystac w w/w skrypcie:
http://biblioteka-php.be/rotator-banerow/d...kliknieciu.html
Niestety nie wiem czy to wymaga ingerowania w kod baneru czy tez nie - bylbym bardzo wdzieczny gdyby ktos opisal mi poszczegolne fragmenty tego skryptu

PS. zauwazylem ze skrypt ten jest oparty na bazie danych - czy daloby sie w odpowiednich miejscach na stronie zamiescic ten banerek "standardowo"-w htmlu??
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-2024 Invision Power Services, Inc.