Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

If constructie bouwen met variabele

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

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik zou een provincie controle moeten inbouwen in een script, omdat hier wel wat logica in zit dacht ik het zo op te lossen:


PHP:
1
2
3
4
5
6
7
8
9
....
    switch($_GET['prov']){
                        case "antw":
                                $provcheck="((\$resPostcode>=2000)&&(\$resPostcode<=2999))";
                            break;
                                        case "bhgw":
                                $provcheck="(('$resPostcode'>=1000)&&('$resPostcode'<=1299))";
                            break;                  
......


Dus ik krijg een provincie afkorting mee via de url ($_GET['prov'] ) en adhv van deze waarde bouw ik een $provcheck op deze variabele controleert dus of een postcode tot een provincie behoort..

Vervolgens moet ik alle leden overlopen in de DB en daar de $provcheck op loslaten, ik deed dit zo:

if($provcheck){ ..... }else{ .... }

dat werkt niet, als ik leden opvraag van brussels hoofdstedellijk gewest dan krijg ik ook die van antwerpen te zien..

Mijn fout zit in de opbouw vna $provcheck daar ben ik van overtuigd maar wat de fout is weet ik zelf niet :)

Verwijderd

Je zet nu gewoon een string in $provcheck?

Doe gewoon:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
$provcheck = false;
switch($_GET['prov']){
case "antw":
if (($resPostcode>=2000) && ($resPostcode<=2999)) { $provcheck = true; }
break;
case "bhgw":
if (($resPostcode>=1000) && ($resPostcode<=1299)) { $provcheck = true; }
break;
}


edit: Ik snap ook niet precies wat je nu wil bereiken... Waarom zou je een stuk php-code in een variabel willen zetten? :?

[ Voor 183% gewijzigd door Verwijderd op 22-07-2007 19:21 ]


  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
ja in provcheck zou de $resPostcode niet als string mogen opgenomen worden :s

als ik
$provcheck="((".$resPostcode.">=2000)&&(".$resPostcode."<=2999))";

zou doen dan wordt er overal de waarde van $resPostcode ingevuld

[ Voor 48% gewijzigd door bibawa op 22-07-2007 19:14 ]


Verwijderd

je kan met Eval() code uitvoeren..

Maar ik vind dit geen aanbevolen oplossing. Overigens is het resultaat van if((string) $string) altijd (bool) true wanneer deze niet leeg is, vandaar dat je rare resultaten krijgt.

Er zijn nog genoeg andere oplossingen om jouw situatie op te lossen dan het gebruiken van Eval()

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 11:52
Waarom niet gewoon de ranges in een array stoppen en daar mee werken?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ranges = array(
  'bhgw' => array('min' => 1000, 'max' => 1299),
  'antw' => array('min' => 2000, 'max' => 2999) );

if(!in_array($_GET['prov'], $ranges))
{
    /* Onbekende provincie; genereer foutmelding ofzoiets */
}
else
{
    $range = $ranges[$_GET['postcode']];
    if($code < $range['min'] || $code > $range['max'])
    {
        /* Code buiten bereik. Genereer foutmelding. */
    }
    else
    {
        /* Doe wat je wilt... */
    }
}


Als het om veel waarden gaat is het gebruik van twee aparte arrays met minima en maxima (dus $min['antw'] = 2000, $max['antw'] = 2999, etc.) waarschijnlijk wat efficienter. Je kunt dit soort informatie ook goed in een database stoppen. Als het om gebruikersinvoer gaat kun je overigens ook de hele provincie weglaten en die zelf afleiden uit de postcode, als je toch om een postcode vraagt.

[ Voor 25% gewijzigd door Soultaker op 22-07-2007 19:23 ]


  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
In een array steken is momenteel geen optie meer..

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
Ik zit momenteel vast, ik heb zitten zien naar de eval() functie maar die begrijp ik niet volledig:s

Verwijderd

bibawa schreef op zondag 22 juli 2007 @ 20:27:
Ik zit momenteel vast, ik heb zitten zien naar de eval() functie maar die begrijp ik niet volledig:s
Leg eerst eens uit wat je precies wil doen

Begrijp je dit:
PHP:
1
2
3
4
5
6
7
8
9
$provcheck="(('$resPostcode'>=1000)&&('$resPostcode'<=1299))";
if ($provcheck)
{
//dit zal altijd uitgevoerd worden 
}
else 
{
//en dit zal dus nooit uitgevoerd worden
}


Simpel omdat $provcheck een string is en niet leeg is, zal if ($provcheck) altijd op true uitdraaien...

De code
code:
1
(('$resPostcode'>=1000)&&('$resPostcode'<=1299))

zal niet uitgevoerd worden omdat het in een string staat!
Behalve als je de eval() functie gebruikt, maar dat zou wel een ontzettend ranzige constructie zijn (imho)

Verwijderd

mixed eval ( string $code_str )

wat je al parameter mee geeft aan eval, word uitgevoerd als php code, maar kweet niet, blijft tricky..

Als $resPostcode al bekend is, kan je de statement al uitvoeren, waarvan het resultaat als bool in $provcheck komt, welke je aan een if geeft:

PHP:
1
2
3
4
5
6
7
8
9
    switch($_GET['prov']){
         case "antw":    $provcheck = (($resPostcode>=2000)&&($resPostcode<=2999));
             break;
         case "bhgw":    $provcheck = (bool) $resPostcode >=1000 && $resPostcode <=1299;
             break;          
         default:        $provcheck = (bool) false;
    }
if($provcheck === (bool) true) {}    
if($provcheck){}     // kan natuurlijk ook

  • bibawa
  • Registratie: Augustus 2005
  • Laatst online: 13-04-2008
jaaaa!! dat is wat ik nodig heb


bedankt!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
bibawa schreef op zondag 22 juli 2007 @ 19:32:
In een array steken is momenteel geen optie meer..
bibawa schreef op zondag 22 juli 2007 @ 20:27:
Ik zit momenteel vast, ik heb zitten zien naar de eval() functie maar die begrijp ik niet volledig:s
Het is niet voor het eerst dat ik je dit ga vertellen, maar ik doe het toch (weer):
Als je iets niet begrijpt; geef dan aan wat je niet begrijpt. Ga niet zitten vissen tot er iemand een kant-en-klare oplossing voor je aandraagt maar denk dan op z'n minst een beetje mee.

Posts als deze zijn compleet nutteloos en al helemaal als je ze gebruikt om nog binnen het uur je topic weer omhoog te schoppen. Je bent meer dan vaak genoeg gewezen op ons beleid en dat ga ik daarom niet nog een keer doen. Doe jezelf en ons een lol en lees het nou eens en trek je er dan vervolgens ook iets van aan.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.