[PHP] if statement werkt niet naar behoren?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil een JS foutmelding genereren waarneer er wordt voldaan aan het volgende if statement:

"datum1 is groter dan datum2 en datum 1 is NIET 31-12-2999"

Ik heb dit als volgt gedaan:

PHP:
1
2
3
if ($date1 > $date2 and !$date1 == '31-12-2999') {
JS_error();
}


Dit werkt alleen niet? Als ik $date1 groter invul dan $date2 wordt dit if statement over geslagen?
Ziet iemand waar ik iets anders moet doen?

Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

PHP:
1
2
3
if ($date1 > $date2 && $date1 != '31-12-2999') {
    JS_error();
}

Het stukje !$date1 == '31-12-2999' klopt dus niet helemaal, !$date1 werkt alleen als er niets achter staat.


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • Steven
  • Registratie: December 2000
  • Laatst online: 05-07 21:17
PHP:
1
2
3
if ($date1 > $date2 and !($date1 == '31-12-2999')) {
      JS_error();
}


Een ! gaat voor de ==, maw eerst wordt !$date1 bekeken (= false, aangezien date1 als true wordt gezien) waarna die '31-12-2999' geconverteerd wordt naar true, wat deze conditie dus onwaar maakt.

Deze check suggereert trouwens een niet helemaal kloppend datamodel; NULL waardes misschien handiger?

[ Voor 5% gewijzigd door Steven op 08-06-2005 01:33 . Reden: Of idd bovenstaande, maar ik wilde er nog wat educatie bijdoen ;) ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Je hebt trouwens wel heel bijzondere "datumvergelijkingen". Gewoon string-comparisons, wat uiteraard niet werkt. Als je nu als datum 31-01-0001 vergelijkt met 01-12-2004 dan is de eerste groter omdat de 3 na de 0 in het alfabet komt.

PHP kent geen datumtype, dus wil je het toch binnen php goed kunnen vergelijken, neem dan unix timestamps (zie de diverse tijdfuncties om die string naar een unix timestamp te converteren) of gebruik een andere string-representatie (YYYY-MM-DD is wel string-comparable).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ACM schreef op woensdag 08 juni 2005 @ 01:37:
Je hebt trouwens wel heel bijzondere "datumvergelijkingen". Gewoon string-comparisons, wat uiteraard niet werkt. Als je nu als datum 31-01-0001 vergelijkt met 01-12-2004 dan is de eerste groter omdat de 3 na de 0 in het alfabet komt.

PHP kent geen datumtype, dus wil je het toch binnen php goed kunnen vergelijken, neem dan unix timestamps (zie de diverse tijdfuncties om die string naar een unix timestamp te converteren) of gebruik een andere string-representatie (YYYY-MM-DD is wel string-comparable).
In mijn werkelijke script gebruik ik die uiteraard ook, ging me alleen even over de logica van van het if statement:P

Acties:
  • 0 Henk 'm!

  • Super_ik
  • Registratie: Maart 2001
  • Laatst online: 14:16

Super_ik

haklust!

dude, bedoel je niet || (or) :p

edit:

hmm, nie helemaal goed gelezen, maar t zou toch kunnen

[ Voor 54% gewijzigd door Super_ik op 08-06-2005 13:32 ]

8<------------------------------------------------------------------------------------
Als ik zo door ga haal ik m'n dood niet. | ik hou van goeie muziek


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

Super_ik schreef op woensdag 08 juni 2005 @ 13:30:
dude, bedoel je niet || (or) :p

edit:

hmm, nie helemaal goed gelezen, maar t zou toch kunnen
Nee, dan bereik je precies het tegenovergestelde :D


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Steven schreef op woensdag 08 juni 2005 @ 01:32:
PHP:
1
2
3
if ($date1 > $date2 and !($date1 == '31-12-2999')) {
      JS_error();
}

Een ! gaat voor de ==, maw eerst wordt !$date1 bekeken (= false, aangezien date1 als true wordt gezien) waarna die '31-12-2999' geconverteerd wordt naar true, wat deze conditie dus onwaar maakt.
OK, tnx! Nu werkt het if statement wel naar behoren!
Deze check suggereert trouwens een niet helemaal kloppend datamodel; NULL waardes misschien handiger?
Ik snap niet helemaal wat je hiermee bedoeld? Zou je uit kunnen leggen hoe het dan beter kan?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zoefff schreef op woensdag 08 juni 2005 @ 13:35:
[...]

Nee, dan bereik je precies het tegenovergestelde :D
Inderdaad.... :P

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 08 juni 2005 @ 13:36:
Ik snap niet helemaal wat je hiermee bedoeld? Zou je uit kunnen leggen hoe het dan beter kan?
Je slaat blijkbaar ergens een datum in het jaar 3000 op als er geen datum is ingevuld (of iets dergelijks), en daarom suggereert hij dat je je datamodel aanpast zodat er NULL-waarden in dat veld mogen. Ervanuitgaande dat dit uit een database komt uiteraard. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ahha, op die fiets. Zou inderdaad beter/netter zijn...voor de volgende keer dan :9 Tnx

Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 11:30

Guldan

Thee-Nerd

en waarom gebruik je dat ! teken op zo'n manier?. If ($date1 > $date2 && $date1 != '31-12-2999') is toch sowieso duidelijker qua code. != betekend: 'is niet'. && is hetzelfde als 'and' dus het if statement werk perfect.. je zou zoals eerder genoemd alleen beter met timestamps kunnen werken.

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

and is niet hetzelfde als &&: precedence ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Guldan schreef op woensdag 08 juni 2005 @ 16:52:
en waarom gebruik je dat ! teken op zo'n manier?. If ($date1 > $date2 && $date1 != '31-12-2999') is toch sowieso duidelijker qua code. != betekend: 'is niet'. && is hetzelfde als 'and' dus het if statement werk perfect.. je zou zoals eerder genoemd alleen beter met timestamps kunnen werken.
...en zoals eerder genoemd werk ik uiteraard in mijn werkelijke script ook met timestamps ;)
Pagina: 1