Date notatie en MYSQL LIKE

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco

Marco

16/10/2007 11:36:00
Quote Anchor link
Ik heb een datepicker class gedownload met de volgende datumnotatie
yyyy-m-d

In de database staat de datum opgeslagen als yyyy-mm-dd.

Voorbeeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
$datum
= '2007-7-1'

SELECT *
FROM `backloading`
WHERE `aankomst` LIKE 'Amsterdam'
AND vertrekdatum LIKE '$datum'

?>


Notatie YYYY-M-D wordt zelfs met like niet gevonden, notatie yyyy-mm-dd werkt prima. Hoe kan ik een variabele $datum omzetten naar het yyyy-mm-dd formaat?
Gewijzigd op 01/01/1970 01:00:00 door Marco
 
PHP hulp

PHP hulp

30/11/2024 20:36:06
 
Frank -

Frank -

16/10/2007 12:11:00
Quote Anchor link
7 en 07 zijn niet hetzelfde, een datum wordt als string behandeld. Dit geldt uiteraard ook voor 1 en 01.

De berekening 2007 minus 7 minus 1, zal 1999 opleveren. Er zullen weinig datums zijn die daarmee overeenkomen. Gebruik quotes om een datum-string aan te maken: '2007-07-01'

Verder snap ik niet wat je met LIKE wilt bereiken, het lijkt erop dat je de query langzamer wilt maken... Gebruik = voor een complete vergelijking, wanneer je LIKE zonder % gebruikt, ben je fout bezig.

Backticks ` mag je weggooien, die heb je helemaal nooit nodig in een query, ook niet als je geserveerde en/of onmogelijke namen wilt gebruiken voor tabellen en/of kolommen. Dan kies je betere namen.
 
Marco

Marco

16/10/2007 12:18:00
Quote Anchor link
Frank,

Ik selecteer de datum m.b.v. een datepicker, die als output yyyy-m-d geeft, terwijl de database deze notatie hanteert yyyy-dd-mm. Sorry, ik was de quotes in de (voorbeeld) variabele vergeten.

Mijn vraag is dus: Hoe kan ik yyyy-m-d omzetten naar yyyy-dd-mm.
Like heb ik gebruikt omdat "= " niet werkt als er een nul onbreekt voor de desbetreffende dag of maand. Maar ook like bood hiertoe geen oplossing.
Gewijzigd op 01/01/1970 01:00:00 door Marco
 
Frank -

Frank -

16/10/2007 12:23:00
Quote Anchor link
datumpicker = browser

browser != database

browser kent de database niet eens, heeft daar helemaal niks mee te maken.

Oplossing: zorg dat je met een stukje php-code een geldige datum aanmaakt, met voorloopnullen. LIKE is een lapmiddel, gaat problemen opleveren.

En nog wat, met jouw datumpicker kan ik prima een ongeldige datum selecteren, 31 februari 200045 is prima te selecteren! Denk jij dat het zin heeft om daar een query mee uit te gaan voeren? checkdate() is je beste vriend.
 
Marco

Marco

16/10/2007 13:02:00
Quote Anchor link
Het client- server verhaal snap ik. Volgens mij voeren we 2 discussies.

check: http://www.backloading.bussite.at/zoeken.php

Ik wil de .$calendar->Value(); datum omzetten naar een notatie met voorloopnullen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?
include "kalender/calendar.php";
        $calendar = new Calendar("example1");
        $calendar->currentDateStyle = "currentDate";    
        echo $calendar->Output();
       echo  'Geselecteerde datum: '.$calendar->Value();
?>
 
Gerben Jacobs

Gerben Jacobs

16/10/2007 13:05:00
Quote Anchor link
Een smerige oplossing is kijken of de dag/maand onder 10 is, zoja, er een 0 voorzetten.
 
Frank -

Frank -

16/10/2007 13:05:00
Quote Anchor link
Nee, er is slechts 1 discussie: Hoe jij de ontvangen datum (ongeacht het formaat) omzet naar een geldig formaat voor de database. Het maakt geen ruk uit hoe de datum via de browser wordt aangeleverd (al is het Chinees), jij zult er altijd voor moeten zorgen dat je voor 200% zeker weet dat jij een query aanmaakt met het datumformaat yyyy-mm-dd.

Het hele kalender-gebeuren is dus totaal offtopic.
 
Marco

Marco

16/10/2007 13:15:00
Quote Anchor link
En mijn vraag is dus: Hoe kan ik (serverside) de output van de kalender (volgens jou ongeacht het formaat) naar een geldig formaat voor de database omzetten, zodat de query 200% zeker een yyyy-mm-dd datumformaat bevat? Eventueel met checkddate wat je noemt of iets dergelijks..
 
Frank -

Frank -

16/10/2007 13:18:00
Quote Anchor link
- explode de input die je van de browser ontvangt
- checkdate()
- met sprintf kun je voorloopnullen bijplaatsen
- zet de boel weer in de juiste volgorde: yyyy-mm-dd

De code mag je zelf gaan opstellen.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Marco

Marco

16/10/2007 13:23:00
Quote Anchor link
Thanks Frank!
 
Bart van der veen

bart van der veen

16/10/2007 13:25:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$datum_query
=date('Y-m-d', strtotime($datum));
?>
 
Frank -

Frank -

16/10/2007 13:28:00
Quote Anchor link
@Bart: Leuke code, maar deze controleert niet op geldigheid. En dat is nu net een zwak punt van MySQL, die ziet een broodje Aap nog aan voor een datum.
 
Bart van der veen

bart van der veen

16/10/2007 13:41:00
Quote Anchor link
je kunt php toch laten controleren of het een geldige datum is, dat zit er nu niet in maar dat kan vast wel.
 
Jan Koehoorn

Jan Koehoorn

16/10/2007 13:45:00
Quote Anchor link
Dat was al gezegd; checkdate ()
 
Marco

Marco

16/10/2007 14:27:00
Quote Anchor link
$datum_query=date('Y-m-d', strtotime($datum)); in combinatie met een checkdate werkt prima.

Allen bedankt voor de hulp!
Gewijzigd op 01/01/1970 01:00:00 door Marco
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.