Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sprawdzenie kodu
Forum PHP.pl > Forum > Przedszkole
crazy_programmer
Witam wszystkich. Dopiero raczkuję w PHP ale ostro wziąłem się do pracy i się uczę. Możecie mi powiedzieć czy ten kod jest poprawny pod względem składniowym i estetycznym?
  1. <?php
  2.  
  3. //Zmienne, które będą przechowywać dane z formularza
  4. $opony = $_POST['iloscopon'];
  5. $swiece = $_POST['iloscswiec'];
  6. $olej = $_POST['iloscoleju'];
  7. $ulica = $_POST['ulica_klienta'];
  8. $mieszkanie_numer = $_POST['numer_mieszkania_klienta'];
  9. $miasto = $_POST['miasto_klienta'];
  10. $plik_zamowienia = $_SERVER['DOCUMENT_ROOT'];
  11.  
  12. //Utworzenie dodatkowych zmiennych i stałych
  13. $ilosc = 0;
  14. $cena_netto = 0.00;
  15. $centa_brutto = 0.00;
  16. $podatek_vat = 0.22;
  17. $data = date('H:ia, dS, F.');
  18. $adres = 'Ulica: '.$ulica."\t".'Numer Mieszkania: '.$mieszkanie_numer."\t".'Miasto: '.$miasto;
  19.  
  20. define('CENAOPON', 200);
  21. define('CENASWIEC', 75.98);
  22. define('CENAOLEJU', 123.54);
  23.  
  24. //Obliczenie wartości zamówienia i ilości zakupionych przedmiotów
  25. $ilosc = $opony + $swiece + $olej;
  26.  
  27. $cena_netto = $opony * CENAOPON +
  28. $swiece * CENASWIEC +
  29. $olej * CENAOLEJU;
  30.  
  31. $cena_brutto = $cena_netto * (1 + $podatek_vat);
  32.  
  33. //Odczytywanie i zapisywanie danych do pliku
  34. @ $wskaznik_pliku = fopen("$plik_zamowienia/zamowienia.txt", 'ab');
  35. if($ilosc > 0)
  36. {
  37. $ciag_wyjsciowy = $data."\t".$opony." opon\t".$swiece." świec zapłonowych\t".$olej." butelek oleju\t".$cena_netto."PLN\t".$cena_brutto."PLN\t".$adres."\r\n";
  38.  
  39. @ $zapis_do_pliku = fwrite($wskaznik_pliku, $ciag_wyjsciowy, strlen($ciag_wyjsciowy));
  40.  
  41. @ $zamkniecie_pliku = fclose($wskaznik_pliku);
  42. }
  43. //Wyświetlenie wyników zamówienia
  44. echo '<h1>Części Samochodowe Janka</h1>'."\n".'<br />'."\n".'<hr />'."\n";
  45.  
  46.  
  47. if($ilosc > 0 && $wskaznik_pliku == TRUE)
  48. {
  49. echo '<h2>Wyniki Zamówienia</h2>';
  50. echo '<hr />';
  51. }
  52.  
  53.  
  54. if($opony > 0 && $wskaznik_pliku == TRUE)
  55. {
  56. echo '<p>Ilość Opon: '.$opony.'</p>';
  57. }
  58.  
  59.  
  60. if($swiece > 0 && $wskaznik_pliku == TRUE)
  61. {
  62. echo '<p>Ilość Świec: '.$swiece.'</p>';
  63. }
  64.  
  65.  
  66. if($olej > 0 && $wskaznik_pliku == TRUE)
  67. {
  68. echo '<p>Ilość Oleju: '.$olej.'</p>';
  69. }
  70.  
  71.  
  72. if($ilosc > 0 && $wskaznik_pliku == TRUE)
  73. {
  74. echo '<p>Ilość Produktów: '.$ilosc.'</p>';
  75. echo '<hr />';
  76. echo '<p>Cena Netto: '.number_format($cena_netto, 2).'</p>';
  77. echo '<p>Cena Brutto: '.number_format($cena_brutto, 2).'</p>';
  78. echo '<hr />';
  79. echo '<p>Twoje zamówienie zostało przyjęte i zapisane w anszej bazie o godzinie: '.date('H:ia, dS, F.').' W ciągu 7 dni roboczych powinieneś otrzymać zamówiony/e towar/y. Dziękujemy za skorzystanie z usług z naszego sklepu</p>';
  80. }
  81.  
  82.  
  83. if($ilosc == 0 && $wskaznik_pliku == TRUE)
  84. {
  85. echo '<h1>Na poprzedniej stronie nie zostało złożone żadne zamówienie</h1>';
  86. }
  87.  
  88. if(!$wskaznik_pliku || !$zapis_do_pliku || !$zamkniecie_pliku)
  89. {
  90. echo '<p><b>Przepraszamy lecz państwa zamówienie nie może zostać przyjęte w danej chwili</b></p>'."\n".'</body>'."\n".'</html>';
  91. }
  92. ?>
sadistic_son
1) Zamiast @ przed otwieraniem i zapisem do pliku lepiej zrób jakąś obsługę błędów.
2) Zamiast == TRUE stosuj lepiej === TRUE
3) Zamiast exit w przypadku niepowodzenia zastosowałbym cofnięcie do poprzedniej strony.

A tak to wszystko raczej ok.

PS. W tym zdaniu Przepraszamy lecz państwa zamówienie nie może(...) powinien być przecinek: Przepraszamy, lecz(...).
crazy_programmer
Dzięki za odpowiedź i wytknięcie mi błędów smile.gif
sadistic_son
To nie tyle co błędy a raczej drobne niedociągnięcia.
W linijce 79 masz literówkę. Popraw anszej na naszej. A jak już mamy być super dokładni to po dacie, czyli przed W ciągu 7 dni roboczych(...) powinna być kropka wink.gif
worek
Idąc za przykłądem sadistic sona walnij 100 znaków równości żeby parser wiedział o co ci chodzi. Trzy znaki równości używa się jeżeli są zmienne tego samego typu; czyli np liczba-liczba, tekst-tekst, ciąg znakowy-ciąg znakowy trzy znaki równości interpretuje tylko do wersji pHP 4. Do widzenia...

Ps.trzy znaki = to jeden bit więcej, a to szkodzi stronie skoro goooooooogle patrzy na szybkość wczytywania się strony. Jeżeli stosowałby to w całym kodzie to sobie policz ile więcej zajmują pliki wyjściowe.

Na zakończenie mój cytat:"Jeżeli myślisz, że to zbyt proste zrób to, inni będą się z ciebie śmiać dopóki nie uświadomią sobie swojego błędu"
nospor
worek widzę masz ostatnio fazę gadania od rzeczy....

Cytat
Idąc za przykłądem sadistic sona walnij 100 znaków równości żeby parser wiedział o co ci chodzi
ałć x 1
Cytat
Ps.trzy znaki = to jeden bit więcej, a to szkodzi stronie skoro goooooooogle patrzy na szybkość wczytywania się strony
ałć x 2
Cytat
trzy znaki równości interpretuje tylko do wersji pHP 4. Do widzenia...
ałć x 3

@crazy_programmer dla własnego dobra przyjmij, że w tym temacie nie pisał worek.


Cytat
Na zakończenie mój cytat:"Jeżeli myślisz, że to zbyt proste zrób to, inni będą się z ciebie śmiać dopóki nie uświadomią sobie swojego błędu"
cytat roku. Ja mam kolejny, mój:
jeśli myślisz, że 2+2 = 4, napisz to. Inni będą się z Ciebie śmiać dopóki nie uświadomią sobie swojego błędu

Cytat
2) Zamiast == TRUE stosuj lepiej === TRUE

@sadistic_son ale patrz co on przyrównuje. On przyrównuje wynik fopen do true. a fopen zwraca resource, wiec resource === true da fałsz

w tym przypadku, jeśli chcesz używać 3 znaków porównania to powinno być !== false

W ogóle cały ten kod:
  1. if($ilosc > 0 && $wskaznik_pliku == TRUE)
  2. if($opony > 0 && $wskaznik_pliku == TRUE)
  3. if($swiece > 0 && $wskaznik_pliku == TRUE)
  4. if($olej > 0 && $wskaznik_pliku == TRUE)
  5. if($ilosc > 0 && $wskaznik_pliku == TRUE)

Lepiej zapisać poprostu tak:
  1. if ($wskaznik_pliku){
  2. if($ilosc > 0)
  3. if($opony > 0)
  4. if($swiece > 0)
  5. if($olej > 0)
  6. if($ilosc > 0)
  7. }

krócej i czytelniej i mniej sprawdzania
thek
Hmmm... Moim zdaniem mozna by mocniej rozdzielić struktury danych skryptu oraz logikę od widoku. Czemu?
  1. if($olej > 0 && $wskaznik_pliku == TRUE) {
  2. echo '<p>Ilość Oleju: '.$olej.'</p>';
  3. }
W chwili gdy nie ma wysłanych danych postem to do $olej niejawnie zostanie przypisane zero, a dostaniesz zapewne przy okazji warning, że iloscoleju w zmiennej POST nie istnieje (klasyczny index undefined)

Do tego pomyślałbym nad VAT, bonieważ obecny sposób narzuca jeden wszystkim produktom, co nie musi być prawdą. Dla każdego powinieneś mieć możliwość nadania osobno.

Zrób sobie strukturę (obiekt lub tablicę), gdzie masz domyślne wartości pól i w razie istnienia zmiennych w POST, zmień je. Dzięki temu będziesz mógł połaczyć strone formularza oraz informacyjną zamówienia w jedną. Co sprawi, że błędy bedziesz mógł pod danym polem zamieścić do poprawki zamiast kazać mu się cofać do formularza by poprawić byki, a dodatkowo złożenie jednego zamówienia pozwoli bez przechodzenia znowu do strony formularza złożyc kolejne. Im mniej klikania tym dla usera lepiej i wygodniej. Worka nie słuchaj, bo jego rady faktycznie są takie, jakby urwał się z choinki smile.gif Skomentuję tylko jedno dodatkowo, to co nospor opatrzył jako "ałć x 2": jak myślisz... porównanie zgodności typów będzie szybsze czy wolniejsze od niejawnej konwersji z jednego do innego i ponowne porównanie? wink.gif

Jeśli połączysz obie strony (tj. formularz i informacyjną), to generowanie strony na samym końcu, a całe działania wrzuć do "jednego worka", przed tworzeniem strony jako html.

Poza tym uwzględniając poprawki nospora do tego co napisał sadistic_son i moje sugestie, myślę że powinna Ci się w miarę wszystko już rozjaśnić i ponownie cytując nospora... Nie słuchaj worka, a co więcej to z jego rad możesz sie pośmiać, co zresztą ciutkę wyżej chyba Ci wykazałem na drugim przykładzie wytknietym przez nospora.
crazy_programmer
Tak jak już ktoś napisał dając "Zamiast == TRUE stosuj lepiej === TRUE", skrypt nie będzie działał poprawnie sad.gif Dzięki wszystkim za podpowiedzi. Dopeiro się uczę więc jeszcze wszystkiego nie ogarniam i trochę czasu minie zanim napiszę czysty kod smile.gif Co do worka to faktycznie jego rady są śmieszne jak i cały on tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.