Hello PHP!

W końcu wzią­łem się do roboty, jak to ^kam­buz powie­dział. Zaczą­łem od jakichś pro­stych rze­czy, a mia­no­wi­cie na któ­rymś tam Pool­cam­pie pod­rzu­cono mi info, abym dla wprawy wyko­nał skryp­cik obli­cza­jący róż­nicę pomię­dzy dwoma datami. Wczo­raj póź­nym popo­łu­dniem usia­dłem i napi­sa­łem kod przy kon­sul­ta­cji via Skype z Mać­kiem.

Nie wiem, czy jest się czym chwa­lić, jed­nakże kod działa tak, jak powi­nien. Wer­sja ‘live’ do obej­rze­nia: http://dedzio.geekr.pl/php/porownanie.dat.php

Kod źró­dłowy:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
function sprawdzpola($d)
{
 return (preg_match('/^([0-9]{1,2})[-\.]([0-9]{1,2})[-\.]([0-9]{4})/', $d) AND strtotime($d) !== false);
}	
function sprawdzdate($d1, $d2)
{
 if ($d1 > $d2)
 {
  $result = $d1 - $d2;
  $roznicadat = ($result/3600)/24;
  return (int)$roznicadat;
 }		
 if ($d2 > $d1)
 {
  $result = $d2 - $d1;
  $roznicadat = ($result/3600)/24;
  return (int)$roznicadat;
 }
}
if ($_POST['akcja'] == 'porownaj')
{			
 $data1 = strip_tags($_POST['data1']);
 $data2 = strip_tags($_POST['data2']);		
 if (sprawdzpola($data1) && sprawdzpola($data2))
 {
  $udata1 = strtotime($data1);
  $udata2 = strtotime($data2);
  if ($data1 != $data2)
  {
   echo '<p>Różnica pomiędzy tymi dwoma datami wynosi <strong>' . sprawdzdate($udata1, $udata2) . '</strong> dni.</p>';
    } else {
    echo '<p class="alert">Podane daty są identyczne. Dlaczego zatem mam cokolwiek liczyć? ;-)</p>';
  }
  } else {
    echo '<p class="alert">Wprowadź poprawny format daty [dzień-miesiąc-rok] i spróbuj ponownie. ;-)</p>';
  } // koniec funkcji sprawdzajacej poprawnosc wpisanych danych
}
?>

Mam nadzieję, że zbyt­nich here­zji w kodzie nie poczy­ni­łem. :-X Pro­gra­mi­stów PHP pro­szę o ocenę kodu i poda­nie jakichś porad, aby uspraw­nić dzia­ła­nie kodu.

P.S. Warto dodać, że z PHP mam tam jakieś pod­stawy, jed­nakże nie są one zbyt dobre póki co.

Komentarze (29):

  1. Paweł Lipiec 22.12.08 | #

    Poka­suj puste linie z kodu :P

  2. klisiu 22.12.08 | #

    @Paweł Lipiec: done.

  3. Sajam 22.12.08 | #

    ?>
    Róż­nica pomię­dzy tymi dwoma datami wynosi dni.
    <?php

    Nie mogę :/
    Przy­po­mina mi to początki mojej zabawy z kodem.
    Uprze­dzam Cię — print czy echo wystar­czy i jest czytelniej.

  4. klisiu 22.12.08 | #

    @Sajam: tak, jak mówi­łem — ja z php zaczy­nam dopiero. ;-) dzięki za uwagę — zoba­czymy, czy to poprawi szyb­kość dzia­ła­nia kodu.

  5. Sajam 22.12.08 | #

    @klisiu, pew­nie poprawi ;-]
    Nie cho­dzi już o sam czas wyko­ny­wa­nia skryptu, bo to ułamki sekund, ale też o czy­tel­ność kodu. Sam powiedz, czy nie wygląda dziw­nie co chwile zamykane/otwierane kodu php?

  6. klisiu 22.12.08 | #

    @Sajam: no w sumie. :-P

  7. Łukasz (lemur) 22.12.08 | #

    Nie działa :P
    Pró­bo­wa­łem róż­nych dat i nic.

  8. klisiu 22.12.08 | #

    @Łukasz (lemur): hmm? Jakiś screen, etc.?

    EDIT: a już widzę — zaraz popra­wię. Przy edy­cji musia­łem coś zmajstrować. :-?

  9. Sajam 22.12.08 | #

    Zapew­niam Wam, że u mnie działa ;]

  10. klisiu 22.12.08 | #

    Dobra, zna­la­złem błąd. ;-)

  11. Szarex 22.12.08 | #

    Wcię­cia za duże! :)

    Wystar­czy 2–4 znaki.

  12. klisiu 22.12.08 | #

    @Szarex: prze­ko­pio­wa­łem taby z TextMate’a. Przy publi­ka­cji następ­nego kodu zmie­nię to.

  13. John Cooper 22.12.08 | #

    Kolejny koder, a ja dalej cią­gle nic nie umiem.

  14. eRIZ 22.12.08 | #

    $result = ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})", $d, $regs);
    Za ereg* należy Ci się kara chłosty.

  15. Tomasz Topa 22.12.08 | #

    Infor­ma­cja: preg_match(), which uses a Perl-compatible regu­lar expres­sion syn­tax, is often a faster alter­na­tive to ereg(). ”

  16. klisiu 22.12.08 | #

    @Tomasz Topa: wiem, eRIZ mi o tym napi­sał na jab­be­rze. W wol­nej chwili prze­ro­bię skrypt.

  17. Ravicious 22.12.08 | #

    Napi­sał­bym to w Ruby, ale… nie mam już na to siły :P

  18. matipl 22.12.08 | #

    No nie…W ciągu 24h kod stał się o wiele czy­tel­niej­szy.
    Ale też nie rozu­miem czemu w ogóle zasto­so­wane wyra­że­nia regu­larne.
    A tak to oczy­wi­ście roz­dzie­le­nie warstw do poszcze­gól­nych pli­ków pole­cam na przy­szłość. Z tym CSS wkle­jo­nym to był hardcore ;)\

    Zamiast 2x powtarzać:

    zro­bił­bym funk­cję z argumentem.

  19. Seban 22.12.08 | #

    Nie znam PHP i wła­ści­wie nie chce znać, ale to mi śmier­dzi spa­ghetti code.

  20. Maciej Płoński 22.12.08 | #

    Łukasz, oby tak dalej, cze­kam aż będziesz pra­co­wał na sta­no­wi­sku ‘PHP Deve­lo­per’ :P

  21. Maxik 22.12.08 | #

    Co Ty byś beze mnie zrobił? ;)

    Dodam tylko, że roz­mowa na skype trwała bite 6 i pół godziny, więc ten kod musiał powstać.

  22. Tomasz Topa 22.12.08 | #

    Dodam tylko, że roz­mowa na skype trwała bite 6 i pół godziny, więc ten kod musiał powstać.”

    Maxik wygrywa dzi­siej­szy internet ;)

  23. klisiu 22.12.08 | #

    @Maciej Płoń­ski: oj daleka droga przede mną…

  24. kambuz 22.12.08 | #

    super!
    działa dla dat z dotych­cza­so­wego mojego życia. Ale oba­wiam się, że jak będę chciał za nie­całe 30 lat spraw­dzić — to nie zadziała. Dlaczego?

    Infor­ma­cja: Poprawny zakres znacz­nika czasu to zwy­kle od piątku, 13 grud­nia 1901 20:45:54 GMT (czasu Gre­en­wich) do wtorku, 19 stycz­nia 2038 03:14:07 GMT. (War­to­ści te odpo­wia­dają mini­mal­nej i mak­sy­mal­nej war­to­ści 32-bitowej licz­bie cał­ko­wi­tej ze znakiem)

    może więc następ­nym kro­kiem będzie spra­wie­nie, że skrypt poli­czy dni nawet dla dat np. z 2100 roku?

    co ty na to? :)

  25. Krychaj 23.12.08 | #

    Fajne zada­nie sobie wybra­łeś, ja też zaczy­nam więc wiem jakie cięż­kie są początki. A naj­cięż­sze z tego wszyst­kiego to samo­za­par­cie i wła­sna mobilizacja :)

  26. klisiu 26.12.08 | #

    @kambuz: nie­stety, ale nie mam za bar­dzo pomy­słu na zasto­so­wa­nie innej funk­cji niż strtotime(). Jakaś wskazówka?

  27. macnow 26.12.08 | #

    A ja kie­dyś… (na pierw­szym seme­strze) popeł­ni­łem takie coś…
    http://nopaste.com/p/aa3o5GX71

  28. […] Chyba powi­nie­nem teraz wyko­rzy­stać te naj­dłuż­sze waka­cje, jakie mi przy­słu­gują i wró­cić do nauki PHP. Wtedy to dopiero wyj­dzie jaki ze mnie n00b. […]

  29. […] momentu kiedy zaczą­łem poka­zy­wać publicz­nie swój kod PHP minęło dość sporo czasu. Od grud­nia prak­tycz­nie moja nauka PHP ule­gła wstrzy­ma­niu ze […]

Dodaj komentarz