[PHP] banner rotatie check

Pagina: 1
Acties:
  • 167 views sinds 30-01-2008

  • Navi
  • Registratie: Maart 2007
  • Niet online
Ik heb een probleem met een stuk PHP code voor een banner applicatie, deze banner applicatie kan 2 soort banners genereren, 1 van 350pixels breed en 1 van 728 pixels breed.

Als hij er 1 van 350 pakt, mag er nog 1 van 350 naast.

Maar als hij er 1 van 728 pakt past er niks meer naast dus dan mag hij er maar 1 tonen.

Ik heb dit php script ervoor maar om 1 of andere reden werkt dit niet goed, ik krijg soms toch dubbele of 1 lange en 1 korte banner.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
session_start();

if (!isset($_SESSION['bannerwidth'])) {
        if ($row['flash_width'] == 728) {
            $_SESSION['bannerwidth'] = 728;
            return $content;
        } else {
            $_SESSION['bannerwidth'] = 350;
            return $content;
        }
} else {
    if ($_SESSION['bannerwidth'] == 728) {
        return;
    } else {
        if ($row['flash_width'] == 350) {
            unset($_SESSION['bannerwidth']);
            return $content;
        } else {
            unset($_SESSION['bannerwidth']);
            // niks tonen dus want anders zou het niet passen
            return;
        }
    }       
}



de banner is dus $content, en dit hele stuk code wordt dus 1x per banner uitgevoerd.

iemand een advies?

[ Voor 4% gewijzigd door Navi op 16-08-2007 12:16 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
if ($row['flash_width'] = 350)

edit: en hoe kun je iets returnen als je niet in een functie zit?

[ Voor 53% gewijzigd door Daspeed op 16-08-2007 12:11 . Reden: Toevoeging ]


  • Navi
  • Registratie: Maart 2007
  • Niet online
DrClearbottom schreef op donderdag 16 augustus 2007 @ 12:09:
if ($row['flash_width'] = 350)

edit: en hoe kun je iets returnen als je niet in een functie zit?
Wat bedoel je precies? Wat is er mis met "if ($row['flash_width'] = 350)"?

En uuh, tja weet niet eigk, kan dat niet dan? :+

Hoe adviseer je het dan te doen? Ik ben het spoor scht bijster..

[ Voor 8% gewijzigd door Navi op 16-08-2007 12:14 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
SanderAlterNET schreef op donderdag 16 augustus 2007 @ 12:13:
[...]


Wat bedoel je precies? Wat is er mis met "if ($row['flash_width'] = 350)"?

En uuh, tja weet niet eigk, kan dat niet dan? :+
Punt 1: kijk eens naar je andere if-statements
Punt 2: waarom zou je iets willen returnen?

  • Navi
  • Registratie: Maart 2007
  • Niet online
Ah ok, dubbele == neergezet...

Maar met de return geef je de banner terug naar de browser toch?

  • Navi
  • Registratie: Maart 2007
  • Niet online
Hmmm ok, ik wist niet dat return meteen de functiee beeindigde, ik heb het nu aangepast naar deze code, maar ik krijg nu helemaal geen output te zien kwa banners, geen foutmeldingen ook.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
session_start(); 

if (!isset($_SESSION['bannerwidth'])) { 
        if ($row['flash_width'] == 728) { 
            $_SESSION['bannerwidth'] = 728; 
        } else { 
            $_SESSION['bannerwidth'] = 350; 
        } 
} else { 
    if ($_SESSION['bannerwidth'] == 728) { 
        return; 
    } else { 
        if ($row['flash_width'] == 350) { 
            unset($_SESSION['bannerwidth']); 
        } else { 
            unset($_SESSION['bannerwidth']); 
            // niks tonen dus want anders zou het niet passen 
         $content = "";
        } 
    }         
} 
    


return $content;



die onderste return $content; stond al in de orignele functie, dus die hoort daar denk ik dan gewoon, en mijn code is nieuw erboven.

Nog een idee?

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
is dat je hele pagina?

  • arieleks
  • Registratie: September 2002
  • Laatst online: 13-08-2013
SanderAlterNET schreef op donderdag 16 augustus 2007 @ 12:16:
Ah ok, dubbele == neergezet...

Maar met de return geef je de banner terug naar de browser toch?
return 'returned' een waarde uit een functie

function optellen($val) {
return $val+1;
}

Als je iets wilt 'returnen' naar de browser gebruik je echo, print, oid...

- Rietberg - sieben Mal sympatisch -

There are only 10 types of people, those who make stupid jokes about binary numbers and those who don't.


  • Navi
  • Registratie: Maart 2007
  • Niet online
Nee het script is veel langer, en bestaat uit nog meer php scripts, maar origineel stond hier dus zeg maar alleen:

PHP:
1
return $content;


En daarmee returnde hij de banners die je wilde. (1 banner per keer dat dit script uitgevoerd wordt, dus als er 2 banners op de pagina staan wordt het script 2 x gedaan)

Ik wil daar nu eerst wat checks op doen (zoals de breedte en breedte van de vorige banner) en als al die checks in orde zijn mag het getoond worden.

Kan je daar iets mee?

[ Voor 17% gewijzigd door Navi op 16-08-2007 12:33 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
wordt je script misschien geinclude/required binnen een functie?

  • Navi
  • Registratie: Maart 2007
  • Niet online
Nou dit is een extensie in het CMS Typo3 en hij require_once 1 andere file van het CMS zelf, en bovenin dit script staat ook:

PHP:
1
class tx_macinabanners_pi1 extends tslib_pibase {


Dus het is een uitbreiding op een class van het CMS.

Ik vind het zo vreemd, als ik mijn code lees vind ik het compleet logisch en alles klopt en hij zou nooit een korte en een lange banner samen kunnen tonen maar toch doet hij dat, en met de laaste versie van het script krijg ik zelfs helemaal geen output.

Nu ben ik het helemaal kwijt 8)7

[ Voor 36% gewijzigd door Navi op 16-08-2007 12:40 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
nou, dan moet je denk ik eerst maar eens even het probleem in een simpelere omgeving hercreeren, zodat er door ons daadwerkelijk wat over te zeggen valt.

  • Navi
  • Registratie: Maart 2007
  • Niet online
Nou het is volgens mij relatief simpel, (en ik zie nog steeds niet waarom mijn code niet werkt?) er wordt $content gereturned, en het enige wat ik nu wil doen is checken of die $content 728 breed is, zo ja, dan niks meer tonen, zo nee, dan mag er nog 1 naast komen, maar niet van 728 breed alleen 350.

De breedte van de huidige banner zit in $row['flash_width'] en de breedte van de vorige banner probeer ik op te slaan in een sessie variabele maar dat mag ook anders als je een betere manier weet hiervoor?

Bedankt voor alle hulp..


opzich doet deze versie het aardig:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
session_start();

        if (!isset($_SESSION['bannerwidth'])) {
                if ($row['flash_width'] == 728) {
                    $_SESSION['bannerwidth'] = 728;
                    return $content;
                } else {
                    $_SESSION['bannerwidth'] = 350;
                    return $content;
                }
        } else {
            if ($_SESSION['bannerwidth'] == 350) {
                    unset($_SESSION['bannerwidth']);
                    if ($row['flash_width'] == 350) {
                        return $content;
                    } else {
                        // hier moet hij eigenlijk een nieuwe kiezen van 350 breed en die tonen
                        unset($_SESSION['bannerwidth']);
                        return;
                    }
            } else {
                    unset($_SESSION['bannerwidth']);
                    return;
            }
        }



op 1 ding na dat hij af en toe TOCH een 350 breed met een 728 breed ernaast toont, volgens mij is dat gewoon niet mogelijk maar hij doet het toch..

[ Voor 49% gewijzigd door Navi op 16-08-2007 12:47 ]


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 23:33
Zo simpel is het niet aangezien voor de GoT-lezer de gehele context van dit script ontbreekt. Daarom is het makkelijk als je het probleem hercreeert in een simpele omgeving (in bijv. 1 php script), zodat het voor ons makkelijker te zien is waar het misgaat. Nu blijft het voor ons ook maar gissen.

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Er klopt geen reet van je hele if-nesting. Schrijf het eens opnieuw.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Navi
  • Registratie: Maart 2007
  • Niet online
CodeCaster schreef op donderdag 16 augustus 2007 @ 12:55:
Er klopt geen reet van je hele if-nesting. Schrijf het eens opnieuw.
Wat klopt er dan precies niet ik zie er geen fouten in?
Kan je mij helpen?

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

SanderAlterNET schreef op donderdag 16 augustus 2007 @ 12:59:
[...]


Wat klopt er dan precies niet ik zie er geen fouten in?
Kan je mij helpen?
Psuedo-code:
PHP:
1
2
3
4
5
6
7
8
9
10
function getBanners() {
 $banner = haalBannerUitDatabase(); // vraag random banner op
 $bannercode = schrijfBannerCode($banner); // genereer de html
 
 if ($banner['flash_width']) == 350) {
  $banner2 = haalBannerUitDatabase(350); // als de eerste banner 350 breed is, kan er nog een naast. zorg in de functie die de database aanspreekt dat alleen banners met breedte 350 terugkomen
  $bannercode .= schrijfBannerCode($banner2); // vul de html voor de tweede banner aan
 }
 return $bannercode;
}


Je moet gewoon zorgen dat wanneer de eerste banner (random) opgevraagd is, de query voor de tweede banner een extra argument krijgt, namelijk dat 'ie alleen banners teruggeeft die 350 breed zijn (WHERE flash_width = 350).

Maar zoals al enkele malen gezegd hierboven, zonder meer code en uitleg wat je variabelen doen kunnen we je niet echt helpen.

[ Voor 15% gewijzigd door CodeCaster op 16-08-2007 13:13 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Hmmja.. het wordt nu nogal een topic waarbij er steeds weer een nieuw klein probleem is waarbij er niet wordt aangegeven wat je nu zelf al hebt geprobeerd en wat daar niet mee lukte. Het enige wat er nu een paar keer gebeurd is "dit is mijn code, dit werkt niet, help" en dat is niet helemaal de bedoeling.

Mocht je er nog steeds niet zelf uitkomen dan kan je een nieuw topic openen maar let dan in elk geval op Programming Beleid - De Quickstart zodat je weet wat we hier van een topicstart en verdere vragen verwachten.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.