[PHP]Pętle i wyciąganie zamówień |
[PHP]Pętle i wyciąganie zamówień |
13.11.2017, 09:53:15
Post
#1
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
Witam wszystkich
Już dawno nie potrzebowałem pomocy ale znowu poległem. Myślę, że to dla was prosta sprawa ale dla mnie pętle to czasami czarna magia Opiszę najpierw problem: Mam zbiór zamówień które wyciągam przez API (format danych json) - ale to ma mniejsze znaczenie. Problem w tym, że jednorazowo mogę pobrać tylko 100 zamówień. Próbuję na razie na prostym liczniku:
Ale w takiej postaci liczy tylko do 100. Za każdym razem kiedy łączę się z API musiałbym podać nowy numer zamówienia na którym skończył liczyć (taka opcja w api istnieje). Teraz pytanie: JAK TO ZROBIĆ Wiem, że potrzebna jest druga pętla tylko nie wiem jak ją zastosować. Pomóżcie bo mózg mi się gotuje.. Ten post edytował xaitras 13.11.2017, 10:52:44 |
|
|
13.11.2017, 11:08:53
Post
#2
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Nic nie rozumiem z twego kodu. Może napisz
jak wygląda zamówienie pierwszej setki, potem napisz jak wygląda zamówienie drugiej setki, potem napisz jak wygląda zamówienie trzeciej setki. Być może wtedy widoczna będzie jakaś reguła, która pozwoli wymyślić pętlę automatyczną. Ten post edytował trzczy 13.11.2017, 11:09:25 |
|
|
13.11.2017, 11:37:06
Post
#3
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
Ok, trochę to jest skomplikowane ale postaram się:
- kod który pokazałem jest w stanie policzyć tylko 100 pozycji bo na więcej nie pozwala API. - oryginalnie schemat pobierania jest taki: 1. Ustalenie początkowej daty i podanie jej w polu date_confirmed_from 2. Przetworzenie wszystkich odebranych zamówień. Jeśli odebrano 100 zamówień, oznacza to, że do pobrania może być ich jeszcze więcej. 3. Pobranie kolejnej paczki zamówień, podając w polu date_confirmed_from wartość z date_confirmed ostatnio pobranego zamówienia. Operacja powtarzana aż do otrzymania paczki z ilością zamówień mniejszą niż 100 (oznacza to że nie ma więcej zamówień do pobrania). 4. Zapisanie date_confirmed ostatnio przetworzonego zamówienia. Kolejne pobranie zamówień można wykonać od tej daty, aby nie pobierać dwukrotnie tych samych Jednak istnieje też możliwość podania numeru zamówienia zamiast daty ("order_id"). Trzeba podawać ostatni otrzymany numer czyli: 100,200,300 itd. Podaje się go w parametrach połączenia. - potrzebuję pętli która będzie wyciągać zamówienia po 100 aż do momentu kiedy osiągnie 0 Kod do połączenia z api:
|
|
|
13.11.2017, 11:48:21
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Moze jednak podasz nam dokumentacje tego API?
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 11:58:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
|
|
|
13.11.2017, 12:18:50
Post
#6
|
|
Grupa: Zarejestrowani Postów: 460 Pomógł: 49 Dołączył: 5.06.2011 Ostrzeżenie: (0%) |
Trzeba podawać ostatni otrzymany numer czyli: 100,200,300 itd. Podaje się go w parametrach połączenia. No to jak ten numer, np. 100, dodać tu do parametrów?
Jak se odpowiesz na to pytanie, to napisz funkcję pobierającą w zależności od tego numeru:
Potem napisz pętlę for:
Wartość $total wyciągasz wcześniej za pomącą API, bo powinno to być w API. Ten post edytował trzczy 13.11.2017, 12:22:36 |
|
|
13.11.2017, 12:23:27
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
No masz podany algorytm jak to masz robic. Zapisujesz date ostatniego i lecisz dalej. W czym problem? Gdy liczba zwroconych rekordow mniejsza od 100 to wychodzisz z petli
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 13:22:27
Post
#8
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
No to jak ten numer, np. 100, dodać tu do parametrów?
Jak se odpowiesz na to pytanie, to napisz funkcję pobierającą w zależności od tego numeru:
Potem napisz pętlę for:
Wartość $total wyciągasz wcześniej za pomącą API, bo powinno to być w API. No problem w tym że w tablicy nie znalazłem informacji na temat liczby zapisanych zamówień. Z takim parametrem byłoby łatwiej. Nie wiem jak wyciągnąć ilość zamówień w danym statusie.. |
|
|
13.11.2017, 13:24:36
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
trzczy nie przeczytal dokumentacji i wymysla rzeczy, ktore sie maja nijak do ciebie. Podalem ci poprawne rozwiazanie,zgodne z dokumentacja
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 13:29:37
Post
#10
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
trzczy nie przeczytal dokumentacji i wymysla rzeczy, ktore sie maja nijak do ciebie. Podalem ci poprawne rozwiazanie,zgodne z dokumentacja Wcześniej próbowałem z datą. Mój problem polega na tym, że pobieram też zamówienia które nie są potwierdzone a to koliduje z tą metodą. Dlatego chciałem pobierać je po numerze 'order_id' Siedzę nad tym już trochę czasu i wszystko mi się miesza. Mógłbyś mi podpowiedzieć jak policzyć wszystkie zamówienia znajdujące się w danym statusie? Potem już sobie poradzę z pobieraniem zamówień itd. Żeby było jasne,nie chcę gotowego skryptu.. Niejasny jest dla mnie fragment kodu:
wcześniej miałem:
Ten post edytował xaitras 13.11.2017, 13:43:37 |
|
|
13.11.2017, 13:55:55
Post
#11
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Cytat Wcześniej próbowałem z datą. Mój problem polega na tym, że pobieram też zamówienia które nie są potwierdzone a to koliduje z tą metodą. Dlatego chciałem pobierać je po numerze 'order_id' Nic nie koliduje. Poprostu zamiast date_confirmed_from dajesz date_from -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 14:10:59
Post
#12
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
ok w funkcji do połączenia mam coś takiego:
A próbuję pobierać tak:
efekt: Notice: Undefined index: date_from in C:\WebServ\httpd\PANEL\test.php on line 12 21406605 Notice: Undefined index: date_from in C:\WebServ\httpd\PANEL\test.php on line 12 21413239 Notice: Undefined index: date_from in C:\WebServ\httpd\PANEL\test.php on line 12 21422195 Notice: Undefined index: date_from in C:\WebServ\httpd\PANEL\test.php on line 12 21422499 itd. zmieniłem
na
pobiera ale tylko 100 szt. jak pobrać następne i następne... ? Ten post edytował xaitras 13.11.2017, 14:33:41 |
|
|
13.11.2017, 14:36:51
Post
#13
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
$zam = $orders['order_id'];
if (count($zam) < 100) { Naprawde nie widzisz tu bledu? poza tym date masz przekazac do polacz_bl_przeniesione_spec() jako parametr -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 14:45:16
Post
#14
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
$zam = $orders['order_id']; if (count($zam) < 100) { Naprawde nie widzisz tu bledu? poza tym date masz przekazac do polacz_bl_przeniesione_spec() jako parametr Może faktycznie już nie dowidzę.. Ale wierz mi próbuję na wszystkie sposoby.. Datę przekazuję do parametrów połączenia:
a w połączeniu:
Podpowiesz co robię źle? Pętle to nie jest moja mocna strona.. Z resztą sobie radzę.. Ten post edytował xaitras 13.11.2017, 14:46:33 |
|
|
13.11.2017, 15:16:35
Post
#15
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Cytat Z resztą sobie radzę.. No wlasnie nie bardzo....: nie wiesz co to parametr funkcji nie wiesz na czym robi sie count(), nawet jak ci palcem wytkna Obie te rzeczy nie zaliczaja sie do petli wiec nie tylko z petlami sobie nie radzisz -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 15:33:46
Post
#16
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
No wlasnie nie bardzo....: nie wiesz co to parametr funkcji nie wiesz na czym robi sie count(), nawet jak ci palcem wytkna Obie te rzeczy nie zaliczaja sie do petli wiec nie tylko z petlami sobie nie radzisz Zgadzam się z tobą i właśnie po to jest forum i ten dział żeby się czegoś nauczyć.. mam rację? ok zróbmy to bez funkcji:
Pomoże ktoś Ten post edytował xaitras 13.11.2017, 15:38:11 |
|
|
13.11.2017, 15:50:14
Post
#17
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Cytat Zgadzam się z tobą i właśnie po to jest forum i ten dział żeby się czegoś nauczyć.. mam rację? oczywiscie ze masz Chcialem jedynie cie poprawic, bo napisales ze tylko z petlami sobie nie radzisz. Chcialem cie nakierunkowac ze pare innych rzeczy tez nie ogarniasz.Skoro juz to wyjasnilismy sobie, to teraz zajrzyj do manuala i poczytaja o parametrach funkcji. Date masz przekazac jako parametr funkcji Co do count() to masz zliczyc zdaje sie liczbe zamowien a nie liczbe elementow w zamowieniu wiec nie: if (count($orders) < 100) { a (wg ostatniego kodu co wrzuciles) if (count($dane7['orders']) < 100) { bo zdaje sie w $dane7['orders'] masz zamowienia, co nie? edit: no i to: $lastDate = '$data'; No to juz naprawde podstawy podstaw niemajace z petlami zadnego zwiazku :/ Tak ma byc $lastDate = $data; -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 15:53:06
Post
#18
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
oczywiscie ze masz Chcialem jedynie cie poprawic, bo napisales ze tylko z petlami sobie nie radzisz. Chcialem cie nakierunkowac ze pare innych rzeczy tez nie ogarniasz. Skoro juz to wyjasnilismy sobie, to teraz zajrzyj do manuala i poczytaja o parametrach funkcji. Date masz przekazac jako parametr funkcji Co do count() to masz zliczyc zdaje sie liczbe zamowien a nie liczbe elementow w zamowieniu wiec nie: if (count($orders) < 100) { a (wg ostatniego kodu co wrzuciles) if (count($dane7['orders']) < 100) { bo zdaje sie w $dane7['orders'] masz zamowienia, co nie? edit: no i to: $lastDate = '$data'; No to juz naprawde podstawy podstaw niemajace z petlami zadnego zwiazku :/ Tak ma byc $lastDate = $data;
w połączeniu:
Z tą zmienną $data próbowałem i tak i tak. Z $orders też.. W każdym przypadku nie wiem dlaczego z każdym wykonaniem pętli nie pobierają się kolejne zamówienia.. Ten post edytował xaitras 13.11.2017, 15:56:51 |
|
|
13.11.2017, 16:01:38
Post
#19
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
nadal masz
if (count($orders) < 100) { z jednej strony prosisz o pomoc a jednoczesnie jak ci podadza poprawny kod to go ignorujesz -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
13.11.2017, 17:25:27
Post
#20
|
|
Grupa: Zarejestrowani Postów: 31 Pomógł: 0 Dołączył: 27.06.2017 Ostrzeżenie: (0%) |
nadal masz if (count($orders) < 100) { z jednej strony prosisz o pomoc a jednoczesnie jak ci podadza poprawny kod to go ignorujesz no i wymodziłem dziękuję za pomoc i cierpliwość uczę się "w miarę potrzeby" i brakuje mi czasami podstawowej wiedzy no i wymodziłem dziękuję za pomoc i cierpliwość uczę się "w miarę potrzeby" i brakuje mi czasami podstawowej wiedzy Mam jeszcze drobny kłopot. Jeśli ilość zamówień nie przekracza sto to licznik liczy mi poprawnie a jeśli przekroczy setkę to zlicza o 1 zamówienie więcej. Generalnie co setkę dolicza dodatkowe zamówienie.. nie wiadomo skąd Kod:
Ten post edytował xaitras 13.11.2017, 17:43:55 |
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 01:51 |