Avatar billede coffeepower Nybegynder
30. oktober 2003 - 12:47 Der er 12 kommentarer

er en "asdfasdf" det samme som 0 i php

Hej eksperter,

Jeg er ved at få (flere) grå hår i hovedet...

Jeg vil gerne lave en funktion der tjekker om værdien er enten:

et 0,
et tal,
eller en streng.

jeg har lavet flg. funktion:

function fn_year_all_or_not($value) {
    if ($value == 0) {
          $result = "varablen er 0";
    } elseif (is_string($value)) {
            $result = "variablen er en streng";
    }else {
        $result = $value;
    }

return $result;
}

hvis jeg kalder funktionen sådan her:

fn_year_all_or_not("asdf")

så returnerer den 0....det skal den jo ikke....please help jeg fatter narle af dette her... :-((

/Coffeepower
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 12:53 #1
if ($value == "0") {

for "asdf" er 0 i en talsammenhæng. Hvad er det du skal teste for?
Avatar billede mcgoat Nybegynder
30. oktober 2003 - 12:53 #2
prøv med if ($value === 0) {
Avatar billede coffeepower Nybegynder
30. oktober 2003 - 12:57 #3
Jeg har lige forsøgt at flytte tekst valideringen over 0 valideringen og nu virker det tilsyneladende. Men hvorfor, forstår jeg stadig ikke, så points afgives ved god forklaring.

function fn_year_all_or_not($value) {

    if  (is_string($value)) {
            $result = "variablen er en streng";
    } elseif ($value == 0) {
        $result = "varablen er 0";
    }else {
        $result = $value;
    }

return $result;
} // end func
Avatar billede coffeepower Nybegynder
30. oktober 2003 - 12:59 #4
til Erik:

jeg er ved at lave noget dato validering.
jeg har en mysql db med et int(11) felt som er et unix_timestamp
dem henter jeg ind i en dropdown menu, men i de tilfælde hvor timestamp er 0, skal den jo ikke skrive 0, men f.eks. hellere "year not specified".

denne dropdown anvendes så i en overordnet sql som trækker poster ud fra selvsamme db, og derfor bliver jeg nødt til at lave f.eks. "year not specified" om til 0 igen....

er ovenst. til at forstå?
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 13:04 #5
Men så er parametren altid en streng. "987687" er også en streng i PHP
sammenhæng. Har du testet med din dropdown menu?
Avatar billede coffeepower Nybegynder
30. oktober 2003 - 13:09 #6
hvis jeg f.eks. kalder funktionen
fn_year_all_or_not(2003)
så ryger variablen lige igennem funktionen dvs. ikke nogen streng.

hvis jeg kalder funktionen:
fn_year_all_or_not("asdfasdf")
returnerer den "variablen er en streng"

hvis jeg kalder funktionen:
fn_year_all_or_not(0)
returnerer den "variablen er 0"

så det ser for mig at se IKKE ud til at det altid vil være en streng...men hvis jeg fjerner is_string så ser det ud til at den opfatter "2002" som et tal...det synes jeg er noget underligt
Avatar billede coffeepower Nybegynder
30. oktober 2003 - 13:23 #7
nu har jeg prøve med min dropdown og det virker desværre stadig ikke :-(
Avatar billede coffeepower Nybegynder
30. oktober 2003 - 13:24 #8
hvordan skal funktionen se ud:

den skal:
omdanne 0 til "year not available";
omdanne "year not available" til 0;
lade alle andre årstal slippe igennem
Avatar billede erikjacobsen Ekspert
30. oktober 2003 - 14:18 #9
Alt hvad du får retur fra en form er altid en string.



  if ($value == "0") {

er et godt test på "0".

  if (is_numeric($value)) {

er et rimeligt bud på at test for om en streng er et tal (den acceptere
så også negative tal, men det er ligemeget for dig).

Og ellers må det jo være "year...."
Avatar billede fangel Nybegynder
30. oktober 2003 - 16:38 #10
eller

$tal = 0;
$str = "foobar"; // burde være tal-værdi = 0, tjek med intval('foobar') denne returnere tal-værdien af det...

if($tal == $str) echo 'jeg er sand';
if($tal === $str) echo ' - sandwish';

det er kun den første det bliver sand...

men ellers er is_numeric() meget godt til at se om det er et tal...

Morten
Avatar billede mcgoat Nybegynder
03. maj 2004 - 08:02 #11
virkede det?
Avatar billede mcgoat Nybegynder
23. januar 2007 - 09:04 #12
Lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester