Zobacz temat
Dane z bazy po spelnieniu warunku czasu.
|
|
MeTeo |
Dodany dnia 22.01.2008 18:49:46
|
![]() Bywalec ![]() Postów: 880 Pomógł: 23 Ostrzeżeń: 2 Data rejestracji: 14.12.2005 19:38 |
Witam. My?l? nad pewn? modyfikacj? i b?dzie mi potrzebne zastosowanie zgodno?ci czasu. Do rzeczy: W modzie (posta? formularza) wpisuj? dat? i godzin? i daje zapisz. Na stronie g?ównej by?by skrypt, który wy?wietla wynik z bazy je?li jest spe?niony warunek czasu. Tak wi?c jak dojdzie za?ó?my godzina 21:30 dnia (za?ó?my) 22.01.2008 - a to samo wpisa?em w skrypcie to wtedy wy?wietli te dane i b?dzie je wy?wietla? przez 2-3 godziny. Do czego mi to potrzebne? Chc? rozbudowa? panel wyników i wykorzysta? to jako "aktualnie trwa spotkanie". Tylko chodzi mi o to, jak zrobi? takowe zapytanie? Czasu nie znalaz?em w bazie danych. Z tego co pami?tam to czas jest pobierany z serwera... Pozdrawiam. PW od moderatora:
|
|
|
W?cibski Go?? |
Dodany dnia 11.10.2025 16:43:36
|
Pan Kontekstualny Postów: n^x Data rejestracji: Zawsze |
![]() |
IP: localhost | |
Grzes |
Dodany dnia 22.01.2008 19:39:52
|
![]() Zaawansowany ![]() Postów: 1656 Pomógł: 42 Data rejestracji: 28.04.2005 20:28 |
Wpad?em tu tylko na chwile wi?c tylko krótko. Po wys?aniu formularza zbierz date i przeka? j? do funkcji mktime (http://www.php.net/manual/pl/ - tu jest opis, wpisz nazwe funkcji w szukajke) Utworzy Ci to znacznik czasu w formacie unixowym. Wrzu? to do tabeli do pola (typ int d?ugo?? 10). Przy wici?ganiu danych z bazy skorzystaj z funkcji time - zwraca aktualn? godzine a w?a?ciwie znacznik. Przyk?adowe zapytanie: pobierze rekordy których data jest wi?ksza od (aktualny czas - 7200 sekund) aktualny czas - 2h czyli te z ostatnich 2 godzin. Edytowane przez Grzes dnia 22.01.2008 19:40:07 Cz?sto najm?drzejsz? odpowiedzi? jest milczenie
![]() |
|
|
MeTeo |
Dodany dnia 22.01.2008 20:54:57
|
![]() Bywalec ![]() Postów: 880 Pomógł: 23 Ostrzeżeń: 2 Data rejestracji: 14.12.2005 19:38 |
Przeczyta?em to 10 razy i zacz??em rozumie? ![]() ![]() |
|
|
Grzes |
Dodany dnia 22.01.2008 22:54:07
|
![]() Zaawansowany ![]() Postów: 1656 Pomógł: 42 Data rejestracji: 28.04.2005 20:28 |
W takim razie bierzemy si? za opis tej funkcji. W manualu pisz? tyle: int mktime ( int $godzina, int $minuta, int $sekunda, int $miesi?c, int $dzie?, int $rok [, int $letni/zimowy] ) t?umacz?? z polskiego na nasze wygl?da to mniej wi?cej tak: zwrana liczba ca?kowita ; mktime(godzina, minuta, sekunda, miesi?c, dzie?, rok, (nie wymagany parametr) czas letni/zimowy); Masz tej funkcji poda? dane w/w a ona zwróci liczb? ca?kowit? - czas w standardzie unixowym. Zak?adamy ?e mamy takie zmienne pochodz?ce z formularza: $a - dzie? $b - miesi?c $c - rok $d - godzina (celowo obra?em inne nazwy zmienych bo wcale nie musz? nazywa? si? tak jak dane w nich zawarte cho? kod jest czytelniejszy wtedy - urozmaicimy teraz to troch?). Funkcja jeszcze wymaga minuty i sekundy. Za?o?ymy sobie ?e b?dziemy zawsze przyjmowali ?e b?dzie to 0 minut i 0 sekund (okr?g?a godzina). Zapis powinien wygl?da? tak: $czas = mktime($d, 0, 0, $b, $a. $c); Teraz tylko zawarto?? $czas wrzu? do bazy. Proste? ;) Cz?sto najm?drzejsz? odpowiedzi? jest milczenie
![]() |
|
|
MeTeo |
Dodany dnia 22.01.2008 23:37:59
|
![]() Bywalec ![]() Postów: 880 Pomógł: 23 Ostrzeżeń: 2 Data rejestracji: 14.12.2005 19:38 |
Czyli teraz z twojego polskiego prze?o?? na swój ch?opski :) Mój notatniczek: W moim infusionie tworze pola odpowiedzialne za godzin? spotkania, lecz z podzia?em na Dzie?, miesi?c, rok, godzina (ew. minuty. Sekundy mog? by? 0). Nast?pnie w panelu sczytuj?cym tworz? warunek... ale jak? Co? za zasadzie Tylko jak jest czas serwerowy? Bo tworz?c z zmiennych zak?adaj?c Dobrze g?ówkuj?? Ma to prawo dzia?a?? Co? wspomnia?e? o polu z bazy... Tak wi?c jak scali? wszystkie 5 pól w 1 zapytanie? Cho? wydaje mi si?, ?e to chyba zadzia?a ;) Prosz? o odpowied? :) Pozdrawiam. Edytowane przez MeTeo dnia 22.01.2008 23:39:45 |
|
|
Grzes |
Dodany dnia 23.01.2008 00:08:47
|
![]() Zaawansowany ![]() Postów: 1656 Pomógł: 42 Data rejestracji: 28.04.2005 20:28 |
Je?li chodzi o wyci?gni?cie informacji to musisz mie? w tabeli to jedno dodatkowe pole. Tak b?dzie najpro?ciej poniewa? sortuj?c rekordy w tabeli b?dzie ?atwiej wykona? to na jednym polu liczbowym ni? na 5 ro?nych. Dorzu? sobie pole datestamp (typ int, d?ugo?c 10) do tej tabeli a poni?szy kod wy?wietli Ci wybrane rekordy. (zwró? uwag? na pokolorowan? zmian?) Je?li za? chodzi o mktime to stosuj to podczas dodawania rekordu do tabeli. Dodawaj tak jak teraz dodajesz sobie dat? je?li tak Ci ?atwiej ale do tego dodatkowego pola wrzuc wynik funkcji mktime. Wyjdzie na to ?e w jednym rekordzie data jest dwa razy zapisywana ale niech narazie tak b?dzie. Z czasem ?atwiej b?dzie. Na przysz?o??: Zamiast tych 5 pól mo?na zastosowa? tylko to jedno datestamp. Dlaczego? Je?li mamy ju? zapisan? date w tym formacie za pomoc? funkcji strftime mo?na wyodr?bni? wszstkie elementy daty. Dat? sofrmatowan? wy?wietla te? funkcja showdate (dost?pna w fusionku). Definicja jej znajduje si? w maincore.php. $tekst_z_data = showdate($zmienna_z_dat?, "typ daty"); W miejsce typ daty mo?na wpisa? jedn? z trzech predefiniowanych formatów: shortdate, longdate, forumdate lub r?cznie pobawi? si? w formatowanie ale tu odsy?am do manuala i definicji funkcji strftime - taka sama metoda formatowania obowi?zuje. Starczy tego g?upiego nawijania :P Zaraz kr??ka dostaniesz :P Jeszcze tak zupe?nie na marginesie, co do tego fragmentu: WHERE $czas = ... To zielone to nazwa pola w tabeli, znaku $ tu nie powinno by?. Wiem, ze przez zmienn? mo?na by przekaza? nazw? pola ale w tym przypadku nie o to biega, po prostu: WHERE czas = ...
Cz?sto najm?drzejsz? odpowiedzi? jest milczenie
![]() |
|
|
MeTeo |
Dodany dnia 23.01.2008 00:19:31
|
![]() Bywalec ![]() Postów: 880 Pomógł: 23 Ostrzeżeń: 2 Data rejestracji: 14.12.2005 19:38 |
Tylko jak zrobi? z tych pi?ciu pól 1 zapytanie? Przyk?ad: Mam sobie formularz taki Mam taki oto formularz. Ka?de pole to nowa zmienna (bo o to chyba chodzi?o). Tak wi?c jak zrobi? by na ko?cu zamiast dodawa? mi 5 pól robi?o 1 - datestamp. Ju? jako tako zrozumia?em sens tego mktime ale dalej nie rozumiem jak wstawi? je w formularz. Swoj? drog? mój kod te? jest chyba poprawny... Nie jestem pewny tego W zapytaniu bo co? napisa?e? ale nie zrozumia?em :) Starczy tego g?upiego nawijania :P Zaraz kr??ka dostaniesz :P Dosta?em ju? po 1 po?cie... Ale rozumiem, ?e moje pytanie nie jest na tyle banalne by otrzyma? banaln? odpowied? :) Dzi?ki za dotychczasow? pomoc i prosz? o kolejn? :) |
|
|
Grzes |
Dodany dnia 23.01.2008 00:22:43
|
![]() Zaawansowany ![]() Postów: 1656 Pomógł: 42 Data rejestracji: 28.04.2005 20:28 |
Masz pewnie jaki? skrypt który przetwarza dane z formularza i dodaje je do bazy.. zgadza si?? Je?li dysponujesz tymi zmiennymi to przed dodaniem do bazy ich (INSERT INTO.. bla bla bla) wykonaj linijk?: i $jakas_zmienna dopisz do zapytania dodaj?cego rekord do bazy. Edytowane przez Grzes dnia 23.01.2008 00:23:20 Cz?sto najm?drzejsz? odpowiedzi? jest milczenie
![]() |
|
|
MeTeo |
Dodany dnia 23.01.2008 00:53:35
|
![]() Bywalec ![]() Postów: 880 Pomógł: 23 Ostrzeżeń: 2 Data rejestracji: 14.12.2005 19:38 |
yyy... ?adnego skryptu do przetwarzania nie mam. Znaczy si? budowa tego wygl?da tak: W panelu admina wype?niam formularz z danymi i klikam button - dodaj. Po dodanie Wynik wy?wietla si? w panelu "nadchodz?ce spotkania" jednak gdy dojdzie czas tego spotkania (taki czas jak da?em w formularzu) mecz si? ten w szerszych danych wy?wietli w ?rodkowym panelu z dopiskiem "aktualnie grany". Budowa tego jest taka sama jak innych infusionów maj?cyh na celu co? wy?wietlania po wype?nieniu ;) Cho?by panel powitalny... Wpisuje w PA i wy?wietla na g?ównej ;) Tutaj przechodzi przez db... Ten mój kod jest z?y? Nie przeszkadza mi to, ?e jest rozcz?onkowany... Chocia?... Czy nie móg?bym zrobi? 1 pola "data" a w nim wpisa? dat? w formie: 21, 15, 00, 01, 23. 2008 Tak samo definiuje mktime... Pole to wtedy by dodawa?o dane do datestamp Nast?pnie w skrypcie pobierania przetworzy?bym dane z datestamp. By?oby to oznaczone zmienna np "$czas" i potem by?oby: Tylko to na to samo wychodzi jak bym robi? mój 1 sposób ;D Tyle, ?e tamten by? prostszy... Tak wi?c czekam na odp. Czy tamten sposób nie zadzia?a, a jak nie to porad? jak go poprawi?... Albo z kolei jak zrobi? skrypt przetwarzaj?cy dane z formularza... Bo tego to kompletnie nie wiem ;) Domy?lam si? jakby to wygl?da?o ale z kwestii kodu nie mam poj?cia. No i teraz tak analizuje wcze?niejsze posty i co? mnie zaintrygowa?o... Czy przypadkiem nie zadzia?a w ten sposób, ?e b?dzie wynik wy?wietlony ca?y czas a zniknie po 2 godzinach od daty w formularzu? Ja to rozumiem tak: czyli tak wi?c gdy b?dzie Wynik si? ju? wy?wietla? nie b?dzie ale: Te? spe?nia warunek, a chodzi o to by kod by? wy?wietlany od godziny w formularzu przez 2 godziny... Te 2 godziny s? ale od? :D Pozdrawiam |
|
|
Grzes |
Dodany dnia 25.01.2008 22:00:50
|
![]() Zaawansowany ![]() Postów: 1656 Pomógł: 42 Data rejestracji: 28.04.2005 20:28 |
Nie kombinuj. Skoro dodajesz do bazy date w formie w jakiej masz to za pomoc? phpmyadmina dodaj sobie pole datestamp (typ int d?. 10). W skrypcie przed wykonaniem zapytania INSERT wstaw linijk?: $czas = mktime... w wg schematu jaki opisywa?em poprzednio. Tylko podaj tej funkcji dat? któr? otrzymujesz w formularza. W samym zapytaniu insert dopisz tam by doda?o zawarto?? zmiennej $czas do pola datestamp. Teraz tam gdzie chcesz aby wy?wietlane byly pozycje tylko z ostatnich 2h w zapytaniu SELECT dodaj w warunku WHERE to oczym piszesz WHERE datestamp>'".(time()-7200)."'" ![]() Teraz ja?niej napisa?em? Nie wiem jak to inaczej opisa?. Cz?sto najm?drzejsz? odpowiedzi? jest milczenie
![]() |
|
|
MeTeo |
Dodany dnia 30.01.2008 17:39:56
|
![]() Bywalec ![]() Postów: 880 Pomógł: 23 Ostrzeżeń: 2 Data rejestracji: 14.12.2005 19:38 |
Witam. EDIT: Problem cz??ciowo rozwi?za?em, szczegó?y na dole Teraz ju? jestem bardziej przydatny gdy? ju? to robi? ;) Niestety nie pisa?bym tu gdybym nie mia? problemów... Po primo - grzes, da?e? b??d w tej zmiennej... kropk? zamiast przecinka - nie mam pretensji ale podczas szukania b??dów natkn??em si? na to. Po 2 - Pisa?e? bym wstawi? mktime przed invert oraz da? by wynik zosta? dodany do bazy... hmm... Jak dla mnie to to wykona?em. Poni?ej zamieszczam fragment zmodyfikowanego extreme_warstat_admin z umieszczonymi fragmentami zaznaczonymi. Nie wstawiam ca?ego kodu bo to bez sensu. A oto on: Wynik si? dodaje lecz kolumna "warstats_czas" ma ci?gle warto?? "0". Ma ona parametry: Typ: INT, d?ugo??: 12 - tak 12 gdy? chyba chodzi o ??czn? liczb? warto?? a zak?ada?e? bez minut, a ja minuty umieszczam. Zmieni?em - $czas na $stats_czas - datesmap na warstats_czas Pola w formularz s? rozbite na minuty, godziny, miesi?c... Chyba b?dzie ?atwiej... Prosz? o instrukcje :) Dzi?kuj? i pozdrawiam EDITED: Jednak postanowi?em si? pobawi? i... Stworzy?em jedn? komórk? i wpisa?em w ni? format daty zgodnie z mktime czyli zamiast 02.02.2008 13:30 wpisa?em Jako mktime i ?adnie mi doda?o do bazy wynik: Co jest te? b??dne bo time jest ju? 10 cyfrowy a mktime robi mi 9... Bynajmniej mi ju? co? generuje... Tylko, ?e ten skrypt b?dzie u?ywany przez du?e grono redaktorów a próbuje wszystko robi? "g?upoto odporne" tak wi?c potrzebuj? sposobu albo na scalanie tych kilku zmiennych w 1 a potem wys?ania jako mktime (no i gdzie to w tym kodzie wstawi?) lub je?li si? da, to kilka pól dotyczy?oby 1 zmiennej. Tylko dane dodawa?by si? w kolejno?ci... P.S Poza tym warunek z time generuje b??d Ju? mnie to powoli m?czy... Edytowane przez MeTeo dnia 02.02.2008 14:10:22 |
|
Przejdź do forum: |