[php] kontrolera om datum är korrekt och om det överlappar.

Permalänk
Medlem

[php] kontrolera om datum är korrekt och om det överlappar.

Hej jag har ett litet huvud bry...
hur kontrollerar jag om ett datum är korrekt?
datumen är lagrat i en databas enligt SQL DATE datatyp standard: YYYYMMDD (dvs inga "-" eller "/")
och hur kontrolerar jag därefter om datumet överlappar med datum som finns i datbasen?

databasen är SQLite.

(om ni vill se koden gå till: https://code.launchpad.net/~gustav-hartvigsson/booka/trunk eller https://launchpad.net/booka )

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Medlem

enklast är att använda preg_match:
http://php.net/manual/en/function.preg-match.php

edit: typ: preg_match( '/^(\d{4})-(\d{2})-(\d{2})$/',$this->value,$match )

deta är för 2000-10-10... jag tror du klarar av att göra om den utan "-"

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Gego
Hej jag har ett litet huvud bry...
hur kontrollerar jag om ett datum är korrekt?
datumen är lagrat i en databas enligt SQL DATE datatyp standard: YYYYMMDD (dvs inga "-" eller "/")
och hur kontrolerar jag därefter om datumet överlappar med datum som finns i datbasen?

databasen är SQLite.

(om ni vill se koden gå till: https://code.launchpad.net/~gustav-hartvigsson/booka/trunk eller https://launchpad.net/booka )

Ska du göra en check innan en insert görs?

Jag hade nog gjort checken direkt i en query istället.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

grejen är att om jag gör checken innan jag gör en insert så kan jag redirect:a till baka till formuläret och sedan använda en variabel föra ett göra lable:n röd och echo:a "var vänlig kontrollera datumet" eller dylikt.

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Citat:

Ursprungligen inskrivet av Gego
grejen är att om jag gör checken innan jag gör en insert så kan jag redirect:a till baka till formuläret och sedan använda en variabel föra ett göra lable:n röd och echo:a "var vänlig kontrollera datumet" eller dylikt.

Får man komma med ett litet förslag? Du kan använda följande regex:
"(\d{4})[?-/](\d{2})[?-/](\d{2})"

Sedan kan du då göra en loop för alla grupper i matchen, vilket gör att man kan, om man vill, ange med bindestreck. Anger man utan kommer du att få ut den i det formatet du vill, men även om de anger ett med bindestreck. Med det sättet kan du minska frustrationen hos användaren genom att kunna förstå vad den menade egentligen och plocka ut det väsentliga ur inputen...

edit: uppdaterade regex

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

regex?
re-gex?
reg-ex?
0_o?????

/head desk

/me läser tutorial efter att ha missat hur fan mon kan få ut något från phps officiella dokumentation.
aaahhhhhhh.... skall försöka......

[edit]
nej, det fungerade inte.....

if(!eregi("(\d{4})-?(\d{2})-?(\d{2})", $_POST[EndDate])){ $EndDateunset = 'style="background-color: yellow;" '; $errorMsg= $errorMSG."the end date string must be YYYY-MM-DD"; $valid=false; } if(! eregi("(\d{4})-?(\d{2})-?(\d{2})",$_POST[EndDate])){ $StartDateunset = 'style="background-color: yellow;" '; $errorMsg= $errorMSG."the start date string must be YYYY-MM-DD"; $valid=false; }

ger alltid falskt...
vad är fel?

[edit2]
nu fungerar det.... tror jag 0_o....

if(! preg_match("|(\d{4})-?(\d{2})-?(\d{2})|", $_POST[EndDate])){ $EndDateunset = 'style="background-color: yellow;" '; $errorMsg= $errorMSG."the end date string must be YYYY-MM-DD"; $valid=false; } if(! preg_match("|(\d{4})-?(\d{2})-?(\d{2})|", $_POST[EndDate])){ $StartDateunset = 'style="background-color: yellow;" '; $errorMsg= $errorMSG."the start date string must be YYYY-MM-DD"; $valid=false; }

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk

Varför ändrade du i regexet? Klart det inte funkar då...

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

men dätta fungerar inte ?_?....

(! preg_match("|(\d{4})[?-/]|(\d{2})[?-/](\d{2})|", $_POST[EndDate]))

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Citat:

Ursprungligen inskrivet av Gego
men dätta fungerar inte ?_?....

(! preg_match("|(\d{4})[?-/]|(\d{2})[?-/](\d{2})|", $_POST[EndDate]))

Det var ju inte det jag skrev..?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

det var nästan vad det de skrev,

eregi är depriserat, och bör inte användas.

"|" eller "/" skall man sätta "runt" mönstret.

se: http://www.php.net/manual/en/function.preg-match.php#94678

Visa signatur

@gegoxaren på identi.ca
min personliga Blag ^_^
#python #cSharp #php #sqlite #freetard #loonix

Permalänk
Citat:

Ursprungligen inskrivet av Gego
det var nästan vad det de skrev,

eregi är depriserat, och bör inte användas.

"|" eller "/" skall man sätta "runt" mönstret.

se: http://www.php.net/manual/en/function.preg-match.php#94678

Du har ju tagit bort "\" framför "d". "\d" betyder siffra, "d" betyder d... Du får säkert en match på "dddd-dd-dd"

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase