![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Mam problem z warunkiem spawdzającym uprawnienia użytkownika do wykonania funkcji usunięcia zamówienia, który ma realizować poniższy kod:
Na początku sprawdzam czy funkcja została "nakarmiona" numerem id zamówienia (order_id) a później czy zalogowany użytkownik jest adminem ($_SESSION['user_type'] == 1) albo czy jest autorem kasowanego zamówienia ($_SESSION['userid'] == $order['user_id']). Jeżeli któryś z tych warunków jest prawdziwy funkcja powinna przejść dalej. W moim przypadku mimo tego warunku użytkownik albo kasuje wszystko albo admin nie może kasować. Nie wiem co jest przyczyną takiego działania. Czy ktoś może mi wytłumaczyć co robię źle? Pozdrawiam Ten post edytował Adym 8.02.2021, 10:25:58 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Nigdzie w tej funkcji nie widze by $order byla ustawiana. Zmienne w magiczny sposob nie pojawiaja sie w funkcjach.
Tak ciezko sprawdzic przy uzyciu VAR_DUMP czy zmienne zawieraja to co myslisz ze zawieraja? Tak ciezko wlaczyc wyswietlanie wszystkich bledow by na ekranie tudziez w logach zobaczyc od razu co jest nie tak? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
A swoją drogą, dlaczego nie masz pozakładanych relacji pomiędzy tabelą orderTable, a orderProductsTable oraz orderRelationsTable? Wystarczyłoby wtedy usuwać wyłączenie rekord z tabeli orderTable.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
@Nospor, nie bez przyczyny piszę w dziale przedszkole. Proszę więc się nie spinać. Sprawdzę co mi ten var_dump wyrzuca (nie znałem go wcześniej).
@trueblue masz rację, rzeczywiście mogę tak zrobić. Ten post edytował Adym 8.02.2021, 12:37:18 |
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Sie nie spinam. Tez kiedys zaczynalem. Jednak zamiast leciec na forum z kazda pierda, najpierw sam sprawdzalem co zawieraja zmienne. Znajomosc var_dump jest ti nie potrzebna. moze byc zwykle ECHO czy PRINT.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 324 Pomógł: 52 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Nigdzie w tej funkcji nie widze by $order byla ustawiana. Zmienne w magiczny sposob nie pojawiaja sie w funkcjach. Chyba, że to jest OOP i $this->order_id to jakaś właściwość klasy, bo jeszcze to public function... edit: error mihi @nospor, bo świtało już, jak się kładłem, ale to nie zienia faktu, że to wycinek jakiejś klasy, dziwny trochę u człowieka który początkuje jak sam pisze (IMG:style_emoticons/default/smile.gif) Ten post edytował gino 8.02.2021, 13:27:50 |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
gino ja mowilem o zmiennej $order a nie $this->order_id. Wyraznie napisalem (IMG:style_emoticons/default/tongue.gif)
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
Tak jak małe dziecko uczy sie mówić naśladując zasłyszane słowa od rodziców tak ja uczę się php wykorzystując fragmenty kodu bardziej doświadczonych kolegów.
Rzeczywiście nie mam z czym porównywać drugiego warunku. Pytanie czy lepiej zrobić teraz zapytanie do bazy i przez SELECTa pobrać user_id autora danego zapotrzebowania (mając order_id) i porównać czy jest on taki sam jak zalogowanego użytkownika czy też jest jakieś inne prostsze rozwiązanie? |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Tak jak małe dziecko uczy sie mówić naśladując zasłyszane słowa od rodziców tak ja uczę się php wykorzystując fragmenty kodu bardziej doświadczonych kolegów. Tylko ze male dziecko, z racji faktu ze nie ma wybory, to musi tak robic. Ty zdaje sie umiesz czytac i jakies podstawy wpierw bys mogl ogarnac sam, nie sadzisz? Skoro to $order gdzies tam przeciez masz, to nie mozesz go przekazac do funkcji delete() jako parametr? Ewentualnie jako wlasciwosc klasy na podobnej zasadzie co $this->order_id |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
Kliknięcie przycisku usuń wyzwala skrypt:
Potwierdzenie powoduje:
i jak tu wcisnąć jeszcze id autora zamówienia? Ten post edytował Adym 8.02.2021, 13:55:21 |
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Czyli jednak nigdzie nie masz rekordu $order calego. Z racji faktu ze w funkcji uzywales $order sadzilem ze jednak takowy masz. W takim wypadku musisz niestety pobrac go z bazy wpierw.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Warunek już działa (IMG:style_emoticons/default/smile.gif) . Rzeczywiście zmienna z którą porównywałem $_SESSION['userid'] nie była zdefiniowana. Trochę to trwało ale się udało i frustracja zamieniła się w satysfakcję (IMG:style_emoticons/default/smile.gif) . Czy coś jeszcze jest do poprawienia wg was?:
Ten post edytował Adym 10.02.2021, 12:41:57 |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cos do poprawy? Hm... wszystko?
Pomijajac fakt, ze mega mieszasz logike i odpowiedzialnosc klas, to: nie $order_id = htmlspecialchars(strip_tags($this->order_id)); a: $order_id = (int) $this->order_id); Id to liczba i jako liczba masz to przedstawiac a zadne inne bezsensowne filtrowania nie beda potrzebne. No i czemu do jednego zapytania to zabezpieczasz a do innego juz nie? Czemu w jednym bindujesz a w innym juz walisz jako string? nie == a === Jak juz zwracasz TRUE gdy sie powiedzie, to badz konsekwentny i zwracaj FALSE gdy sie nie powiedzie |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
Czy teraz lepiej czy coś jeszcze razi Cię w oczy (IMG:style_emoticons/default/wink.gif) ?
Ten post edytował Adym 10.02.2021, 13:01:53 |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
to jest zbedne
$order_id = $this->order_id; Dzialaja bezposrednio na $this->order_id return false leci tylko w okreslonym wypadku. Po drodze jest cala masa IFow, ktore nie zwracaja nic. Zamiast ten else co dodales, daj poprostu return false na samym koncu funkcji Unikaj zagniezdzen. Zamiast kobylastdego IF if($this->order_id) { ....... } daj tak if(!$this->order_id) { return false; } ...... |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 16.12.2020 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc NOSPOR. Zdaję sobie oczywiście sprawę, że kod można pewnie napisać lepiej, wydajniej, ładniej ale do tego będę dochodził małymi kroczkami.
Pozdrawiam! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 07:11 |