/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177519
Tips : 31968
Nyheder : 719565
Indlæg : 6408657
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste