Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zapis wartości do jednego ciasteczka
Forum PHP.pl > Forum > Przedszkole
smiesznylolek
mam taki problem, napisalem sobie taki skrypcik w którym mam 5 banerów i przez cookie sprawdzam który baner user miał wyświetlony, jeśli nie miał któregoś z tych co są zapisane wciasteczkach to ten się wyświetla. Jeśli zostały wyświetlone przez usera wszystkie to wyświetlają się losowo. Tylko mam problem taki że do każdego banneru mam osobne ciasteczko. A chciałbym żeby w jednym ciasteczku były zapisane które banery zostały już wyświetlone. I z tym sobie własnie nie mogę dać rady. ( banery mają nazwy 1.gif - 5.gif). Tak jak mam zrobione to działa tylko każdy baner ma "swoje" ciasteczko. Kombinowałem troche z explode i implode a potem porównywanie tablic ale nic z tego mi nie wyszlo. Prosił bym o jakąś pomoc. Poniżej wklejam mój działający kod w którym zapisują się osobne ciasteczka.

  1. <?php
  2.  
  3. $znaleziono = FALSE;
  4. for($i=1;$i<=5;$i++){
  5. if (!isset($_COOKIE['banner'. $i])) { // w tej części sprawdza czy już był wyświetlany jakiś baner
  6. $tab[] = $i; $znaleziono = TRUE;
  7.  
  8. }
  9. }
  10.  
  11. if (!$znaleziono) {
  12. for($i=1;$i<=5;$i++){
  13. $tab[$i-1] = $i;
  14. }}
  15. $nr = $tab[rand()%count($tab)]; // jeśli nie był żaden to zostaje wyświetlony losowy baner
  16.  
  17. setcookie("banner".$nr, "1", time()+200000);
  18.  
  19. ?>
  20.  
  21. <!DOCTYPE html>
  22. <html>
  23. <head>
  24. <title>Licznik odwiedzin</title>
  25. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  26. </head>
  27. <body>
  28.  
  29. <?php
  30.  
  31. echo '<img src="bannery/'.$nr.'.gif" alt="banner reklamowy"/>';
  32.  
  33. ?>
  34. </body>
  35. </html>
fate
np. gdybys wyswietlal te banery po kolei moglbys w jedno ciasto zapisywac wartosc 1,2,3,4,5 i potem sprawdzac jak 1 to wyswietl 2 jak 3 to wyswietl 4 ... jak 5 to wyswietlaj losowo
smiesznylolek
stworzyłem coś takiego,(kod poniżej) ale mam problem, bo nie losuje mi tych banerów spośród tych których jeszcze nie wyświetlało, tylko losuje ogólnie. Tak jakby w ogole nie było wykonywana pierwsza część od isset, tylko sam następny if. (!($zanleziono)) ... Prosił bym o wytłumaczenie co źle robię bo już się troszke pogubiłem...;/
  1. <?php
  2. $zanleziono = false;
  3.  
  4. if(isset($_COOKIE['banner'])){
  5. $wyswietlone = explode(",", $_COOKIE['banner']);
  6. $tab = array(1,2,3,4,5);
  7. $niewyswietlone = array_diff($tab, $wyswietlone);
  8. $znaleziono = true;
  9. print_r($niewyswietlone); ;
  10. }
  11. if (!($zanleziono)) {
  12.  
  13. for($i=1;$i<=5;$i++){
  14. $niewyswietlone[$i-1] = $i;
  15. echo $niewyswietlone[$i-1];
  16. }}
  17.  
  18. $wylosowana=$niewyswietlone[rand()%count($niewyswietlone)];
  19. echo '<br/>';
  20. echo '<b> wylosowana: '.$wylosowana .'</br>';
  21. var_dump($wylosowana);
  22. $wyswietlone[] = $wylosowana;
  23. $wartosc_ciastka = implode(",", $wyswietlone);
  24. setcookie("banner", $wartosc_ciastka , time()+200000);
  25.  
  26.  
  27. ?>
  28. <!DOCTYPE html>
  29. <html>
  30. <head>
  31. <title>Licznik odwiedzin</title>
  32. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  33. </head>
  34. <body>
  35.  
  36. <?php
  37.  
  38.  
  39.  
  40. echo '<img src="bannery/'.$wylosowana.'.gif" alt="banner reklamowy"/>';
Turson
Literówka
$zanleziono
smiesznylolek
faktycznie, ale to nic nie dalo bo do ciasteczka za każdym razem dopisują mi się losowe wartośći od 1-5 az powtórkami, a powinny się losować bez powtórzeń. I w ciasteczku powinno być zapisanych tylko tych 5 wartości od 1-5 a potem losowo powinny się wyświetlać. Ale do ciasteczka są dopisywane cały czas wartości po każdym odświeżeniu...

teraz to zrobiłem coś takiego jak poniżej, zapisują się w ciasteczku wylosowane wartości banera przedzielone "," tyle że gdy zapiszą się już wszystkie 5 wartości to potem do ciasteczka zapisują się same '',". i ciasteczko wygląda w taki sposób "1,3,4,2,5,,,," i po wygenerowaniu tych pięciu banerów pojawia mi się:

Warning: array_rand(): Second argument has to be between 1 and the number of elements in the array in D:\xampp\htdocs\praktyczne\baner4.php on line 13
Notice: Undefined index: in D:\xampp\htdocs\praktyczne\baner4.php on line 14

Wiem o co chodzi z tym ostrzeżeniem ale nie wiem jak to zapisać żeby po wylosowaniu i zapisaniu w ciasteczku wszystkich 5ciu banerów, nie były już do niego dopisywane ale tylko losowane. Proszę o pomoc bo męcze się z tym a wydaje mi się że to jakaś pierdółka i nie daje mi to spokoju...

Chodzi mi tylko o to jak to zaimplementować że po zapisaniu do ciasteczka 5ciu wartości, kolejne banery byly już losowane bez zapisu w cookie

  1. <?php
  2.  
  3. $tablica = array(1,2,3,4,5);
  4.  
  5. if ((!isset($_COOKIE['banner']))) {
  6. setcookie('banner', 1, time()+200000); }
  7. else{
  8.  
  9. $wyswietlone = explode(',', $_COOKIE['banner']);
  10. $niewyswietlone = array_diff($tablica, $wyswietlone);
  11. $ile_nie_wys = count($niewyswietlone);
  12.  
  13. $losowa = array_rand($niewyswietlone, 1);
  14. $wylosowana = $niewyswietlone[$losowa];
  15.  
  16. $wyswietlone[]=$wylosowana;
  17. $ciastko = implode(",", $wyswietlone);
  18. setcookie('banner', $ciastko, time()+200000); }
  19.  
  20. ?>
  21.  
  22. <!DOCTYPE html>
  23. <html>
  24. <head>
  25. <title>Licznik odwiedzin</title>
  26. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  27. </head>
  28. <body>
  29.  
  30. <?php
  31.  
  32.  
  33.  
  34. echo '<img src="bannery/'.$wylosowana.'.gif" alt="banner reklamowy"/>';
maviozo
Po explode sprawdź, czy $wyswietlone ma tyle samo elementów, co $tablica - jeśli tyle samo, to znaczy, że wszystkie zostały wyświetlone. Wtedy pomijasz już całą resztę kodu i po prostu losujesz nr.
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.