peklo
27.08.2015, 18:36:09
witam
Mam oto taki kod który dodaje mi w pętli godziny do tabeli czas
foreach((array)$_POST['us'] as $key=>$us) { $data_wyk = (array)$_POST['data_wyk'][$key]; $godz_powr = (array)$_POST['godz_powr'][$key]; $rozp_pracy = (array)$_POST['rozp_pracy'][$key];
$sql ='INSERT INTO czas(rozp_pracy,godz_powr,us) VALUES (:rozp_pracy,godz_powr,us)';
$stmt = $pdo->prepare( $sql );
$stmt->bindValue(':rozp_pracy',$_POST['rozp_pracy'][$key], PDO::PARAM_STR);
$stmt->bindValue(':godz_powr',$_POST['godz_powr'][$key], PDO::PARAM_STR);
$stmt->bindValue(':us', $us, PDO::PARAM_STR);
$stmt->execute();
}
Typ danych w tabeli czas to TIME i jeśli w formularzu mam np godz. 10.00 to do tabeli dodaje mi jako 10:00:00.
Chciałbym teraz dodać jeszcze jedną zmienną np nadgodziny, która odejmie mi dwie zmienne
$nadgodziny=$godz_powr-$rozp_pracy;
[/php]
Próbuje tak
[php
]$stmt->bindValue(':nadgodziny',strtotime(($_POST['godz_powr'][$key])) - strtotime(($_POST['rozp_pracy'][$key])), PDO
::PARAM_STR);
ale cos mi nie wychodzi. Poza tym chciałbym aby wpis to zmiennej nadgodziny był w takiej postaci 4:00:00 (jeśli np będzie takia różnica 20:00-16:00)
Jak mam to zrobić? Ktoś coś pomoże?
Albo inaczej. Czy da się odjąć te dwie godziny podczas wypełniania formularzza i wrzucenie róznicy do ukrytego inputa?
nospor
27.08.2015, 19:26:31
strtotime - strtotime da ci liczbe sekund czyli 14400 a nie 04:00 ...
peklo
27.08.2015, 19:32:27
no bo tak mi daje i dzieliłem to przez 3600 itd itp ale czy ide w dobrum kierunku. Czy tą operacje daje w $stmt->bindValue czy może przed bindowaniem?
nospor
27.08.2015, 19:36:12
No wartosc ktorą bindujesz ma juz byc prawidlowa... no to chyba logiczne?
A poza tym czemy tych godzin nie trzymasz poprostu w bazie jako sekundy? Byloby o wiele latwiej cokolwiek potem z tym robic.
bobek358
27.08.2015, 19:36:49
A kolumny jaki mają typ w bazie danych?
peklo
27.08.2015, 19:40:34
w kolumnach mam TIME. Ok to jak dodam je jako sekundy to jaki najlepiej typ danych zastosować?
nospor
27.08.2015, 19:42:50
smallint ?
peklo
27.08.2015, 19:45:29
chyba zza mały zakres bo może byc 24h czyli 86400. MEDIUMINT(5) ?
nospor
27.08.2015, 19:49:02
No to dostosuj ten INT do max jaki mozesz miec. Zobacz w manualu jaki rozmiar jaki trzyma max i bedziesz wiedzial jaki dobrac.
peklo
27.08.2015, 19:52:30
nie to sobie dobiore. generalnie chodziło mi o to jaki typ danych dobrać. Czy time czy może jakiś int. I druga sprawa. Jak w formularzu mam np. 16:00 to teraz tą wartość przy dodawaniu do tabeli, mam jak rozumiem pomnożyć X 3600 tak?
nospor
27.08.2015, 19:56:44
Cytat
Czy time czy może jakiś int.
Jaki typ to przeciez ci podalem wczesniej piszac smallint wiec logiczne ze nie time.
Cytat
Jak w formularzu mam np. 16:00 to teraz tą wartość przy dodawaniu do tabeli, mam jak rozumiem pomnożyć X 3600 tak?
No jesli w formularz nadal wspiujesz 16:00 to tak, przy zalozeniu ze nie bedzie minut
peklo
27.08.2015, 19:58:41
no właśnie ,a jak będzie 16:47 ?

Co wtedy
nospor
27.08.2015, 20:00:37
To wtedy 16*3600+47*60.. no wiesz, podstawy matematyki...
peklo
27.08.2015, 20:03:18
nie no z tym 60 to juz wpadłeem wcześniej. Tylko teraz zastanawiiam się jak to zapisać. Trzeba to jakoś rozbić implode?
gerneralnie wszystkie zmienne mogą byc jako TIME tylko te nadgodziny jako mediumint
nospor
27.08.2015, 20:07:25
explode a nie implode
peklo
27.08.2015, 20:09:06
oj jasne że explode

A jak to rozbić?
nospor
27.08.2015, 20:10:23
kurcze.... zajrzyj do manuala... tam masz napisane jak uzywac explode....
peklo
27.08.2015, 20:12:46
explode to jaa już uzywałem ale nie wiem czy poradze sobie w tej petli z tym
nospor
27.08.2015, 20:18:46
A co za roznica czy w petli czy nie?? Dla explode to bez roznicy gdzie go uzywasz. Jak masz ochote to mozesz nawet go na Marsie uzywac
peklo
27.08.2015, 20:23:44
e no wole w domu. Cus takiego $nadgodziny=explode(':',$nadgodziny); ?
nospor
27.08.2015, 20:26:25
A masz zmienna $nadgodziny ktora jest w formacie GG:mm

Jak ta, to tak, Jak nie, to nie....
trueblue
27.08.2015, 20:26:40
peklo, czemu tą wartość wstawiasz do bazy? Możesz przecież nadgodziny liczyć na bieżąco podczas zapytania.
peklo
27.08.2015, 20:31:14
trueblue jak mam podgląd dodanego formularza to mi zlicza na bierząco. Czyli odejmuje jedno od drugiego. Ale ja potrzebuje jeszcze dodatkowo wrzucic to oddzielnie jako inna zmienna do tabeli podczas dodawania formularza
trueblue
27.08.2015, 20:34:11
peklo
27.08.2015, 20:41:27
żle napisałem trueblue w poprzednim poście ale już poprawiłem post23. Musze zrobić tak jak pisze nospor czyli rozbić to na sekundy i dodać do tabeli jako nowa zmienna nadgodziny.
Wolałbym dodać to jako całe godziny ale chyba to nie wyjdzie. Ale mam jakąś ciemnośc i nie kumam jak mam rozbić te dwie zmienne , odjąc jedna od drugiej i pożniej to dodać
trueblue
27.08.2015, 20:45:52
Rozumiem Cię doskonale, ale może jeszcze spróbuję Cię naprowadzić:
SELECT rozp_pracy,godz_powr,DATE_FORMAT(TIMEDIFF(godz_powr,rozp_pracy),'H%:%i') AS nadgodziny FROM czas
Sprawdź wynik.
peklo
27.08.2015, 20:54:52
próbowałem zapytaniem juz robic wcześniej podczas dodawania do bazy ale coś mi nie wychodziło:) Ale nie wiem czemu bo mam taki wynik H:00
czyli 09:00--8:00 powinno byc 1, a jest 0. Moze chodzi o strefe czasową?
trueblue
27.08.2015, 21:02:15
SELECT rozp_pracy,godz_powr,DATE_FORMAT(TIMEDIFF(godz_powr,rozp_pracy),'%H:%i') AS nadgodziny FROM czas
Był błąd.
peklo
27.08.2015, 21:04:31
błędu w zapytaniu nie ma poprostu daje
rozp_pracy godz_powr nadgodziny
08:00:00 09:00:00 00:00
Może szczegół tkwi w tym że mam TIME a nie np TIMESTAMP
trueblue
27.08.2015, 21:09:35
Cytat(peklo @ 27.08.2015, 22:04:31 )

błędu w zapytaniu nie ma
W moim.
Cytat(peklo @ 27.08.2015, 22:04:31 )

Może szczegół tkwi w tym że mam TIME a nie np TIMESTAMP
Bez problemu działa u mnie na typie TIME.
peklo
27.08.2015, 21:12:32
hmm to ja nie wiem o co kaman. To zapytanie daje w konsoli SQL
trueblue
27.08.2015, 21:18:48
Na pewno masz typy TIME?
peklo
27.08.2015, 21:45:33
na 100%
zrobiłem tak
SELECT TIMEDIFF( godz_powr, rozp_pracy ) AS nadgodziny FROM czas
i poszło
Jutro zobacze i pokombinuje jak dodać to do bazy
trueblue
27.08.2015, 21:52:57
Chodzi o to abyś nie dodawał do bazy tylko z niej wyciągał w razie potrzeby.
peklo
27.08.2015, 21:55:53
no nie za bardzo. Na jednej karcie na być godzina rozpoczecia pracy, godzina przyjazdu itd. Te godziny mają zostać na stałe dla potrzeb archiwizacji itd. Natomiast zmienna nadgodziny ma być odzielna zmienną, która będzie rozliczana i po rozliczeniu ustawiana na 0 h
trueblue
27.08.2015, 21:59:13
Utworzyłbym pole typu boolean, rozliczone 0/1.
Ale jak Ci wygodniej.
peklo
27.08.2015, 22:00:56
chyba że dodam nową zmienna rozliczone i dam 0 lub 1.
o o tym samym napisaliśmy w tym samym czasie:) Dzieki za pomoc Trueblue ja juz ide spać. Dzieki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.