Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cookies, zabezpieczenie przed odświeżaniem podstron
Forum PHP.pl > Forum > Przedszkole
Anqel
Witam wszystkich.

Zacznę od tego, że mimo prób szukania nie znalazłem niczego co by mogło mi pomóc. Poza tym jestem nowy i pragnę się przywitać.

problem:

Piszę sobie system galerii w phpie oparty na mySQLu i dotarłem do etapu oceniania prac, oraz zliczania odwiedzin.
Przydało by się by jeden użytkownik mógł dodać ocenę jeden raz, tak samo jak nabić statystykę odwiedzin (też jeden raz)

Intuicja podpowiada, że najprościej będzie użyc ciastek, ale tu jest problem właśnie..

Zrobić ciastko dla całego www jest raczej proste:

  1. <?
  2. $hit++;
  3. setcookie("hity", $hit);  //hity zamienia się na zmienna przechowywujaca wartość $hit
  4. echo($hity);
  5. ?>


ale jak zrobić by każda podstrona miała swoje własne ciastko? np na podstawie .php?id=4?

miałem dwa pomysły

1:
<?php
  1. <?php
  2. $nazwa=sprintf('hity%s',id);
  3. $hit++;
  4. setcookie($nazwa,$hit);
  5. ?>


tworzy mi takie ciastko ale nie wstawia pod $nazwa value


2:
  1. <?php
  2. $hit++;
  3. setcookie("hity[$id]", $hit);  //hity zamienia się na zmienna przechowywujaca wartość $hit
  4. echo($hity);
  5. ?>


generuję błędy przy czytaniu bodajże

czyli....oba zawiodły

jakieś sugestie ? pomijam już linię przechwytującą id z adresu
mokry
Wszelką ilość odwiedzin oraz oddanych głosów bazujesz na MySQl'u. Natomiast możliwość głosowania i ew odwiedzin/odświerzeń opierasz na cookie poniżej...
Będzie ono inne dla każdej podstrony w zależności od pobranej zmiennej $_GET['id'] z adresu przeglądarki.

  1. <?php
  2. setcookie("glosowano-".$_GET['id'], 1, ,time()+86400);
  3. ?>


Jeśli dobrze zrozumiałem to o to Ci chodziło winksmiley.jpg

EDIT:
Ciacho ważne przez 24h. Jeśli chcesz dłużej to zmieniasz ilość sekund w 3. argumencie funkcji setcookie().
Anqel
czyli zmiksowac jakias nazwe ze zmienna [id]
ok w jakiej zmiennej znajde potem wartosc cookie?

dla Twojego przykladu:

  1. <?php
  2. setcookie("glosowano-".$_GET['id'], 1, ,time()+86400);
  3. ?>


$glosowano ?

chyba doznalem olsnienia - z Twoja pomoca winksmiley.jpg
potem zdam raport :]
mokry
Sprawdzasz:
  1. <?
  2. if($_COOKIE['glosowano-'.$_GET['id'] == 1) {
  3. //kod, gdy juz glosowano
  4. }
  5. else {
  6. //a tu jeszcze nie glosowano... tu mozesz dawac zapytania do MySQL i inne potrzebn
    e...
  7. }
  8. ?>
Anqel
  1. <?php
  2. $id = (isset($_GET['id'])) ? $_GET['id'] : '';
  3.  
  4. setcookie("glosowano-".$_GET['id'], 1, ,time()+86400);
  5.  
  6. if($_COOKIE['glosowano-'.$_GET['id'] != 1)
  7. {
  8. ?>


wyswietla:

  1. Warning: setcookie() expects parameter 2 to be string, array given in /home/accounts_w/wgp/public_html/testowy/show.php on line 4
  2. Array


a teoretycznie nie powinien wykonać klamry
mokry
  1. <?
  2. setcookie("glosowano-".$_GET['id'], '1', ,time()+86400);
  3. ?>


Jedynke walnij w pojedyncze cudzysłowia
Anqel
dla :
  1. <?php
  2. $id = (isset($_GET['id'])) ? $_GET['id'] : '';
  3. //$iloscWejsc++;
  4. setcookie("iloscWejsc".$_GET['id'], '1', ,time()+86400);
  5. ?>


mam:



Parse error: syntax error, unexpected ',' in /home/accounts_w/wgp/public_html/testowy/show.php on line 4
mokry
  1. <?
  2.  
  3. $id = (isset($_GET['id'])) ? $_GET['id'] : '';
  4.  
  5. setcookie('glosowano-'.$_GET['id'], 1, time()+86400);
  6.  
  7. if($_COOKIE['glosowano-'.$id] != 1)
  8. {
  9. echo "ello ziooooom";
  10. }
  11.  
  12. ?>


Oczywiście kolejność i poszczególne warunki sam musisz sobie już ustalić, ale to już wg wymagań;)

A własnie... Linijkę
Kod
if($_COOKIE['glosowano-'.$id] != 1)

możesz zastąpić:
Kod
if(!$_COOKIE['glosowano-'.$id])

Nawet będzie bardziej optymalnie winksmiley.jpg
Anqel
teraz działa pięknie


WIELKIE DZIĘKI !
jak będziesz kiedyś we Wro to zgłoś się po piwo:]
mokry
Heh, prześlij GLS'em... Jak dasz do lodówki i dobrze zapakujesz to jak przyjdzie do mnie to będzie jeszcze zimne winksmiley.jpg


Do posta poniżej:
ad1.No to Tyskie lane w takim razie poproszę winksmiley.jpg
ad2.tez.
Anqel
dzisiaj lusterka do auta dostalem:]
wczoraj pieniadze zostaly zaksiegowane (allegro.pl)
GLS to szybkie bestie winksmiley.jpg

mysle ze jak wysle otwarte to sie nie zdarzy wygazowac :]

dobrej nocy zycze :]
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.