![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam problem z połączeniem dwóch tabel których budowa przedstawia się następująco: -- wpisy id | user_id | tekst | ----------------------- 1 | 2 | xxxx | 2 | 22 | yyyy | -- users user_id | znajomy_user_id | ----------------------- 1 | 22 | 2 | 2 | Chcę wyświetlić dane z tabeli wpisy gdzie user_id = np 2 oraz dane z tabeli wpisy gdzie user_id = znajomy_user_id (pisząc 'słownie' aby wyświetlone zostały dane z tabeli wpisy określonego użytkownika oraz jego znajomych... Stworzyłem poniższą komendę ale nie wyświetla tego czego chce....
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
wydaję mi się, że coś pomieszałeś z tą logiką
Cytat aby wyświetlone zostały dane z tabeli wpisy określonego użytkownika oraz jego znajomych no bo jeżeli pobierasz rekordy gdzie user_id = znajomy_user_id = 2 to wychodzi na to, że użytkownik jest sam swoim znajomym, czyli coś nie tak, chyba chciałeś pobrać wszystkie wpisy gdzie users.user_id = 2 oraz dla wszystkich ID users.znajomy_user_id przypisanych do users.user_id = 2. najprościej będzie zrobić to w 2 zapytaniach : 1. pobrać wszystkie ID znajomych oraz ID użytkownika 2. pobrać wszystkie wpisy dla nich możesz też pokombinować z podzapytaniami |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
Twoja propozycja jest interesująca ale w jaki sposób wykonać te dwa zapytania? (jak byś to kruciutko zobrazował to był bym wdzięczny bo trochę nie chwytam...)
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
ciężko podać precyzyjną odpowiedź bo nie wiem co dokładnie chcesz uzyskać, jak wyświetlić itd, bo sytuacje mogą być różne
ale założę, że jesteś na podstronie użytkownika, jego ID pobieramy z url, i chcemy pobrać jego wpisy oraz wpisy użytkownika UWAGA, to co Ci podałem to nie jest działający przykład, tylko takie mniej więcej zobrazowanie mechanizmu, musisz to przeanalizować i napisać skrypt na podstawie tego, pamiętaj też, że jak odbierasz zmienne z $_GET, $_POST itd, to zanim wstawisz do zapytania przepuszczasz przez mysql_real_escape_string();
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Dodam jeszcze, że dane przekazywane metodą $_GET lub $_POST powinno się przefiltrować (najlepiej określić max. długość (za pomocą PHP - nie HTML), wykluczyć znaki, które nie powinny się tam znaleźć itp... wszystko zależy od tego jaki efekt chcesz uzyskać).
Funkcja mysql_real_escape_string czasem nie wystarcza (jeśli chcesz mieć pewność, że skrypt jest bezpieczny)... Pozdrawiam. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Funkcja mysql_real_escape_string czasem nie wystarcza (jeśli chcesz mieć pewność, że skrypt jest bezpieczny)... a mógłbyś podać przykład? albo wskazać źródło tej informacji? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
mysql_real_escape_string zaslashuje wszystkie znaki ' więc nie będzie można wprowadzić łańcuchów bezpośrednio do zapytania.
Za to można bez przeszkód wstawiać liczby i ciągi nie zawierające '. np. Dla zapytania typu:
Można to obejść (przy zabezpieczeniach) takim sposobem: w polu id:
Można używać funkcji concat i char do wprowadzania ciągów do rekordów Przed XSS także nie chroni w 100%, ponieważ np. Podsumowując: W przypadku PHP jeżeli wiemy, że argument to liczba to stosujemy intval() jeżeli nie to addslashes. Jeżeli mamy coś wyrafinowanego to stosujemy ereg i wyrażenia regularne. Wniosek: FILTRUJEMY DANE. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
z Xss się zgodzę, ale zagrożenie przed Xss nie grozi w przypadku, który tu omawiamy, a wiadomo, że w przypadku treści otrzymywanych od użytkownika, dane trzeba odpowiednio obrobić przed wprowadzaniem do bazy, obcinamy cały kod html zostawiamy tylko bbcode, tutaj wystarczy proste sprawdzenie np. is_int() albo $user_id = (int) $_GET['id'];.
Co do tego injection, to testowałeś to? czy podałeś taki teoretyczny przykład? bo zauważ, że zapytanie wygląda tak ( z apostrofami)
więc samo wstawienie 0 OR 1=1, spowoduje taki wynik:
więc nic się nie stanie //ale oczywiście z myślą przewodnią masz racje, nigdy nie można ufać użytkownikowi i trzeba każdą zmienną przefiltrować Ten post edytował tehaha 22.12.2010, 13:48:51 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
wszystko ładnie wyświetla ale nieraz musi być jakieś ale (IMG:style_emoticons/default/winksmiley.jpg) zapytanie do bazy dubluje mi wpis głównego użytkownika tyle razy ile ma znajomych (nie wiem jak takie cudo się zrobiło...) czyli mam np. id 1 z bazy wpisy wyświetlony 3x jeżeli użytkownik ma 3 znajomych...
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Są i tacy, którzy o ' ' zapominają, a ponieważ nie wyświetla się to jako błąd uważają, że wszystko jest ok.
Tak jak powiedziałem; jeśli nie byłoby ' ' to SQL Injection byłby jak najbardziej możliwy do wykonania... (IMG:style_emoticons/default/smile.gif) Fakt, nie tyczy się to omawianego przykładu ale warto wspomnieć ^^ Pozdrawiam. (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
zapytanie do bazy dubluje mi wpis głównego użytkownika tyle razy ile ma znajomych za pierwszą petlą while() wstaw to usunie zdublowane wartości z tablicy Cytat Są i tacy, którzy o ' ' zapominają, a ponieważ nie wyświetla się to jako błąd uważają, że wszystko jest ok. no to prawda, są i tacy, którzy w ogóle nie wiedzą, że coś trzeba filtrować, no ale to niestety efekt tego, że w wielu kursach nie pisze się o bezpieczeństwie, a nawet w książkach dla początkujących nie wiele jest o zabezpieczeniach albo i wcale nie ma
Ten post edytował tehaha 22.12.2010, 14:23:33 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
tablica była w porządku, zapytanie do bazy danych skróciłem do:
Ale mimo to wielkie dzięki tehaha - mam kolejne polecenie do mojego słownika mysql - IN (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) ![]() ![]() |
Cytat no to prawda, są i tacy, którzy w ogóle nie wiedzą, że coś trzeba filtrować, no ale to niestety efekt tego, że w wielu kursach nie pisze się o bezpieczeństwie, a nawet w książkach dla początkujących nie wiele jest o zabezpieczeniach albo i wcale nie ma Trochę beznadziejnie, ponieważ taki początkujący od pierwszej strony uczy się złych (najczęściej przestarzałych) nawyków. Tak właściwie, to książki są dobre ale tylko pod tym względem, że łatwo można odszukać definicję jakiejś funkcji. Mówię jakiejś, ponieważ często początkujący nie pamiętają ich nazw przez co znalezienie w manualu przysparza nie lada problemów (IMG:style_emoticons/default/biggrin.gif) Książka to takie `zgromadzenie` tych instrukcji/funkcji, które zawiera definicję, prototyp i krótki, wybrakowany przykład (IMG:style_emoticons/default/haha.gif) Można brać z nich przykład na samym początku, lecz nie korzystać z zamieszczonych tam gotowców (IMG:style_emoticons/default/smile.gif) Wszystko wystarczy zrozumieć, a w razie jakichkolwiek wątpliwości można poprosić kolegów z forum.php.pl o niewielką pomoc ^^ EDIT: @JamalBIG Może Cię to zaciekawi (IMG:style_emoticons/default/winksmiley.jpg) http://www.eioba.pl/a2190/podstawy_tworzen...apyta_sql_mysql Ten post edytował modern-web 22.12.2010, 14:38:03 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 496 Pomógł: 1 Dołączył: 16.01.2008 Skąd: Świnoujście Ostrzeżenie: (0%) ![]() ![]() |
dzięki @modern-web - na pewno się przyda, choćby dla kilku mniej mi znanych poleceń (IMG:style_emoticons/default/winksmiley.jpg)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 18:18 |