![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Jestem trochę początkujący w PHP, ale trochę czytam, nawet troszkę w Symfony zacząłem się bawić. Chciałbym pokazać wam mój skrypt, który służy do wyświetlania i filtracji ofert pracy z bazy danych. Do wyboru są pola: nazwa branży, rodzaj umowy, lokalizacja. Chciałbym poznać waszą opinię na jego temat, co jest źle || czego za dużo || czego za mało || jakie rozwiązania są lepsze od zastosowanego, itd. Wszystkie hejty mile widziane (IMG:style_emoticons/default/smile.gif) Oto kod: http://pastebin.com/G9eu90d2 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Na początek postaraj się oddzielic logikę od wyświetlania, na górze pliku sprawdź sobie $_GET, pobierz dane itp. a na dole korzystaj już z gotowych danych i tylko wyświetlaj.
Nie łącz się z bazą danych kilka razy - wystarczy raz. Symfony jest trochę ciężkie dla początkującego, może zacznij od CodeIgniter bo chyba jest najłatwiejszy. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie zaczynaj od żadnych code igniterów ani innych przestarzałych narzędzi, bo za 2 lata będziesz żałował straconego czasu. Symfony jest trudne? Od kiedy? Przecież na początku nie będzie pisał publicznych bundli i nie musi nic wiedzieć o "bebechach" symfony jak extensiony i compile passy. Moim zdaniem im szybciej zaczniesz poznawać profesjonalne rozwiązania tym lepiej. Zend też jest ok (oczywiście wersja 2) ale jak dla mnie zbyt sformalizowany. Symfony wbrew pozorom jest lekkie, tylko żeby dojść do takiego wniosku trzeba je dobrze poznać (ta potęga DI i service containera).
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Właśnie próbuję odchudzić ten kod. Chciałem zrobić to na switchu ale mając 3x3 możliwości z GET chyba się to mija z celem. Takie coś nie działa:
A co myślicie o kursach Symfony2 z Eduweb? Ktoś miał może z nimi styczność? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Trochę to bez sensu..
1. Zmień name w input dla tych 3 elementów na : where[b.nazwa_branzy], where[l.lokalizacja] i where[i.rodzaj_umowy] Potem puste wartości zmień na puste a nie jakieś ------ w kodzie Kod foreach($_POST['where'] as $key => $val) { var_dump($key, $val); } i dalej to już tylko doklejaj warunki. Ten post edytował Pyton_000 27.01.2016, 16:05:40 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Tak, jak napisał Pyton, wartości --- zmień na puste stringi.
Tak na szybko, nie testowałem, pewnie są błędy:
|
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Kurczę, słabo na razie to pojmuję, ale widzę tutaj możliwość zrobienia fajnego, dynamicznego zapytania (IMG:style_emoticons/default/smile.gif) Już próbuje to ogarnąć (IMG:style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dynamiczne zapytania realizuje się za pomocą wzorca budowniczy. Dobry przykład to Doctrine DBAL. Wbrew pozorom takie rzeźbienie czystego SQL na podstawie tablic może być trudniejsze, niż użycie jakiejś biblioteki, przynajmniej wygląda fatalnie.
Edit: Tak konkretnie to chodziło mi o Query Builder z DBALa. Ten post edytował lukaskolista 27.01.2016, 19:23:45 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem coś takiego, na razie na jednej zmiennej, żeby sobie nie namieszać. O dziwo działa (IMG:style_emoticons/default/smile.gif) Ale powiedzcie mi jeszcze... Jak to teraz zbindować(IMG:style_emoticons/default/questionmark.gif) Bo aż się prosi o SQL Injection?
Kod:
|
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Normalnie, zamiast jednej tablicy tworzysz dwie
nie: $wh[] = "b.nazwa_branzy = '{$_GET['nazwa']}'"; a: $wh[] = "b.nazwa_branzy = ?"; $params[]={$_GET['nazwa']}; Druga tablica pojdzie do bindowania |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Cytat $wh[] = "b.nazwa_branzy = ?"; $params[]={$_GET['nazwa']}; Nie wiem czy dobrze rozumuję. Chodzi o coś takiego?:
(IMG:style_emoticons/default/questionmark.gif) ? Ten post edytował Panicz74 28.01.2016, 02:32:15 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Przeanalizuj mój post z tego tematu: http://forum.php.pl/index.php?s=&showt...t&p=1182715
Tam na końcu masz wywołanie metody execute($params), gdzie zgodnie z dokumentacją execute jako 1 argument podajesz tablicę parametrów. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Ok. W miarę załapałem o co chodzi. Faktycznie trochę mniej tego kodu teraz. Warto pytać. Ale zastanawia mnie teraz jak zbudować dobrze 2 z 3 parametrów bindValue.
Takie coś nie przechodzi:
Kod po zmianach:
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 39 Pomógł: 1 Dołączył: 28.08.2015 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym to dobrze zrozumieć. Rozumiem, że teraz parametry są bindowane. Ale skąd execute wie, że mają być bindowane jako string?
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 872 Pomógł: 94 Dołączył: 31.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Bo są typu string. Jak będą intami, to będą bindowane jako inty. Skąd dokładnie wie? Nie chce mi się patrzeć w źródła, pewnie są tam jakieś ify.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 13:25 |