Hello PHP!

W końcu wziąłem się do roboty, jak to ^kambuz powiedział. Zacząłem od jakichś prostych rzeczy, a mianowicie na którymś tam Poolcampie podrzucono mi info, abym dla wprawy wykonał skrypcik obliczający różnicę pomiędzy dwoma datami. Wczoraj późnym popołudniem usiadłem i napisałem kod przy konsultacji via Skype z Maćkiem.

Nie wiem, czy jest się czym chwalić, jednakże kod działa tak, jak powinien. Wersja ‘live’ do obejrzenia: 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 zbytnich herezji w kodzie nie poczyniłem. :-X Programistów PHP proszę o ocenę kodu i podanie jakichś porad, aby usprawnić działanie kodu.

P.S. Warto dodać, że z PHP mam tam jakieś podstawy, jednakże nie są one zbyt dobre póki co.

Komentarze (29):

  1. Paweł Lipiec 22.12.08 | #

    Pokasuj 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ę :/
    Przypomina mi to początki mojej zabawy z kodem.
    Uprzedzam Cię – print czy echo wystarczy i jest czytelniej.

  4. klisiu 22.12.08 | #

    @Sajam: tak, jak mówiłem – ja z php zaczynam dopiero. ;-) dzięki za uwagę – zobaczymy, czy to poprawi szybkość działania kodu.

  5. Sajam 22.12.08 | #

    @klisiu, pewnie poprawi ;-]
    Nie chodzi już o sam czas wykonywania skryptu, bo to ułamki sekund, ale też o czytelność kodu. Sam powiedz, czy nie wygląda dziwnie 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óbowałem różnych dat i nic.

  8. klisiu 22.12.08 | #

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

    EDIT: a już widzę – zaraz poprawię. Przy edycji musiałem coś zmajstrować. :-?

  9. Sajam 22.12.08 | #

    Zapewniam Wam, że u mnie działa ;]

  10. klisiu 22.12.08 | #

    Dobra, znalazłem błąd. ;-)

  11. Szarex 22.12.08 | #

    Wcięcia za duże! :)

    Wystarczy 2-4 znaki.

  12. klisiu 22.12.08 | #

    @Szarex: przekopiowałem taby z TextMate’a. Przy publikacji następnego kodu zmienię 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 | #

    „Informacja: preg_match(), which uses a Perl-compatible regular expression syntax, is often a faster alternative to ereg(). „

  16. klisiu 22.12.08 | #

    @Tomasz Topa: wiem, eRIZ mi o tym napisał na jabberze. W wolnej chwili przerobię skrypt.

  17. Ravicious 22.12.08 | #

    Napisał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 czytelniejszy.
    Ale też nie rozumiem czemu w ogóle zastosowane wyrażenia regularne.
    A tak to oczywiście rozdzielenie warstw do poszczególnych plików polecam na przyszłość. Z tym CSS wklejonym to był hardcore ;)\

    Zamiast 2x powtarzać:

    zrobiłbym funkcję z argumentem.

  19. Seban 22.12.08 | #

    Nie znam PHP i właściwie nie chce znać, ale to mi śmierdzi spaghetti code.

  20. Maciej Płoński 22.12.08 | #

    Łukasz, oby tak dalej, czekam aż będziesz pracował na stanowisku ‘PHP Developer’ :P

  21. Maxik 22.12.08 | #

    Co Ty byś beze mnie zrobił? ;)

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

  22. Tomasz Topa 22.12.08 | #

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

    Maxik wygrywa dzisiejszy 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 dotychczasowego mojego życia. Ale obawiam się, że jak będę chciał za niecałe 30 lat sprawdzić – to nie zadziała. Dlaczego?

    Informacja: Poprawny zakres znacznika czasu to zwykle od piątku, 13 grudnia 1901 20:45:54 GMT (czasu Greenwich) do wtorku, 19 stycznia 2038 03:14:07 GMT. (Wartości te odpowiadają minimalnej i maksymalnej wartości 32-bitowej liczbie całkowitej ze znakiem)

    może więc następnym krokiem będzie sprawienie, że skrypt policzy dni nawet dla dat np. z 2100 roku?

    co ty na to? :)

  25. Krychaj 23.12.08 | #

    Fajne zadanie sobie wybrałeś, ja też zaczynam więc wiem jakie ciężkie są początki. A najcięższe z tego wszystkiego to samozaparcie i własna mobilizacja :)

  26. klisiu 26.12.08 | #

    @kambuz: niestety, ale nie mam za bardzo pomysłu na zastosowanie innej funkcji niż strtotime(). Jakaś wskazówka?

  27. macnow 26.12.08 | #

    A ja kiedyś… (na pierwszym semestrze) popełniłem takie coś…
    http://nopaste.com/p/aa3o5GX71

  28. [...] Chyba powinienem teraz wykorzystać te najdłuższe wakacje, jakie mi przysługują i wrócić do nauki PHP. Wtedy to dopiero wyjdzie jaki ze mnie n00b. [...]

  29. [...] momentu kiedy zacząłem pokazywać publicznie swój kod PHP minęło dość sporo czasu. Od grudnia praktycznie moja nauka PHP uległa wstrzymaniu ze [...]

Dodaj komentarz