Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie rok miesiąc
Forum PHP.pl > Forum > Przedszkole
pawel06281990
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.
trueblue
Sprawdź w dokumentacji co jest drugim argumentem funkcji date.
pawel06281990
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
trueblue
Podstawić timestamp.
pawel06281990
Ma możesz pokazać przykład jak mam to zrobić questionmark.gif
nospor
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
pawel06281990
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
nospor
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
pawel06281990
Podaje mi bool(false) czyli nie dociera mi nic z bazy i nie jest sprawdzane.
nospor
Spraswdz moj EDIT z poprzedniego posta
pawel06281990
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. }
nospor
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.
pawel06281990
Chodzi o zapis do bazy żeby był 2019/2 questionmark.gif
nospor
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
pawel06281990
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']


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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.