Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [www] [skrypt] biblioteka filmów dla programu XBMC
Regss
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Witam! Napisałem swój pierwszy pełny skrypt pomijając oczywiście wcześniejsze zabawy w pisanie krótkich kodów php na 50 linijek. Próbowałem stosować się do wszystkich standardów php, html, css.

Skrypt skierowany jest dla posiadaczy domowego kina multimedialnego opartego o program XBMC i posiadanej bazy filmów. Ma on za zadanie parsować pliki xml dostarczone z tegoż programu wraz z grafiką, uporządkować je w bazie danych i wyświetlić ładnie wyglądającą prezentację.

Proszę Was o uwagi odnośnie samego skryptu bo to jest dla mnie najważniejsze aby na początku oduczyć się złych nawyków i zdobywać poprawną wiedzę w pisaniu w php. Oczywiście na temat wyglądu uwagi też mile widziane.

strona główna:
http://regss.sk1.pl/test/index.php

strona panelu administratora:
http://regss.sk1.pl/test/panel.php

hasło do panelu: test

Śmiało można usuwać, dodawać, importować. (celowo na potrzeby testów wyłączyłem usuwanie plików po udanym imporcie).

A oto kod źródłowy:

google code

paczka z kodem: ZIP

Pozdrawiam.

Ten post edytował Regss 29.12.2011, 22:29:16
Go to the top of the page
+Quote Post
!*!
post
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Nieźle, tylko jak już używasz html5, to używaj tagów jakie daje, a nie pakujesz wszytko w div, umieść też ten kod JS w osobnym pliku.
Jak zmieniasz film, to tło jest ładowane tzn widać to. Zrób to tak, aby było już w cache przeglądarki i pokazywało się jako fade?
Go to the top of the page
+Quote Post
Shili
post
Post #3





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


1) config.php wygląda jak WYMAGANY plik (w końcu bez configu raczej strona nie pójdzie). Czemu to jest dołączane za pomocą include a nie require?

2) function.php to nie jest dobra nazwa

3) Gdybyś skorzystał z np. Doxygena do komentarzy, to miałbyś już dokumentację projektu.

login.php
  1. unset($_SESSION['id']);

Pierwsze unset jest zbędne.

  1. // Logout
  2. if (isset($_GET['logout'])) {
  3. unset($_SESSION['id']);
  4. header('location:index.php');
  5. }
  6.  
  7. // Login panel
  8. if (!isset($_POST['pass'])) {
  9. $content_output = '<form action="login.php" method="POST">' . $lang['l_panel_pass'] . ':<br/><input id="l_pass" name="pass" type="password" /></form>';
  10. } else {
  11. if ($_POST['pass'] === $panel_pass) {
  12. $_SESSION['id'] = md5($_SERVER['REMOTE_ADDR']) . md5($panel_pass);
  13. header('location: panel.php');
  14. } else {
  15. $content_output = $lang['l_panel_wrong'] . '. <a href="login.php">' . $lang['l_panel_again'] . '</a>';
  16. }
  17. }

W bloku login panel dałabym elseif - aktualnie sprawdza isset($_GET['logout']), a potem zawsze sprawdza !isset($_POST['pass']), a podejrzewam, że te dwie rzeczy wykluczają się.

config.php
Zabrakło mi zmiennej configuracyjnej ustalającej port do bazy. Jasne, można wepchnąć w host, natomiast lepiej IMO byłoby rozdzielić.

  1. $perPage = 30; // Movies per page, If you do not want to have pagination, type a larger number than the number of movies

If you do not want to have a pagination type 0 - standardowo 0 znosi wszelkie limity

  1. * Don't edit nothing below this line!#

Do not edit anything...
Podwójne zaprzeczenie nie istnieje w angielskim (IMG:style_emoticons/default/smile.gif)

panel.php

  1. if ($_GET['option'] == 'del_all') {
  2. $content_output = delete_table($table_name, $lang);
  3. }
  4. if ($_GET['option'] == 'create_new') {
  5. $content_output = create_table($table_name, $lang);
  6. }
  7. if ($_GET['option'] == 'xml_file_info') {
  8. $content_output = xml_file_info($xml_file, $lang, $detect_encoding);
  9. }
  10. if ($_GET['option'] == 'nfo_file_info') {
  11. $content_output = nfo_file_info($table_name, $lang, $detect_encoding);
  12. }
  13. if ($_GET['option'] == 'xml_import') {
  14. $content_output = import_xml($xml_file, $table_name, $lang, $detect_encoding);
  15. }
  16. if ($_GET['option'] == 'clear_cache') {
  17. $content_output = clear_cache($lang);
  18. }
Aż się prosi o switch zamiast if.
Nie mówiąc już o tym, że chyba bardzo nie lubisz else. Jeśli $_GET['option'] będzie równe del_all, to skrypt zrobi sprawdzenie wszystkiego, mimo że dopasował się do pierwszego warunku. A warunki są rozłączne.

  1. $sql_movies = 'SELECT id FROM ' . $table_name;
  2. $result_movies = mysql_query($sql_movies);
  3. $table_rows = '<span class="green">' . mysql_num_rows($result_movies) . '</span>';

SELECT COUNT(id)
mysql_num_rows jest przydatne wtedy, gdy odpalasz normalne zapytanie i dodatkowo chcesz policzyć ile elementów zwróciło;
Jeśli zależy Ci tylko na liczbie - COUNT jest bardziej wydajne.

index.php
  1. if ((!mysql_query('SELECT id FROM ' . $table_name . ' LIMIT 1')) or (mysql_num_rows(mysql_query('SELECT id FROM ' . $table_name . ' LIMIT 1')) < 1)) {
  2. header('Location: panel.php');
  3. }
  4.  
  5. // sets the variables
  6. if (!isset($_GET['id'])) {
  7. $id_result = mysql_query('SELECT id FROM ' . $table_name . ' LIMIT 1');

Trzy razy wykona się pobieranie toczka w toczkę tego samego zapytania.
Co prawda podejrzewam, że danych w bazie będzie bardzo niewiele, natomiast jest to zły nawyk.
Zrób mysql_query raz przed tymi wszystkimi ifami.

Zastanawiam się również czy koniecznie potrzebujesz regexpów w zapytaniach:
  1. $genre_mysql = $val;

Gdzie val wydaje się pochodzić z zapytania z tabeli dotyczącej gatunków filmów. Na szybki rzut oka nie ma tam nic dotyczącego konieczności użycia regexpa. Like mysqlowy, mimo że tragicznie wolny jest dużo szybszy od regexpów.

To tak ogólnie. Na pierwszy rzut oka. Mam nadzieję, że co nieco Ci się z tego przyda.
Go to the top of the page
+Quote Post
Regss
post
Post #4





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Na początku chciałem podziękować za poświęcony czas i analizę kodu. Na pewno porady bardzo się przydadzą, zabieram się do usprawniania kodu. Po przeanalizowaniu każdej sugestii pozostaje mi zgodzić się ze wszystkimi, muszę podszlifować jeszcze logiczne myślenie. Nawet mały kurs języka angielskiego mi się trafił.

Co do regexp przeczytałem gdzieś, że jest szybszy i dlatego go stosowałem okazuje się jednak, że nie zawsze jest to dobre wyjście.

Dlaczego nazwa funcion.php to zły pomysł?

!*!, chodzi Ci o to aby wywalić divy tam gdzie to możliwe i stosować same tagi np. <img> i opisywać je w css?

Pozdrawiam.

Ten post edytował Regss 30.12.2011, 21:07:34
Go to the top of the page
+Quote Post
IceManSpy
post
Post #5





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(Regss @ 30.12.2011, 20:54:01 ) *
Dlaczego nazwa funcion.php to zły pomysł?

Nie określa do czego służy plik. Już lepiej jakbyś miał np podział na user_function, film_function i w każdym pliku kod odpowiedzialny za wykonywanie operacji na użytkowniku lub filmie.
Zmniejszy to też rozmiar ładowanego pliku (lepiej wczytać 1 potrzebny plik o wadze np 3 KB niż 1 o wadze 20 KB zawierającym wszystkie funkcje).
Ryzykiem takiego podziału jest nadpisywanie funkcji, więc może lepiej zainteresuj się OOP.
Go to the top of the page
+Quote Post
Korab
post
Post #6





Grupa: Zarejestrowani
Postów: 202
Pomógł: 36
Dołączył: 10.06.2011
Skąd: Dokąd

Ostrzeżenie: (0%)
-----


Cytat
Do not edit anything...

A to nie jest tak, że "Do not edit nothing" byłoby błędne, a "Do not edit anything" jest poprawne?
Go to the top of the page
+Quote Post
Regss
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


"Do not edit anything" jest poprawnie.
Go to the top of the page
+Quote Post
!*!
post
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat(Regss @ 30.12.2011, 20:54:01 ) *
!*!, chodzi Ci o to aby wywalić divy tam gdzie to możliwe i stosować same tagi np. <img> i opisywać je w css?


Nie. IMG służy do obrazu i nie jest nowością w HTML5. Resztę tak, wywal div, użyj <header, section, nav i aside>. Opisz i dziedzicz je w CSS.
Go to the top of the page
+Quote Post
Regss
post
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 7.05.2006

Ostrzeżenie: (0%)
-----


Cytat(!*! @ 31.12.2011, 11:06:47 ) *
Nie. IMG służy do obrazu i nie jest nowością w HTML5. Resztę tak, wywal div, użyj <header, section, nav i aside>. Opisz i dziedzicz je w CSS.


Właśnie spróbowałem, zapomniałem że html5 ma nowe tagi jednak czy nie będzie wtedy problemu ze starszymi przeglądarkami? IE w trybie zgodności robi sieczkę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 09:30