Tjek variabels værdi for 0 eller 1

Tags:    php

Jeg er ramt på et underligt problem...
Jeg modtager nogle data fra en side ved hjælp af $_POST['blahblah']. De data må kun være tallet 0 eller tallet 1. Jeg har forsøgt både med den simple if() og også med regular expressions i preg_match(). Problemet er at den ikke kan kende forskel på 0, 00 og 000 osv. så fx 000000000000 matcher fint for PHP. Det matcher bare ikke i mine øjne :'( ... Derfor har jeg altså brug for et eller andet PHP-kode der kan sige mig om en variabel er lig med 0 eller 1. IKKE 00000 fx. Hvad gør man :O ???



Prøv med if($var === 0). Men er ikke sikker på det virker...ellers kan du prøve at tolke det som en streng med if($var == '0')



Prøv med if($var === 0). Men er ikke sikker på det virker...ellers kan du prøve at tolke det som en streng med if($var == '0')


Desværre :( Det virker ikke.. Andre der har et bud?

EDIT: Kan lige vise hvad det er der ikke virker..
Fold kodeboks ind/udKode 

Problemet er at ovenstående script vil udskrive HEJ og ikke GODDAG som jeg gerne vil have det til :(



Indlæg senest redigeret d. 29.10.2006 15:59 af Bruger #10034
du søger for at $_POST['blahblah'] er en int. ikke ved at tjekke med is_int det gøre såment ikke så meget ved værdien af post variablen, men gør noget i stil med:
hvis $_POST['blahblah']'s længde er større end 1 så re-definer $_POST['blahblah'] som int:
$_POST['blahblah'] = (int) $_POST['blahblah'];
det skulle gøre det



Hvad om du sammelignede antallet af tegn med antallet af nuller? Hvis disse to tal er ens så er if-sætningen sand:

Fold kodeboks ind/udKode 




du søger for at $_POST['blahblah'] er en int. ikke ved at tjekke med is_int det gøre såment ikke så meget ved værdien af post variablen, men gør noget i stil med:
hvis $_POST['blahblah']'s længde er større end 1 så re-definer $_POST['blahblah'] som int:
$_POST['blahblah'] = (int) $_POST['blahblah'];
det skulle gøre det


Er kun 65% med.. Gider du vise det i praksis?

EDIT: Jeg tror desværre jeg har forklaret mit problem lidt forkert... Problemet (skåret ud i pap) er følgene... Vi har en variabel der kan indeholde hvad som helst. Men PHP må kun skrive "a" hvis variablen indeholder tallet 0 eller 1. PHP må altså ikke skrive "a" hvis variablen fx indeholder 00000 eller et "b" fx eller hvis den indeholder andre tal som 2 eller 3. PHP må heller ikke skrive "a" hvis variablen er tom. Altså kun hvis variablen indeholder præcis 0 eller 1!!!



Indlæg senest redigeret d. 29.10.2006 19:51 af Bruger #10034
Nåååhh ok - på den måde
tja... så ville jeg skrive en function:
Fold kodeboks ind/udKode 


ok. så hvad du gør er:
if(_checkvalue($_POST['blahblah'], '0') == TRUE)
{
echo 'Hej hej';
}
else if(_checkvalue($_POST['blahblah'], '1') == TRUE)
{
echo 'Goddag';
}



Nåååhh ok - på den måde
tja... så ville jeg skrive en function:
Fold kodeboks ind/udKode 


ok. så hvad du gør er:
if(_checkvalue($_POST['blahblah'], '0') == TRUE)
{
echo 'Hej hej';
}
else if(_checkvalue($_POST['blahblah'], '1') == TRUE)
{
echo 'Goddag';
}


Det virker jo fint nok med $_POST.. Men kan man også få det til at virke sådan her..(både med $_POST og den der $a) Læg mærke til fremhævningerne...

function _checkvalue($var, $match)
{
$var = ( !is_string($var) ) ? (string) $var : $var;
$match = ( !is_string($match) ) ? (string) $match : $match;

if((strlen($var) != strlen($match)) || ($var != $match))
{
return FALSE;
}

return TRUE;
}

$a = 000;

if(_checkvalue($a, '0') == TRUE)
{
echo 'Hej hej';
}
else if(_checkvalue($a, '1') == TRUE)
{
echo 'Goddag';
}
_________________________________________________________
EDIT: Problemet må vel være at _checkvalue() kun virker hvis $var er en string... For det virker hvis man skriver $a = '000'; ... Bare ikke med $a = 000;



Indlæg senest redigeret d. 30.10.2006 16:08 af Bruger #10034
Den burde virke selvom variablen ikke er en string, da det første der sker i funktionen, er at de parametre der blive opgivet bliver formateret til en string.
ps. $a = 000; vil være det samme som $a = 0;



Indlæg senest redigeret d. 30.10.2006 16:47 af Bruger #3884
ps. $a = 000; vil være det samme som $a = 0;

Du har ret..
Takker dig rigtigt mange gange for hjælpen :D:D:D



t