Avatar billede htx98i17 Professor
13. oktober 2011 - 15:22 Der er 16 kommentarer og
1 løsning

Hvad gør forskellen?

// $arr['ean'] = "VA502D1STAAL";
// $_POST['lagerstyring'] = 1;

Følgende:

if($_POST['lagerstyring'] == 1 && $arr['ean'] != 0) {
som returnerede false

ændrede jeg til:

if($_POST['lagerstyring'] == 1 && $arr['ean'] != NULL) {
som returnerede true

Det forstår jeg ikke skulle gøre nogen forskel nu når værdien af ean er som den er.

Kan nogen gøre mig klogere på det?
Avatar billede michael_stim Ekspert
13. oktober 2011 - 15:42 #1
Der er forskel på NULL og 0.
Avatar billede michael_stim Ekspert
13. oktober 2011 - 15:45 #2
Hvis du vil være sikker, altså hvis det er muligt at enten efterlade et tomt felt eller skrive 0:

if($_POST['lagerstyring'] == 1 && ($arr['ean'] != NULL || $arr['ean'] != 0)) {
Avatar billede htx98i17 Professor
13. oktober 2011 - 15:48 #3
Jeg kender forskellen på 0 og NULL, men kan ikke se at det skulle gøre nogen forskel når værdien af EAN er som den er...
Avatar billede michael_stim Ekspert
13. oktober 2011 - 15:53 #4
Desuden checker man vel NULL med IS NULL eller IS NOT NULL, eller?
Avatar billede michael_stim Ekspert
13. oktober 2011 - 15:56 #5
Avatar billede htx98i17 Professor
13. oktober 2011 - 15:57 #6
vi er i php-kategorien
Avatar billede michael_stim Ekspert
13. oktober 2011 - 16:01 #7
Men det er vel MySQL der returnerer din værdi ;o)
Avatar billede michael_stim Ekspert
13. oktober 2011 - 16:02 #8
Sorry, mig der er fuld. Tog for givet at det var databasekald, da NULL var indblandet.
Avatar billede michael_stim Ekspert
13. oktober 2011 - 16:06 #9
if($_POST['lagerstyring'] == 1 && $arr['ean'] !== NULL) {

Eller måske empty(), eller is_not_null (hvis den eksisterer i php, is_null gør)
Avatar billede htx98i17 Professor
13. oktober 2011 - 16:17 #10
Du forstår ikke helt problematikken :)

Variablen der tjekkes op på har værdien VA502D1STAAL.

Hvis jeg bruger != 0 i IF statement, så returnerer den false.
Hvis jeg bruger != NULL i IF statement, så returnerer den true.

Hvorfor det?, når værdien er VA502D1STAAL...
Avatar billede olebole Juniormester
13. oktober 2011 - 16:57 #11
<ole>

I virkeligheden skyldes det vores 'snavsede' måde at programmere på - fordi sprog som PHP og JavaScript tillader det.

Det skaber ofte problemer, når man accepterer, at en variabel kan indeholde forskellige datatyper. Hvis man oven i købet undlader at teste på datatype, øger man risikoen for fejl.

I stedet kan du skrive:

if($_POST['lagerstyring'] === 1 && $arr['ean'] !== 0) {

- eller:

if($_POST['lagerstyring'] == 1 && $arr['ean'] != "0") {

/mvh
</bole>
Avatar billede htx98i17 Professor
13. oktober 2011 - 17:02 #12
Okay, dvs det giver god mening for dig, den måde den opfører sig?
Avatar billede hansepeter2 Praktikant
13. oktober 2011 - 17:08 #13
Forklaringen finder du her: http://php.net/manual/en/types.comparisons.php

$arr['ean'] != 0

vil blive fortolket

0 != 0

$arr['ean'] !== NULL

vil blive fortolket:

$arr['ean'] !== ""
Avatar billede hansepeter2 Praktikant
13. oktober 2011 - 17:16 #14
Der er natuligvis copy/paste/redigeringsfejl i mit indlæg, da !== betyder noget andet end !=
Avatar billede htx98i17 Professor
13. oktober 2011 - 17:19 #15
okay, jeg siger tak for deltagelsen... I må ligge et svar.
Avatar billede olebole Juniormester
13. oktober 2011 - 17:31 #16
Ellers tak, jeg samler ikke points  =)
Avatar billede htx98i17 Professor
27. april 2012 - 16:20 #17
Lukker
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