Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Sprawdzanie poprawności daty.

suromarek 20 Lip 2011 20:33 2650 8
  • #1 20 Lip 2011 20:33
    suromarek
    Poziom 10  

    Data wpisywana jest do formularza w formacie rrrr-mm-dd. Jak wpisze do formularza datę
    1965-05-45 to jest ona uznawana przez kompilator jako data prawidłowa a chciałbym żeby była nie prawidłowa i sprawdzona z kalendarzem

    Code:

    if (!preg_match('/^([0-9]{4})\-([0-9]{2})\-([0-9]{2})$/',$data))
    {
    echo "Data jest nie prawidłowa";
    }


    Dodano po 42 [sekundy]:

    język php

    0 8
  • #3 20 Lip 2011 22:55
    suromarek
    Poziom 10  

    Podczas wpisania do pola tekstowego daty 1992-02-37 do bazy danych dodaje 0000-00-00

    Cytat:

    $format = 'y-m-d';
    $dates = trim($_POST['dates']);



    $time = strtotime($dates);

    $is_valid = date($format, $time) == $dates;



    print "Valid? ".($is_valid ? 'yes' : 'no');

    [/quote]

    0
  • #4 21 Lip 2011 00:00
    skierniak
    Poziom 14  

    Ale kod php działa poprawnie? - rozumiem, że wynikiem podanego kodu i daty jest: "Valid? no".
    Jaka baza jaki typ pola w bazie? Może przesyłasz datę w nieodpowiednim formacie?
    Zamieść też ten kawałek kodu ze swojego pliku.

    0
  • #5 21 Lip 2011 09:01
    suromarek
    Poziom 10  

    Kod działa trochę nie poprawnie bo za każdym razem kiedy dodam datę poprawną na przykład 1992-01-01 czy niepoprawną 1992-16-02 to błąd jest valid no

    Code:

    $format = 'y-m-d';
    $dates = trim($_POST['dates']);



    $time = strtotime($dates);

    $is_valid = date($format, $time) == $dates;
    {


    print "Valid? ".($is_valid ? 'yes' : 'no');
    }


    format zmiennej $dates w bazie date

    0
  • #6 21 Lip 2011 12:31
    skierniak
    Poziom 14  

    No dobrze, jak się poczyta to można dojść do wniosku że najlepiej będzie użyć klasy DateTime:

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Tak na szybko. Możesz sobie ładniej napisać i dokładnie obsłużyć te wszystkie błędy i ostrzeżenia.
    Błędna data np. 2001-06-31 (miał tylko 30 dni) ląduje w ostrzeżeniach bo jest konwertowana do najbliższej poprawnej.

    0
  • #7 21 Lip 2011 13:15
    suromarek
    Poziom 10  

    problem pojawia się u mnie w linijce poniżej dlatego że nie wiem jaką datę ktoś wpisze, data nie jest stałą w programie

    Cytat:

    $dates = DateTime::createFromFormat('Y-m-d');

    Cytat:

    $dates=$_POST['dates'];
    $dates = DateTime::createFromFormat('Y-m-d');
    if(TestDateTimeErrors(1)) print 'OK:' . $dates->format('Y-m-d') . '<br /><br />';


    function TestDateTimeErrors()
    {

    $log = DateTime::getLastErrors();

    if($log['error_count'] > 0)
    {
    print '-------wystąpiły błędy typu 1 -><br /> ';
    foreach($log['errors'] as $str)
    print '------------------------' . $str . '<br />';
    print '<br />';
    return false;
    }

    if($log['warning_count'] > 0)
    {
    print '-------wystąpiły błędy typu 2: -><br /> ';
    foreach($log['warnings'] as $str)
    print '------------------------' . $str . '<br />';
    print '<br />';
    return false;
    }

    return true;
    }
    [/quote]

    1
  • #8 21 Lip 2011 13:36
    skierniak
    Poziom 14  

    Znaczy, że nie ustaliłeś jakiegoś formatu daty? np:
    Wpisz datę (YYYY-MM-DD): "okienko formularza".
    Nie wiem czy dobrze rozumiem? Każdy może wpisać datę jak chce?
    Możesz też w formularzu rozbić datę na:
    podaj datę urodzin: rok:**** miesiąc:** dzień:**
    gdzie * to rozwijana lista z wartościami.

    0
  • #9 21 Lip 2011 13:39
    suromarek
    Poziom 10  

    koledzy dzięki za pomoc już udało mi się problem rozwiązać trochę innym sposobem ale najważniejsze że działa

    0