Avatar billede googolplex Novice
28. april 2003 - 14:47 Der er 22 kommentarer og
2 løsninger

Variabel test - hvad er forskellen på dette...

Hvordan checker jeg bedst om en variabel er sat, jeg har set følgende:

if ($variabel) { bla bla }

if (isset($variabel)) { bla bla }

if (!$variabel="") { bla bla }

if ($variabel="true") { bla bla } / if (!$variabel="false")

if (!$variabel="0") { bla bla }

Jeg har nemlig ikke 100% check på forskellen :(

Hvad er egentlig forkellen på dem ???
Avatar billede ahv Nybegynder
28. april 2003 - 14:51 #1
Jeg bruger altid den øverste, virker dog ikke hvis variablen er sat til 0, så skal du bruge isset.
Avatar billede schaefner Juniormester
28. april 2003 - 14:52 #2
if (!$variabel="") { bla bla }

if ($variabel="true") { bla bla } / if (!$variabel="false")

if (!$variabel="0") { bla bla }

De tre vil tjekke om det var muligt at give variablen $variabl en værdi. Dem kan du ikke bruge. Hvis du skal sammenligne skal du bruge to =
Avatar billede ahv Nybegynder
28. april 2003 - 14:52 #3
Et simpelt eksempel ville være:

<?php

$var = 0;

if ($var) { echo "bla bla"; }

if (isset($var)) { echo "bla bla bla"; }

?>

Resultat til blive: bla bla bla
Avatar billede erikjacobsen Ekspert
28. april 2003 - 14:55 #4
Må jeg generelt anbefale to ==-ere i stedet for én
Avatar billede erikjacobsen Ekspert
28. april 2003 - 14:56 #5
Og det skriver du så også schaefner ... hehe ... jeg læser ikke så godt
Avatar billede melange Nybegynder
28. april 2003 - 14:58 #6
ahv << jeg vil anbefale at du begynder at bruge #2:

if (isset($variabel)) { bla bla }

Da den første ikke gyldig i nyere versioner af PHP (den vil give dig en "notice"), og at dit webhotel nok skal opgradere før eller siden.
Avatar billede ahv Nybegynder
28. april 2003 - 14:59 #7
melange >> Fra hvilken version begynder det?
Avatar billede fri-hash Nybegynder
28. april 2003 - 15:00 #8
som schaefer siger sammenligning er ==, så hvis jeg går ud fra at det er det du mener i dine eksempler, så:

if ($variabel) { bla bla }
vil teste om $variabel er sand, dvs sige om den er andet end 0 eller false
visse php-indstallationer vil her give en warning hvis der ikke er nogen variabel der hedder $variabel

if (isset($variabel)) { bla bla }
tester om der er en variabel der hedder $variabel

if (!$variabel=="") { bla bla }
vil teste om $variabel er noget andet end en tom streng

if ($variabel=="true") { bla bla } / if (!$variabel="false")
vil teste om $variabel indeholder strengen "true" hhv "false"

if (!$variabel=="0") { bla bla }
vil teste om $variabel er noget andet end strengen "0"
Avatar billede googolplex Novice
28. april 2003 - 15:01 #9
Jaja, begynderfejl med at sætte variablen i stedet for at teste den mod en værdi, bær over med mig, gør det hver gang :P

Som jeg forstår jer, er jeg på den sikre side ved at bruge if (isset($var)) { echo "bla bla bla"; } ??

Det gælder vel også for arrays ikke ?
Avatar billede melange Nybegynder
28. april 2003 - 15:02 #10
ahv << nu skal jeg passe på med hvad jeg siger, og da jeg ikke sidder hjemme kan jeg ikke lige tjekke det.
Dog mener jeg ret bestemt det er PHP 4.3
Avatar billede ahv Nybegynder
28. april 2003 - 15:03 #11
4.3.1 virker fint med:

if ($var) { echo "bla bla"; }
Avatar billede melange Nybegynder
28. april 2003 - 15:03 #12
googolplex << jo den gælder også for array's :)

du kan evt læse mere om den her:
http://www.php.net/manual/en/function.isset.php
Avatar billede googolplex Novice
28. april 2003 - 15:04 #13
fri-hash: Vil det sige at hvis jeg eksempel vis fanger noget fra en form med:

$var = $_POST["var"]

så er variablen sat, selvom der ikke var noget i $_POST["var"] ??
Avatar billede ahv Nybegynder
28. april 2003 - 15:04 #14
melange >>
http://www.ahv.starthotel.dk/test.php
Hvor har du læst at:
if ($var) { echo "bla bla<br>"; }
Ikke virker i nyere versioner?
Avatar billede ahv Nybegynder
28. april 2003 - 15:05 #15
melange, blot til din oplysningen skal jeg måske sige at koden til mit eksempel er:

<?php

$var = 1;

if ($var) { echo "bla bla<br>"; }

if (isset($var)) { echo "bla bla bla"; }

?>
Avatar billede jakoba Nybegynder
28. april 2003 - 15:06 #16
if ($variabel) {
    // udføres hvis $variabel eksisterer OG har en værdi der ikke er 0 eller false eller null eller en tom streng
    bla bla
}

if (isset($variabel)) {
    // udføres hvis $variabel eksisterer, uanset hvilken værdi den har
    bla bla
}

//de næste fire kræver et dobbelt lighedstegn.
// ellers en det en assignment af konstanten til $wariabel.

if (!$variabel=="") {
    // du kan ikke assigne til en expression. Det SKAL være == her.
    // !$variabel udregnes til 'det omvendte af $variabel set som bolsk værdi.
    // hvis $variabel = "noget" er den omvendte bloske værdi false
    // hvis $variabel = "" (tom streng) er den omvendte bolske værdi true
    //  false == ""  udregnes til true
    //  true == ""    udregnes til false
    bla bla
}
    //

if ($variabel="true") {
    // denne er mulig
    // strengen "true" gives som værdi til variabelen og if-sætningen ser betingelsen som opyldt fordi "true" ikke er en tom streng
    bla bla
}
if (!$variabel="false") {
    // ikke mulig !$variabel er en expression og kan ikke assignes til. så:
if (!$variabel=="false") {
    // igen efter reglerne ovenfor
    //  false == "false" giver false fordi "false" ikke er en tom streng
    //  true == "false" giver true fordi "false" ikke er en tom streng
    // Jep den er lidt uventet for mange. det handler om datatyper. alt med anførselstegn om er en streng der indeholder bogstaver. ikke det de bogstaver beskriver.

if (!$variabel=="0") { bla bla }
    // som ovenfor men mere usikker, du risikerer at php først vælger at konvertere strengen "0" til tallet 0 der så derefter svarer til false når der sammenlignes.

mvh JakobA
Avatar billede melange Nybegynder
28. april 2003 - 15:07 #17
ahv << den giver mig bare en notice derhjemme :) men jeg kan godt gå hjem og kgige efter hvordan PHP er sat op hos mig :)

desuden mener jeg også kun den brokker sig når  $var ikke findeholder nogen streng eller 0
Avatar billede googolplex Novice
28. april 2003 - 15:25 #18
Ok, tak for de gode svar, omend jeg er endnu mere forvirret end før ;)

Smid et svar hvis I har glemt det, så uddeler jeg point.
Avatar billede jakoba Nybegynder
28. april 2003 - 15:26 #19
if ( $var ) giver en advarsel hvis der ikke finden noges $var variabel.
"du præver at bruge en variabel der ikke findes". Desværee har mange sat deres errorlevel til ikke at udskrive advarsler.
Avatar billede googolplex Novice
28. april 2003 - 15:31 #20
jakoba: Hvis jeg nu har denne funktion (udpluk):

function upload_billede($upload_bibliotek, $max_stoerrelse=100, $filtyper_tilladt) {

    $upload_bibliotek = $_SERVER["DOCUMENT_ROOT"] . "$upload_bibliotek";
    $filnavn = $_FILES["upfil"]["name"];
    $fra = $_FILES["upfil"]["tmp_name"];
    $til = $upload_bibliotek . "/$filnavn";
    $fil_stoerrelse = filesize($fra)/1024;
    $filtype = $_FILES["upfil"]["type"];
    $fejl="0"

    if ($filtyper_tilladt && !in_array($filtype, $filtyper_tilladt)) {
        echo "<p>Desværre, filtypen '$filtype' kan ikke uploades. De tilladte filtyper er '" . implode("', '", $filtyper_tilladt) . "'.</p>";
        $fejl="1"
    }

Hvor det er valgfrit om de vil angive et array, der indeholder de tilladte filtyper, hvad bør jeg så checke med ? If ($var) giver vel en fejl hvis de ikke sætte den, eller hvad ?
Avatar billede jakoba Nybegynder
28. april 2003 - 15:41 #21
Jeg vil til hver en tid bruge  if ( isset($variabel) )

Detteher et et af de (mange) steder hvor php (og javascript og perl og ...) tilbyder at tænke for dig. at gætte hvad det egentlig er du mener, selvom du ikke gør dig ulejlighed med specifikt at sige det.

men så sker det jo de gætter galt og gør noget uventet. Sådan nogen fejl kan være meget besværlige at finde.

Så jeg prøver altid at sige 'nej tak' til det tilbud, medmindre jeg virkelig ved hvad jeg laver og hvilke alternative situationer der vil opstå.

Det har også den fordel at når en anden programmør skal læse og forstå et program jeg skriver er der så mange færre muligheder for at han misforstår det :-))

mvh JakobA
Avatar billede tipsen Nybegynder
28. april 2003 - 15:59 #22
Bør:

if (!$variabel=="false") {

ikke i stedet være:

if ($variabel != "false") {

Begge vil selvfølgelig fungere, men mener at sidstnævnte er lidt mere korrekt og vist også hurtigere!?
Avatar billede jakoba Nybegynder
28. april 2003 - 16:02 #23
De vil faktisk teste to forskellige ting.  !$variabel  tvinger $variabel til at konvertere til en boolsk værdi. med din != operator er datatypen på $variabel's indhold med til at bestemme hvordan der skal konverteres.
Avatar billede tipsen Nybegynder
28. april 2003 - 18:29 #24
ahh - takker.
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