|
| 2 til professoren... Fra : Peter Farsinsen |
Dato : 13-03-03 14:04 |
|
Jeg har lige et par problemer, som jeg håber at I kan hjælpe med !!
1.
Jeg skal have valideret en dato der bliver angivet af brugeren i formatet:
dd-mm-yy
I min verden ser det ud som flg.:
if (!ereg ("([01-31]{2})-([01-12]{2})-([03-99]{2})", $start_dato)) {
$fejl++;
$trcol = "#FFEE88";
$fejl_beskrivelse = "Dato formatet er forkert...";
}
Men det gør det ikke ifølge PHP :/
Datoen skal altså valideres efter flg...
De to første tegn kan være en værdi fra 01 -> 31
De to næste tegn kan være en værdi fra 01 -> 12
De to sidste tegn kan være en værdi fra 03 -> 99
Nogen der kan hjælpe med noget krads reg_xp :?
2.
Jeg har en side med en stor formular der er genereret fra nogle date i en
mysql database ... for hver <input> container vil jeg gerne have skrevet
værdien som en enkelt post i en database! Der vil derfor blive en masse
skriveri i databasen hver gang en form submittes ... men hvordan skriver jeg
flere poster på samme tid, laver man en løkke (lyder i min verden som noget
slam kode) eller kan man lave en pæn sql query der tilføjer flere poster ?
noget a la "INSERT INTO tabel (foo,bar,id) VALUES ('$foo','$bar','$id') AND
(foo,bar,id) VALUES ('$foo','$bar','$id')" ...
Altså det er i hvert fald sån' det i realiteten vil virke, men jeg er ikke
sikker på hvordan man gør det på en korrekt måde!
Håber at I er onpoint!
mvh
Peter Farsinsen
| |
Thomas Lindgaard (13-03-2003)
| Kommentar Fra : Thomas Lindgaard |
Dato : 13-03-03 17:36 |
|
"Peter Farsinsen" <spam@_S_P_A_M_farsinsen.dk> wrote in
news:b4pvjh$g5o$1@sunsite.dk:
> Jeg skal have valideret en dato der bliver angivet af brugeren i
> formatet: dd-mm-yy
>
> I min verden ser det ud som flg.:
>
> if (!ereg ("([01-31]{2})-([01-12]{2})-([03-99]{2})", $start_dato)) {
> $fejl++;
> $trcol = "#FFEE88";
> $fejl_beskrivelse = "Dato formatet er forkert...";
> }
>
> Men det gør det ikke ifølge PHP :/
Nej :)
Jeg plejer at bruge preg_match() i stedet for ereg() - der er vist lidt
forskel i måden man skriver sine regulære udtryk på, så det kan være at du
skal rode lidt...
Du skal tjekke om tre tal ligger i bestemte intervaller... det kan man ikke
gøre vha. et regulært udtryk (læs: det kan man godt vha. lidt fitleri, men
det er ikke altid lige smart[1]).
I min verden vil en datovalidering bestå af at tjekke om strengen har det
rigtige format (dd-mm-åå) og dernæst et tjek for om værdierne ligger i de
rigtige intervaller.
function valiDate($date)
{
if ( preg_match('/[0-9]{2}-[0-9]{2}-[0-9]{2}/', $date) )
{
// dato har det rigtige format
$exploded_date = explode('-', $date);
$day = $exploded_date[0];
$month = $exploded_date[1];
$year = $exploded_date[2];
// tjek at værdierne ligger i de rigtige intervaller
if ( ( $day >= 1 && $day <= 31 ) &&
( $month >= 1 && $month <= 12 ) &&
( $year >= 3 && $year <= 99 )
)
{
return true;
}
}
return false;
}
> Jeg har en side med en stor formular der er genereret fra nogle date i
> en mysql database ... for hver <input> container vil jeg gerne have
> skrevet værdien som en enkelt post i en database! Der vil derfor blive
> en masse skriveri i databasen hver gang en form submittes ... men
> hvordan skriver jeg flere poster på samme tid, laver man en løkke
> (lyder i min verden som noget slam kode) eller kan man lave en pæn sql
> query der tilføjer flere poster ?
>
> noget a la "INSERT INTO tabel (foo,bar,id) VALUES
> ('$foo','$bar','$id') AND (foo,bar,id) VALUES ('$foo','$bar','$id')"
> ...
Hvad med
INSERT INTO tabel (a, b, c) VALUES (1,2,3), (2,3,4), (3,4,5);
--
Hyggehej
/Thomas
[1]
<?php
$date = '13-03-03';
if ( preg_match('/(0[1-9]|[1-2][0-9]|3[0-1])-(0[1-9]|1[0-2])-(0[3-
9]|[1-9][0-9])/', $date) )
{
print 'jubii';
}
else
{
print 'ævs';
}
?>
| |
Morten Winther (13-03-2003)
| Kommentar Fra : Morten Winther |
Dato : 13-03-03 17:42 |
|
"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> skrev i en meddelelse
news:Xns933DB2FF85ADAthomasitsnedkerendk@130.225.247.90...
> "Peter Farsinsen" <spam@_S_P_A_M_farsinsen.dk> wrote in
> news:b4pvjh$g5o$1@sunsite.dk:
>
> > Jeg skal have valideret en dato der bliver angivet af brugeren i
> > formatet: dd-mm-yy
> >
> > I min verden ser det ud som flg.:
> >
> I min verden vil en datovalidering bestå af at tjekke om strengen har det
> rigtige format (dd-mm-åå) og dernæst et tjek for om værdierne ligger i de
> rigtige intervaller.
>
I min verden bruger jeg http://www.php.net/manual/en/function.checkdate.php
/ morten
| |
Mads Lie Jensen (13-03-2003)
| Kommentar Fra : Mads Lie Jensen |
Dato : 13-03-03 23:00 |
|
On Thu, 13 Mar 2003 16:35:49 +0000 (UTC), Thomas Lindgaard
<thomas@it-snedkeren.BLACK_HOLE.dk> wrote:
> // dato har det rigtige format
> $exploded_date = explode('-', $date);
> $day = $exploded_date[0];
> $month = $exploded_date[1];
> $year = $exploded_date[2];
>
> // tjek at værdierne ligger i de rigtige intervaller
> if ( ( $day >= 1 && $day <= 31 ) &&
> ( $month >= 1 && $month <= 12 ) &&
> ( $year >= 3 && $year <= 99 )
> )
Når nu alligevel dato er blevet brækket op i dag, måned og år, så er det
noget lettere at bruge
checkdate($month, $day, $year)
end den der if (...) vil jeg da mene.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Lær af andres fejl
- du lever alligevel ikke længe nok til selv at prøve dem alle.
| |
Thomas Lindgaard (13-03-2003)
| Kommentar Fra : Thomas Lindgaard |
Dato : 13-03-03 23:11 |
|
Mads Lie Jensen <mads@gartneriet.dk> wrote in
news:nov17vsh9a1pi36ptb48s7m082vo5o3gkh@4ax.com:
> N†r nu alligevel dato er blevet br‘kket op i dag, m†ned og †r, s† er det
> noget lettere at bruge
>
> checkdate($month, $day, $year)
>
> end den der if (...) vil jeg da mene.
Nå så det mener I lige godt? :)
Joh det kan der være noget om - men så får man jo ikke lov til at skrive et
regulært udtryk og explodere ting og sårn...
Jammen jo - hvis jeg havde kendt den funktion, så ville jeg da nok osse
have brugt den :) - blot skal man bare lige huske at tjekke årstallet -
intervallet fra 1 til 32767 synes at være lige rigeligt stort :)
Hyggehej
/Thomas
| |
Mads Lie Jensen (15-03-2003)
| Kommentar Fra : Mads Lie Jensen |
Dato : 15-03-03 05:23 |
|
On 13 Mar 2003 22:11:05 GMT, Thomas Lindgaard
<thomas@it-snedkeren.BLACK_HOLE.dk> wrote:
>> checkdate($month, $day, $year)
>>
>> end den der if (...) vil jeg da mene.
>
>Nå så det mener I lige godt? :)
>
>Joh det kan der være noget om - men så får man jo ikke lov til at skrive et
>regulært udtryk og explodere ting og sårn...
>
>Jammen jo - hvis jeg havde kendt den funktion, så ville jeg da nok osse
>have brugt den :) - blot skal man bare lige huske at tjekke årstallet -
>intervallet fra 1 til 32767 synes at være lige rigeligt stort :)
Fordelen ved checkdate() er at den ikke lader en dato som 31-2-2003
smutte igennem.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Lær af andres fejl
- du lever alligevel ikke længe nok til selv at prøve dem alle.
| |
Peter Farsinsen (14-03-2003)
| Kommentar Fra : Peter Farsinsen |
Dato : 14-03-03 22:22 |
|
"Thomas Lindgaard" <thomas@it-snedkeren.BLACK_HOLE.dk> skrev..."
> function valiDate($date)
> {
> if ( preg_match('/[0-9]{2}-[0-9]{2}-[0-9]{2}/', $date) )
> {
> // dato har det rigtige format
> $exploded_date = explode('-', $date);
> $day = $exploded_date[0];
> $month = $exploded_date[1];
> $year = $exploded_date[2];
>
> // tjek at værdierne ligger i de rigtige intervaller
> if ( ( $day >= 1 && $day <= 31 ) &&
> ( $month >= 1 && $month <= 12 ) &&
> ( $year >= 3 && $year <= 99 )
> )
> {
> return true;
> }
> }
>
> return false;
> }
Din kode virker "nogenlunde", men der er en enkelt fejl ... hvis $foo ellers
overholder intervallerne i dd-mm-yy ... kan der ellers stå alt det der vil
efter dd-mm-yy ... jeg skal have tjekket at strengen kun indeholder 8 tegn,
hvoraf der kan være tal og bindestreger :) inden din funktion kan bruges
> Hvad med
>
> INSERT INTO tabel (a, b, c) VALUES (1,2,3), (2,3,4), (3,4,5);
Superb ... det virker!
mvh
Peter Farsinsen
| |
Thomas Lindgaard (15-03-2003)
| Kommentar Fra : Thomas Lindgaard |
Dato : 15-03-03 00:37 |
|
"Peter Farsinsen" <spam@_S_P_A_M_farsinsen.dk> wrote in
news:3e724815$0$127$edfadb0f@dtext02.news.tele.dk:
> Din kode virker "nogenlunde", men der er en enkelt fejl ... hvis $foo
> ellers overholder intervallerne i dd-mm-yy ... kan der ellers stå alt
> det der vil efter dd-mm-yy ... jeg skal have tjekket at strengen kun
> indeholder 8 tegn, hvoraf der kan være tal og bindestreger :) inden
> din funktion kan bruges
Okidoki - tilføj noget der matcher start og slut på strengen (henholdsvis
^ og $):
if ( preg_match('/^[0-9]{2}-[0-9]{2}-[0-9]{2}$/', $date) )
--
Hyggehej
/Thomas
| |
|
|