Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: preg_match

manninen [02.05.2011 14:38:41]

#

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;
        }

Metabolix [02.05.2011 14:41:57]

#

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.

manninen [02.05.2011 14:52:15]

#

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?

-tossu- [02.05.2011 15:07:40]

#

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.

manninen [03.05.2011 10:31:48]

#

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 :

function paivamaara($merkkijono){

      $leima = strtotime($merkkijono);

      if(!is_numeric($leima)){
        return FALSE;
      }

      $kuukausi = date('m', $leima);
      $paiva    = date('d', $leima);
      $vuosi    = date('Y', $leima);

      if(checkdate($kuukausi,$paiva,$vuosi)){
        return TRUE;
      }

      return FALSE;
    }

Lebe80 [03.05.2011 10:43:03]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta