Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]wyswietlenie obrazka raz na dzien
Forum PHP.pl > Forum > Przedszkole
sejgo
Witam

Mam takie zapytanie i prosbe

jezeli mam obrazek /baner/ ktory wyswietlam na stronie głownej i jak osoba wejdzie na stronę to wyswietla sie ten obrazek

i mianowicie chodzi mi o to by ten obrazek byl wyswietlany tylko raz na dzien dla jednego uzytkownika

czyli

uzytkownik chodzi na strone wyswietla sie obrazek , ale jezeli wejdzie kolejny raz tego samego dnia obrazek juz sie nie pojawia i nie wyswietla, i w następnym dniu jezeli uzytkownik ten sam wejdzie  znowu wyswietla sie obrazek tylko raz na dzien

myslalem ze mozna by bylo to zorbic za pomoco cookies aktywnym na 24 godziny.

wiec prosze o pomoc w jaki sposob cos takiego napisac i jaka by to mialo formę.

zapis ip do bazy danych i następnie sprawdzanie czy takie ip jest zapisane wypada z gry, gdyz w ten sspossob mocno obciazac bedzie baze non stop zapytaujac w niej o ip.




prosze o pomoc i z gory dziękuje

MateuszS
COOKIE to dobry pomysł, musisz ustawić cookie i jezeli cookie istnieje to nie wyswietlasz tego obrazka, najlepiej zeby cookie wygasalo o 24:00, wiec musisz napisac odpowiednia funkcje ktora policzy sekundy do 24:00 lub skorzystać z już istniejących opisanych w manualu, dodatkowo zabezpiecz to z poziomu bazy danych gdyby ktos usunal ciacha (tez dobrym pomyslem jest uwierzytelnienie)
sejgo
wiem jak stworzyc nastęujące rzeczy

<?php
//tworzymy plik cookie i czasie istnienia 1h = 3600 sekund
setcookie("baner", "tak", time()+3600);
?>

<?php
//Wyświetlamy zawartość naszych ciasteczek
echo $_COOKIE['baner'];
?>


 i teraz pytanie jak sprawdzic

jeżeli dodane jest juz ciasteczko to nie dodawaj ponownie jego ( bo dodajac caly czas ciasteczko to rowniez aktualizuje czas wygaśnięcia)

oraz jezeli niema ciasteczka to wyswietlaj obrazek/baner/ jezeli natomiast jest ciasteczko to nie pokazuj banera




prosze o jakies podowiedzi lub kod.

MateuszS
  1.  
  2. if(isset($_COOKIE["baner"]))
  3. echo "cookie juz istnieje, nie zmienie go"
  4. else
  5. setcookie(//itd
sejgo
zrobilem cos takiego




<?php
if(isset($_COOKIE["baner"]))
echo "cookie juz istnieje, nie zmienie go";
else
setcookie("baner", "tak", time()+3600);


if($_COOKIE['baner'] == "tak")
{
echo"brak banera";
}else
echo" tutaj baner";
}
?>

Odczytanie cookies bannera i porownanie z wartoscia: tak jezeli wartosc jest inna lub jej nie ma  to wyswietla wyswietla napis  tutaj baner jezeli jest wpis z porownaniem to wyswiwetla brak banera.




ale cos nie che mi tu chodzi wyswiwtla blad

czy robie cos zle




MateuszS
jaki blad? wystarczy pod tym pierwszym warunkiem wyswietlic banner (tym z isset),
DiamondPir
a znajdę gdzieś gotowy przykład takiego rozwiązania razem z napisanymi plikami cookie?
modern-web
COOKIE to jedno ale to za mało.
Przecież doba ma 24h, a COOKIE odlicza te 24h od wywołania skryptu.
A co jeśli internauta wszedł na stronę o godzinie 23:30; Wtedy kolejny obrazek zobaczy następnego dnia o ten samej porze.
Nie wiem czy jest w tym jakikolwiek sens... Jak na moje oko COOKIE powinno być automatycznie unieważnione o 00:00.
Byłoby to o wiele rozsądniejsze rozwiązanie.
DiamondPir
a nie ma do tego jakiegoś skryptu gotowego?
modern-web
Na tę chwilę przychodzi mi do głowy tylko jedno rozwiązanie...
Ale żeby ono działało musisz mieć serwer z obsługą Cron-a.
Wtedy możesz raz dziennie o 00:00 (24:00) wywołać skrypt, który będzie generował nowe identyfikatory / unieważniał ciasteczka.

Tak jak masz fragment:

  1. if(isset($_COOKIE["baner"]))


Cron zastępowałby tym:

  1. if(isset($_COOKIE["baner1856fsolKNDłasPnAS"]))


Jak widzisz ciasteczko wygląda już zupełnie inaczej smile.gif a co za tym idzie użytkownik zobaczy nowy obrazek bo takiego COOKIE jeszcze nie uzyskał.


Nie wiem jak wygląda cały Twój skrypt, więc trudno jest mi Tobie podać bardziej "przejrzysty" przykład :/

Pozdrawiam.
Wicepsik
Cytat(sejgo @ 4.03.2010, 19:32:00 ) *
zapis ip do bazy danych i następnie sprawdzanie czy takie ip jest zapisane wypada z gry, gdyz w ten sspossob mocno obciazac bedzie baze non stop zapytaujac w niej o ip.

non stop, czyli ile? Dużo wejść na stronę masz? Zawsze możesz do sesji zapisać link do obrazka danego użytkownika

  1. if(!isset($_SESSION['banner'])){
  2. $result = mysql_fetch_array(mysql_query('zapytanie'));
  3.  
  4. $_SESSION['banner'] = $result['img'];
  5. }else{
  6. echo $_SESSION['banner']; // <a href="http://twojserwer.pl/banner.jpg" target="_blank">http://twojserwer.pl/banner.jpg</a>
  7. }
modern-web
Tylko wiesz... To nie rozwiązuje całego problemu ;p
Wicepsik
  1. /*
  2.  * tabela banner
  3.  * ip - varchar
  4.  * time - datetime
  5.  * img - varchar
  6.  */
  7.  
  8. if(!isset($_SESSION['banner'])){
  9. $result = mysql_query('SELECT ip, UNIX_TIMESTAMP(time) as time, img FROM banner WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'"'));
  10. if( mysql_num_rows($result) > 0 ){
  11. $res = mysql_fetch_array($result);
  12. $_SESSION['banner']['img'] = $res['img'];
  13. $_SESSION['banner']['time'] = $res['time'];
  14. }else{
  15. mysql_query('INSERT INTO banner VALUES ("'.$_SERVER['REMOTE_ADDR'].'", NOW(), "http://linkdobannera.pl/"');
  16. }
  17. }else{
  18. if($_SESSION['banner']['time'] < time()){
  19. UPDATE('UPDATE banner SET time = NOW(), img = "http://linkdonowegoobrazka.pl/" WHERE ip = "'.$_SERVER['REMOTE_ADDR'].'"');
  20. unset($_SESSION['banner']);
  21. }else{
  22. echo $_SESSION['banner']['img'];
  23. }
  24. }
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.