[PHP] timestamp vergelijken met 'leeg'

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
Hallo,

ik heb heel internet afgezocht, maar kan het maar niet vinden, misschien hebben jullie dit al eens gedaan.

Ik wil dus controleren of een veld in de database leeg is van het type timestamp (MySQL)
Als ik een nieuw record aanmaak dan komt er default 0000-00-00 00:00:00 in te staan.
Nou wil ik weten met een IF constructie of dat veld leeg is of niet. Ik heb vanalles geprobeerd:
- isset
- == null
- == '0000-00-00 00:00:00'
- == "0000-00-00 00:00:00"

dus bijv:
if ($adatum == '0000-00-00 00:00:00')
{ // doe iets }

weet iemand hoe ik dus erachter kom dat het veld leeg is? (met if o.i.d.)

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Kijk gewoon of de datum voor 1900 is?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

En daarbij: wat heb je zelf al geprobeerd? wat lukte daar niet mee? Zie ook P&W FAQ - De "quickstart" voor de zaken die we eigenlijk in een startpost zouden willen zien.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 21-09 11:30

Guldan

Thee-Nerd

IK snap je probleem niet helemaal maar als je wilt roberen om te kijken of een veld leeg is dan kun je vergelijken met null of isset. Ik zou om een timestamp met een leeg veld te vergelijken gewoon een if gebruiken. Dit kan ook gewoon mits je er php timestamps in op slaat.

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!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
ik heb dus verschillende vergelijkingen geprobeerd. (zie openingspost)

Verder heb ik ook geprobeerd deze 'lege' datum te converteren met mktime naar een int en daarmee te vergelijken, maar er komt iedere keer een ander getal uit. (waarom is me een raadsel)

-> kijken of het voor 1900 is; oke wil ik proberen. Hoe zou dat dan uitzien?

IF ($adatum < [wat zou hier moeten?] )
{
}

Acties:
  • 0 Henk 'm!

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

NMe

Quia Ego Sic Dico.

Blijkbaar heb je ingesteld dat het veld NOT NULL mag zijn. Zorg eens dat het wel NULL mag worden, dan kun je er veel makkelijker mee omgaan.

'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!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
Guldan, klopt, maar
IF($adatum = null){} of
IF(isset($adatum)){}

werken allebei niet, vandaar mijn vraag. Misschien zie ik iets kleins over het hoofd...

Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21-09 12:54
Er is een wezelijk verschil tussen een MySQL timestamp en een UNIX timestamp. mktime(), en de overige PHP functies gaan uit van de UNIX variant (n aantal seconden sinds 1 januari 1970). In een query kun je aangeven dat je een UNIX timestamp wilt hebben, in de mysql manual staat deze functie wel uitgelegd.

Als je die unix timestamp eenmaal hebt kan PHP er ook wat makkelijker mee werken.

Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
null staat in phpmyadmin bij alle datumvelden op ja,
toch bedankt voor de suggestie, moest ik even checken.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:47

Creepy

Tactical Espionage Splatterer

En als je de waarden van $adatum afdrukt, wat verschijnt er dan? Zie ook P&W FAQ - Leer **** debuggen!!.
Daarbij: hoe je kan kijken of een datum kleiner is dan een andere datum is prima te vinden in de PHP manual bij date functions

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
xp2002 schreef op dinsdag 10 mei 2005 @ 15:28:
ik heb dus verschillende vergelijkingen geprobeerd. (zie openingspost)

Verder heb ik ook geprobeerd deze 'lege' datum te converteren met mktime naar een int en daarmee te vergelijken, maar er komt iedere keer een ander getal uit. (waarom is me een raadsel)

-> kijken of het voor 1900 is; oke wil ik proberen. Hoe zou dat dan uitzien?

IF ($adatum < [wat zou hier moeten?] )
{
}
Dat kun je al in MySQL doen natuurlijk. Een If-statement in mysql ziet er ongeveer zo uit:
code:
1
SELECT IF(`field` < 1900,"",`field`) AS output FROM table WHERE 1

Dit levert een lege string als `field` kleiner is dan 1900 en anders de waarde van `field`. Mag je zelf uitzoeken hoe je een timestamp converteert naar een jaartal...

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • rb338
  • Registratie: Januari 2001
  • Laatst online: 05-01 12:58
xp2002 schreef op dinsdag 10 mei 2005 @ 15:31:
Guldan, klopt, maar
IF($adatum = null){} of
IF(isset($adatum)){}

werken allebei niet, vandaar mijn vraag. Misschien zie ik iets kleins over het hoofd...
Gebruik je daar wel == en niet = ?
Want zoals je het daar typt gaat het natuurlijk nooit werken. Dan zet ie $adatum op null.

Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
als ik $adatum toon krijg ik: 0000-00-00 00:00:00
ik heb al zelf geprobeerd dit te converteren naar string om daar maar mee te vergelijk, maar dat is me zelfs niet gelukt.

ik heb al complete cms'en gebouwd, maar soms hang ik gewoon vast op zoiets kleins/simpels. ;(

Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
T-MOB: in de select kan ik het momenteel niet gebruiken, ik moet altijd het record hebben ook al voldoet ie niet, maar ik moet wel weten met een if of die null is of niet.

rb338: klopt, hier heb ik het fout getypt, maar ik mijn eigen code heb ik == gebruikt.

Acties:
  • 0 Henk 'm!

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Als je nu de tabel gewoon aanpast zodat er NULL komt ipv. 0000-00-00 00:00:00 en dan gewoon SELECT * FROM tabel WHERE datum = NULL

Blog [Stackoverflow] [LinkedIn]


Acties:
  • 0 Henk 'm!

  • Mitrilvich
  • Registratie: Juli 2004
  • Laatst online: 08-08 10:56
Als timestamp voor de PHP/MySQL combinatie kan je (imo) beter een integer veld in de tabel nemen dan een timestamp. Je kan dan simpel de time opslaan en lezen in het formaat waarmee php vertrouwd is, namelijk een gewone integer.

Voor controle op NULL of 0 kan je dan gewoon de:
PHP:
1
2
3
if (!$tijdStamp) {
  //Code wanneer tijd null/0 is......
}

constructie gebruiken.

[ Voor 6% gewijzigd door Mitrilvich op 10-05-2005 15:55 ]


Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
Wolfboy: daar dacht ik juist ook aan. Ik probeerde het volgende: zette als standaardwaarde NULL in de tabeldefinitie. En zette er my phpmyadmin zelf NULL in een record.
Weet je wat hij dan doet? Hij zet zelf er gewoon weer 0000-00-00 00:00:00 in.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
xp2002 schreef op dinsdag 10 mei 2005 @ 15:40:
T-MOB: in de select kan ik het momenteel niet gebruiken, ik moet altijd het record hebben ook al voldoet ie niet, maar ik moet wel weten met een if of die null is of niet.
Tuurlijk kun je hem dan wel gebruiken in de select. Met een if in de select kun je elke waarde toekennen aan het veld als ie leeg is... Voor mijn part zo lomp als dit:
code:
1
2
3
4
5
6
7
8
SELECT 
   IF(`field` < 1900,"Dit veld bevat helemaal geen geldige datum jongens,
     in PHP vangen we dit af met een IF statement op deze waarde. Of deze manier
     handig is hangt verder af van toekomstige veranderingen in het script en wat ik er
     eigenlijk mee wil. Maar werken zal het",`field`) 
   AS output 
   FROM table 
   WHERE 1

met PHP
PHP:
1
2
3
4
5
if ($row['output'] == 'Dit veld bevat ... Maar werken zal het') {
 //hmmm geen datum
} else {
 //jawel een datum \0/
}

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
T-MOB: ah zo, ga ik meteen proberen!

Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
T-MOB: dit werkt! Hartelijk bedankt!

Mitrilvich: dit zal ik zeker ook overwegen de volgende keer!

Toch weer wat bijgeleerd he :Y)

Acties:
  • 0 Henk 'm!

  • Psychokiller
  • Registratie: Oktober 2001
  • Niet online
Het zal vast niet de beste methode zijn, maar met strtotime krijg je de Unix Timestamp.
Bij 0000-00-00 00:00:00 geeft mij die 943916400 seconden terug. Kun je dan niet zoiets als:
PHP:
1
2
3
4
5
6
if( strtotime( $adatum ) <= 943916400 ) {
  // Lege waarde
}
else {
  // Geldige datum
}

Acties:
  • 0 Henk 'm!

  • xp2002
  • Registratie: Augustus 2002
  • Laatst online: 30-08 16:27
Dat zou ook moeten werken, ik heb zelf mktime gebruikt,
maar die geeft steeds een andere waarde terug en was niet te gebruiken.

thanx!

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Mijn voorkeur zou uitgaan naar een NULL collumn, maar mocht je toch willen blijven werken met die 0-date, dan zou je UNIX_TIMESTAMP kunnen overwegen.Dan kun je direct met een if-statement checken.
Pagina: 1