Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zapis wartości do jednego ciasteczka
smiesznylolek
post
Post #1





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

Ostrzeżenie: (0%)
-----


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>


Ten post edytował smiesznylolek 13.11.2013, 15:19:37
Go to the top of the page
+Quote Post
fate
post
Post #2





Grupa: Zarejestrowani
Postów: 824
Pomógł: 106
Dołączył: 14.03.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
smiesznylolek
post
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

Ostrzeżenie: (0%)
-----


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"/>';
Go to the top of the page
+Quote Post
Turson
post
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Literówka
$zanleziono
Go to the top of the page
+Quote Post
smiesznylolek
post
Post #5





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 27.12.2011

Ostrzeżenie: (0%)
-----


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"/>';


Ten post edytował smiesznylolek 14.11.2013, 11:46:19
Go to the top of the page
+Quote Post
maviozo
post
Post #6





Grupa: Zarejestrowani
Postów: 197
Pomógł: 24
Dołączył: 22.11.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 11:23