Miksi seuraavaan pätkään ei kelpaa arvo 2.5.2011
if(preg_match("/^[0-9][]{1,2}\\.[0-9]{1,2}\\.[0-9]{4}$/", "$_POST[erapaiva]")) { $korvaaja = array(",","-"); $erapaiva = str_ireplace($korvaaja, ".", $_POST['erapaiva']); } else{ echo "<font style='color:red;'>Päivämäärä on virheellistä muotoa. Tarkista päivämäärä merkintäsi </font>" . $_POST['erapaiva']; return; }
Koska lausekkeen välissä on ylimääräinen [].
Olisi myös suotavaa kirjoittaa preg_match-funktion toinen parametri samalla tavalla kuin muissakin kohdissa. Lisäksi korvauksessasi ei ole mitään järkeä, koska jos lauseke tunnistaa tekstin, siinä ei voi olla merkkiä "," eikä "-" korvattavaksi.
Eli kaikesta päätellen voin unohtaa turhana tuon preg_matchin, koska käyttäjä saattaa päivämäärän syöttää pisteen, pilkun tai viivan kanssa. vedän vain läpi sen tuon replace:n läpi.
Vai onko parempi käyttää tuota preg_matchia?
manninen kirjoitti:
Eli kaikesta päätellen voin unohtaa turhana tuon preg_matchin, koska käyttäjä saattaa päivämäärän syöttää pisteen, pilkun tai viivan kanssa. vedän vain läpi sen tuon replace:n läpi.
Jos jätät preg_matchin pois, voi käyttäjä antaa päivämääräksi mitä tahansa.
Koodin saa toimimaan korjaamalla säännöllisen lausekkeen ja siirtämällä preg_matchin str_ireplacen jälkeiseen osaan. Myöskin str_ireplacen tilalla voisi käyttää ihan tavallista str_replacea.
Toinen vaihtoehto on muuttaa säännöllinen lauseke sellaiseksi, että se hyväksyy myös pilkut ja viivat.
Olethan huomioinut, että nykyinen lauseke hyväksyy myös suuren joukon virheellisiä päivämääriä. Checkdate- ja strtotime-funkioita voisi käyttää parempaan päivämäärän tarkistukseen.
Jos tallennan tietokantaan piilokentästä päivämäärän, joka on date() funktiolla sinne asetettu, onko sitä järkeä tarkistaa enää esim tällä tapaa :
Manninen:
Samalla tavalla niitä "piilokenttiäkin" voi lähetellä väärissä muodoissa vaikka lomakkeelle kentän arvo onkin php:lla luotu.
Firefoxilla on ihan webisuunnittelutyökaluja, joilla voi kaikkien lomakkeiden kenttien arvoja muokkailla, niin miksei jollain spämmisovelluksillakin niitä voisi muokkailla ihan samalla tavalla ja lähettää vaikkapa haitallista koodia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.