• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metoda PUT - problem z aktualizacją danych

Aruba Cloud - Virtual Private Server VPS
0 głosów
93 wizyt
pytanie zadane 26 stycznia w PHP przez Gamin Użytkownik (800 p.)

Cześć. Jeśli piszę bez ładu to przepraszam, ale siedzę nad tym już kilka godzin i nie mam już pomysłu z której strony to ugryźć (chociaż czuję, że rozwiązanie jest banalne). W dużym skrócie - wykładowca ma własny system do sprawdzania projektów API (ten jest do zarządzania budżetem), dane zwracane w postaci JSON, głównie przy metodach GET (testowany na wiele sposobów i nigdy nie było z nim problemów, więc to chyba w moim kodzie jest błąd). Jednym z zadań jest napisanie metody PUT według tego opisu: 

"PUT /api/categories/{id}/ - dokonuje całkowitej aktualizacji kategorii. Jeżeli nie ma kategorii o podanym id, zwróć kod 404 Not Found. W przeciwnym przypadku dokonaj takiej samej weryfikacji jak przy metodzie POST (z tymi samymi kodami błędów). Jeżeli wszystkie dane zostały podane, zaktualizuj rekord w bazie danych i zwróć kod 204 No Content."
Połączenie z bazą danych działa bez zarzutu, poprzednie zadania z GET, POST, DELETE nie wywołały błędów (w sensie testy wyszły pozytywnie i obsłużono 100% danych). Tym razem system podał informację zwrotną:
 

Wykonano zapytanie PUT /api/categories/9/ z poprawnymi danymi.
Odpowiedź powinna być oznaczona kodem 204. Zamiast tego zwrócono 400.
{"error":"Bad Request"}
Wykonano zapytanie PUT /api/categories/{id}/ z powtórzonym name.
Odpowiedź powinna być oznaczona kodem 409. Zamiast tego zwrócono 400.
{"error":"Bad Request"} 

Testy PUT /api/categories/{id}/ zakończono. Uzyskano skuteczność: 67%

 

Baza danych:

CREATE DATABASE IF NOT EXISTS exampledb;
USE exampledb;

CREATE TABLE IF NOT EXISTS categories (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  color VARCHAR(7) NOT NULL
);

CREATE TABLE IF NOT EXISTS transactions (
  id INT AUTO_INCREMENT PRIMARY KEY,
  cat_id INT NOT NULL,
  name VARCHAR(100) NOT NULL,
  amount FLOAT NOT NULL,
  date DATE NOT NULL,
  CONSTRAINT fk_cat FOREIGN KEY (cat_id) REFERENCES categories(id) ON DELETE CASCADE
);

 

Metoda POST i PUT (POST działa, PUT w 67%):
Kod do metod POST i PUT

Byłbym wdzięczny za jakieś wskazówki, pomysły co może powodować takie informacje zwrotne. Wydaje mi się, że w metodzie PUT dane są poprawnie weryfikowane, jednak nadal zwracają nieodpowiednie info. Nie jestem w stanie powiedzieć na jakich konkretnie danych jest testowany ten kod.

2
komentarz 26 stycznia przez Comandeer Guru (606,920 p.)

A jakbyś dorzucił do tego JSON-a, który zwracasz razem z błędem, zawartość $input? To by pozwoliło zobaczyć, co tak naprawdę dostajesz.

komentarz 31 stycznia przez Gamin Użytkownik (800 p.)
Strzał w dziesiątkę. Drobna modyfikacja kodu i faktycznie, $input zwrócił otrzymywane dane, poprawiłem co trzeba i przeszło testy. Dzięki!

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 18 lutego 2021 w PHP przez Grzegorz Mikina Dyskutant (8,060 p.)
0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 20 września 2018 w PHP przez Gambr Dyskutant (7,530 p.)
0 głosów
1 odpowiedź 439 wizyt
pytanie zadane 4 czerwca 2016 w PHP przez patryk23 Początkujący (290 p.)

93,336 zapytań

142,331 odpowiedzi

322,415 komentarzy

62,670 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...