Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja Losująca Banery
Forum PHP.pl > Forum > Gotowe rozwiązania
sajborg
Witam mam taki skrypcik który wyswietla mi banery
  1. <?
  2. function baner ($typ){
  3. global $db, $isset;
  4. $isset=array();
  5. srand ((float) microtime() * 10000000);
  6. $id=array();
  7. $sql=&#092;"SELECT * FROM homp_baner WHERE baner_rozm='\".$typ.\"'\";
  8. $result=$db->sql_query($sql);
  9. while ($idy=$db->sql_fetchrow($result)){
  10. $id[]=$idy['baner_id'];
  11. }
  12. if (empty($id)){
  13. echo '<img src=\"images/lay3_10.gif\" width=\"400\" height=\"50\" border=\"0\" />';
  14. }else{
  15. $losowy=array_rand($id,1);
  16. $losowy=$id[$losowy];
  17. $sql=&#092;"SELECT * FROM homp_baner WHERE baner_id='\".$losowy.\"' AND baner_rozm='\".$typ.\"'\";
  18. if(!$result = $db->sql_query($sql))
  19. {
  20. message_die(GENERAL_ERROR, &#092;"Nie mogę wyswietlić Banera.\", \"\", __LINE__, __FILE__, $sql);
  21. }
  22. $baner=$db->sql_fetchrow($result);
  23. if ($baner['baner_typ']=='FLASH'){
  24. echo $baner['baner_flash'];
  25. $sql=&#092;"UPDATE homp_baner SET baner_show=baner_show+1 WHERE baner_id='\".$losowy.\"'\";
  26. $db->sql_query($sql);
  27. } else{
  28. echo '<a href=\"'.$baner['baner_url'].'\" target=\"_top\"><img src=\"'.$baner['baner_img'].'\" border=\"0\" alt=\"'.$baner['baner_alt'].'\"></a>';
  29. $sql=&#092;"UPDATE homp_baner SET baner_show=baner_show+1 WHERE baner_id='\".$losowy.\"'\";
  30. $db->sql_query($sql);
  31. }
  32. }
  33. }
  34. ?>


Ale chcem zrobic zeby losowało mi liczby których jeszcze nie było no gdy na stronie wywołam funkcje w 2 miejscach to zeby nie było takiej sytuacji zeby wyswietlily się dwa takie same banery. Nie wiem jak to zrobic. Probowałem na różne sposoby sad.gif
Yarecki
Nie możesz stworzyć tablicy z już wylosowanymi banerami ?

1) losujesz baner;
2) zapisujesz id w tablicy juz wylosowanych
3) losujesz kolejny baner
4) sprawdzasz czy jest w tablicy juz wylosowanych
- tak - losujesz jeszcze raz
- nie - zapisujesz id w tablicy wylosowanych

Przed chwilą wymyślone więc nie musi być optymalnym rozwiązaniem.
sajborg
Tak zrobiłem ale jak bys nie zauwalyl ze to jest funkcja wywołana w różnych miejscach tablica tworzy sie od nowa.Trzeba jaką globalną tablice zrobic chyba. Ten twoj sposob juz robilem nie działa
cim
Cytat(paweb @ 2004-08-15 20:15:09)
Tak zrobiłem ale jak bys nie zauwalyl ze to jest funkcja wywołana w różnych miejscach tablica tworzy sie od nowa.Trzeba jaką globalną tablice zrobic chyba. Ten twoj sposob juz robilem nie działa

a może z tablicy poprzez implode() zrobić łańcuch i wrzucić do cookies... potem wyciągnąć, wrócić do tablicy i sprawdzać co już pokazywało, a czego jeszcze nie... można by dorzucić jeszcze ob_start() na początku żeby nie było błedów z nagłówkami przy ustawianiu cookies - ogółem powinno działać
tumczasty
zrobić tablicę globalną (ale najlepiej nie tworzyć jej w żadnym miejscu, a zwłaszcza na początku tej funkcji, bo za każdym razem ta tablica będzie się zerowała) albo zrobić z tej tablicy zmienną statyczną
sajborg
A jak to zrobic nie robilem tego nigdy nie mam pojęcia


Zrobiłem coś takiego dodałem na stronie głównej

  1. <?php
  2. $isset_ip=array();
  3. ?>



A funkcja wygląda tak

  1. <?
  2. function baner ($typ){
  3. global $db, $isset_ip;
  4. srand ((float) microtime() * 10000000);
  5. $id=array();
  6. $sql=&#092;"SELECT * FROM homp_baner WHERE baner_rozm='\".$typ.\"'\";
  7. $result=$db->sql_query($sql);
  8. while ($idy=$db->sql_fetchrow($result)){
  9. $id[]=$idy['baner_id'];
  10. }
  11. if (empty($id)){
  12. echo '<img src=\"images/lay3_10.gif\" width=\"400\" height=\"50\" border=\"0\" />';
  13. }else{
  14. $losowy=array_rand($id,1);
  15. $losowy=$id[$losowy];
  16. if (in_array($losowy,$isset_ip)){
  17.  baner($typ);
  18. }else{
  19. $sql=&#092;"SELECT * FROM homp_baner WHERE baner_id='\".$losowy.\"' AND baner_rozm='\".$typ.\"'\";
  20. if(!$result = $db->sql_query($sql))
  21. {
  22. message_die(GENERAL_ERROR, &#092;"Nie mogę wyswietlić Banera.\", \"\", __LINE__, __FILE__, $sql);
  23. }
  24. $baner=$db->sql_fetchrow($result);
  25. if ($baner['baner_typ']=='FLASH'){
  26. echo $baner['baner_flash'];
  27. $sql=&#092;"UPDATE homp_baner SET baner_show=baner_show+1 WHERE baner_id='\".$losowy.\"'\";
  28. $db->sql_query($sql);
  29. $isset_ip[]=$losowy;
  30. } else{
  31. echo '<a href=\"'.$baner['baner_url'].'\" target=\"_top\"><img src=\"'.$baner['baner_img'].'\" border=\"0\" alt=\"'.$baner['baner_alt'].'\"></a>';
  32. $sql=&#092;"UPDATE homp_baner SET baner_show=baner_show+1 WHERE baner_id='\".$losowy.\"'\";
  33. $db->sql_query($sql);
  34. $isset_ip[]=$losowy;
  35. }
  36. }
  37. }
  38. }
  39. ?>


Narazie działa ale nie jestem pewien : biggrin.gif
tumczasty
ktoś mógłby się przyczepić, że można by to było zrobić ciut prościej czy "bardziej elegancko", ale myślę, że to powinno działać.

ale pamiętaj, że jeśli np. jest tylko 1 banner danego typu (rozmiar), a trzeba na stronie wyświetlić np. 2 takiego właśnie typu, albo ogólnie: jeśli trzeba wyświetlić więcej bannerów danego typu, niż ich jest, to będzie ZONK
sajborg
Nie no działa i to. Wyswietlam na stronie 3 banery danego typu i jest OK
tumczasty
tak, bo są co najmniej 3 bannery tego typu, ale jeśli byłyby tylko 2 albo tylko 1, to wtedy byłby problem
sajborg
Aha biggrin.gif ale tak nie będzie :] Ja dodaje banery i je wyswietlam :] nie bedzie takich błędów biggrin.gif

Prosze o zamknięcie tematu
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.