Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sprawdzanie rok miesiąc
pawel06281990
post 6.02.2019, 13:28:27
Post #1





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Witajcie,

Mam problem ze sprawdzenie roku i miesiąca i nie wiem czy dobrze kieruje zapytanie aby podmienił ceny w bazie na statystyki.

Mój skrypt wygląda tak

Skrypt który sprawdza czy miesiąc i rok jest w bazie jeśli jest to uaktualnia ceny w bazie.

  1. $result = dbquery($link,"SELECT data FROM ".$db_prefix."zamowien WHERE data='".date("Y/m", $_POST['data'])."'");
  2. $data = dbarray($result);
  3. $rok=date("Y/m", $data['data']);
  4. if($rok >= $rok){
  5. $result = dbquery($link,"UPDATE ".$db_prefix."zamowien SET ile_zamowien=ile_zamowien +1, brutto=brutto+'".$_POST['brutto']."', netto=netto+'".$_POST['netto']."' WHERE data='".date("Y/m", $_POST['data'])."'");
  6. }else{
  7. $result = dbquery($link,"INSERT INTO ".$db_prefix."zamowien SET data='".$_POST['data']."', ile_zamowien='1', brutto='".$_POST['brutto']."', netto='".$_POST['netto']."'");
  8. }


A tu formularze które pobierają cenę netto brutto i date i dodają do bazy

  1. echo"<input type='hidden' class='form-control' name='netto' value='".$netto."' placeholder='' style='width:330px;'>";
  2. echo"<input type='hidden' class='form-control' name='brutto' value='".$brutto."' placeholder='' style='width:330px;'>";
  3. echo"<input type='hidden' class='form-control' name='data' value='".time()."' placeholder='' style='width:330px;'>";


to że dodaje do bazy to działa ale nie działa mi UPDATE do bazy nie wiem co jest nie tak. Proszę o pomoc.
Go to the top of the page
+Quote Post
trueblue
post 6.02.2019, 13:31:32
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Sprawdź w dokumentacji co jest drugim argumentem funkcji date.


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 13:53:16
Post #3





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Drugim argumentem funkcji dat() jest timestamp.

I no co muszę zrobić żeby to uzyskać czyli sprawdzanie czy rok i miesiąc jest aktualny questionmark.gif
Go to the top of the page
+Quote Post
trueblue
post 6.02.2019, 14:00:30
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Podstawić timestamp.


--------------------
Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 14:13:57
Post #5





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Ma możesz pokazać przykład jak mam to zrobić questionmark.gif
Go to the top of the page
+Quote Post
viking
post 6.02.2019, 14:23:26
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


https://stackoverflow.com/questions/113829/...imestamp-in-php


--------------------
Go to the top of the page
+Quote Post
nospor
post 6.02.2019, 15:11:48
Post #7





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




A zescie sie uczepili bez sensu tego timestamp chlopaka... .Przeciez widac ze wklada tam timestamp...

Przeciez ma ewidentnie inne bledy takie jak:

1) if($rok >= $rok)
powaznie? Jesli 2 jest wieksze lub rowne 2? To chyba zawsze jest prawda co nie?

2)
data='".date("Y/m", $_POST['data'])."'"
A nie robi update z tego powodu. Porownujesz date timestamp do daty w formacie RRRR/MM - no nie ma szans by byly rowne. Temu nie robi update bo nie znajduje rekordu do update. Powinno byc poprostu
data='".$_POST['data']."'"

3) No i generalnie pomijajac te nieszczesne warunki w zapytaniu, to ten kod

$result = dbquery($link,"SELECT data FROM ".$db_prefix."zamowien WHERE data='".date("Y/m", $_POST['data'])."'");
$data = dbarray($result);
$rok=date("Y/m", $data['data']);
if($rok >= $rok){

Nie ma zadnego sensu... Pobierasz z bazy date, ktora jest rowna dacie z forma a potem sprawdasz czy jest rowna dacie z forma. Gdzie tu logika? Skoro sie pobralo z bazy dla tego warunku znaczy ze jest rowna no nie? A jesli chciales sprawdzic czy istnieje rekord z ta data i jesli nie to go wlozyc to wystarczy wlasnie sprawdzic obecnosc tego rekordu.

ps: przenosze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 15:31:32
Post #8





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Pozmieniałem i jeszcze nie jest to tego czego chce bo za każdym razem dodaje mi nową kolumnę w bazie i nie edytuje tej z miesiącem i rokiem 2019/02 taki format chce uzyskać przy sprawdzaniu aby skrypt wiedział ze mamy luty 2019.

Tak teraz wygląda mój kod
  1. $result = dbquery($link,"SELECT data FROM ".$db_prefix."zamowien WHERE data='".$_POST['data']."'");
  2. $data = dbarray($result);
  3. if($data['data']){
  4. $result = dbquery($link,"UPDATE ".$db_prefix."zamowien SET ile_zamowien=ile_zamowien +1, brutto=brutto+'".$_POST['brutto']."', netto=netto+'".$_POST['netto']."' WHERE data='".$_POST['data']."'");
  5. }else{
  6. $result = dbquery($link,"INSERT INTO ".$db_prefix."zamowien SET data='".$_POST['data']."', ile_zamowien='1', brutto='".$_POST['brutto']."', netto='".$_POST['netto']."'");
  7. }


W czymś jest jeszcze błąd questionmark.gif

p.s bo w bazie zapisuje mi w ten sposób 1549463022
Go to the top of the page
+Quote Post
nospor
post 6.02.2019, 15:36:28
Post #9





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




ZAWSZE sprawdzaj co dostajesz na danym etapie, np

$data = dbarray($result);
var_dump($data);

Cytat
.s bo w bazie zapisuje mi w ten sposób 1549463022

Tak, to jest timestamp tak jak juz mowilem w poprzednim poscie

edit: no dobra, zle powiedzialem z tym nie formatowaniem. zapomnialem ze ty tam w input wstawiasz akutalny timestamp, ktory z racji definicji za kazdym razem jest inny wiec o to
data='".$_POST['data']."'
nigdy nie bedzie prawda.
W tym zapytaniu jak porownujesz to musisz w mysql sformatowac data do formatu Y/m oraz $_POST['data'] do formatu Y/m - w celach porownania. Bo teraz jak masz to te dwa czasy moga sie roznich chocby o sekunde i juz nie bedzie porownania


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 15:38:44
Post #10





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Podaje mi bool(false) czyli nie dociera mi nic z bazy i nie jest sprawdzane.
Go to the top of the page
+Quote Post
nospor
post 6.02.2019, 15:43:43
Post #11





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Spraswdz moj EDIT z poprzedniego posta


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 15:47:18
Post #12





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Robiłem tak jak mówisz ale nadal mam bool(false)

zobacz sam że zmieniłem

  1. if (!defined("IN_PANEL")) { die("Access Denied"); }
  2. $result = dbquery($link,"SELECT data FROM ".$db_prefix."zamowien WHERE data='".date("Y/m", $_POST['data'])."'");
  3. $data = dbarray($result);
  4. echo var_dump($data);
  5. $rok=date("Y/m", $data['data']);
  6. if($rok){
  7. $result = dbquery($link,"UPDATE ".$db_prefix."zamowien SET ile_zamowien=ile_zamowien +1, brutto=brutto+'".$_POST['brutto']."', netto=netto+'".$_POST['netto']."' WHERE data='".date("Y/m", $_POST['data'])."'");
  8. }else{
  9. $result = dbquery($link,"INSERT INTO ".$db_prefix."zamowien SET data='".$_POST['data']."', ile_zamowien='1', brutto='".$_POST['brutto']."', netto='".$_POST['netto']."'");
  10. }
Go to the top of the page
+Quote Post
nospor
post 6.02.2019, 15:49:56
Post #13





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




Wydaje mi sie ze dosc wyraznie napisalem, ze obie strony porownania masz skonwertowac do formaty Y/m. Zarowno po stronie mysql jak i php

ps:
No ale tego
$rok=date("Y/m", $data['data']);
if($rok){
juz miales nie zmieniac. Mialo byc to porownanie co bylo wczesniej.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 15:55:02
Post #14





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Chodzi o zapis do bazy żeby był 2019/2 questionmark.gif
Go to the top of the page
+Quote Post
nospor
post 6.02.2019, 15:57:03
Post #15





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




WHERE data='".date("Y/m", $_POST['data'])."'");
To DATA ktore jest zaraz po WHERE masz przed porownanie skonwertowac do formatu Y/m. Przeciez aktualnie jest jako timestamp wiec nie jestes w stanie bez konwersji tego porownac, czyz nie?

manual mysql-> funkcje daty i czasu -> formatowanie timestamp


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pawel06281990
post 6.02.2019, 21:03:30
Post #16





Grupa: Zarejestrowani
Postów: 281
Pomógł: 0
Dołączył: 10.01.2014

Ostrzeżenie: (0%)
-----


Zrobiłem coś takiego ale chyba jeszcze nie oto chodziło.

  1. $result = dbquery($link,"SELECT date_format(data, '%Y.%m') FROM ".$db_prefix."zamowien WHERE data='".$_POST['data']."'");
  2. $data = dbarray($result);
  3. echo var_dump($data);
  4. if($data['data']){
  5. $result = dbquery($link,"UPDATE ".$db_prefix."zamowien SET ile_zamowien=ile_zamowien +1, brutto=brutto+'".$_POST['brutto']."', netto=netto+'".$_POST['netto']."' WHERE data='".date("Y/m", $_POST['data'])."'");
  6. }else{
  7. $result = dbquery($link,"INSERT INTO ".$db_prefix."zamowien SET data='".date_format($_POST['data'], '%Y.%m')."', ile_zamowien='1', brutto='".$_POST['brutto']."', netto='".$_POST['netto']."'");
  8. }


Edit
Po przeczytaniu kilkadziesiąt razy zrozumiałem o co chodzi i teraz mi dział tak jak powinno.
A zrobiłem to tak
  1. $result = dbquery($link,"SELECT data FROM ".$db_prefix."zamowien WHERE data >= '".showdate("statydata", $_POST['data'])."'");
  2. $data = dbarray($result);
  3.  
  4. if($data['data']){
  5. $result = dbquery($link,"UPDATE ".$db_prefix."zamowien SET ile_zamowien=ile_zamowien +1, brutto=brutto+'".$_POST['brutto']."', netto=netto+'".$_POST['netto']."' WHERE data>='".showdate("statydata", $_POST['data'])."'");
  6. }else{
  7. $result = dbquery($link,"INSERT INTO ".$db_prefix."zamowien SET data='".$_POST['data']."', ile_zamowien='1', brutto='".$_POST['brutto']."', netto='".$_POST['netto']."'");
  8. }


To jest moja funkcja
  1. showdate("statydata", $_POST['data']




Ten post edytował pawel06281990 6.02.2019, 22:12:52
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 10:33