[PHP] Obliczanie różnicy między data z mysql a obecną datą


(Mrdzikupl) #1

Witam, zrobiłem mały skrypt który podaje różnice między datą z bazy mysql a obecna datą (np. data w bazie 2012-04-29 data dzis 2012-03-29 i skrypt pokaże że "Pozostało: 31 dni"

z tym że ciągle pokazuje że jest 0 dni...

skrypt ten otwiera się po zalogowaniu z głównej stronie panelu.

<?php

if(isset($_SESSION['login'])) {

	if(!isset($_POST['data'])) {

		$kupno = addslashes($_SESSION['login']);

		$zapytanie = mysql_query("SELECT * FROM `uzytkownicy` WHERE kupno='".$kupno."';");

function roznica_data($data_poczatek, $date_koniec, $jednostka_czasu="sekund")

{$tablica = array(minut=>60, godzin=>3600, dni=>86400, sekund=>1);

 return "Pozostało : ".round(((strtotime($date_koniec) - strtotime($data_poczatek)) / $tablica[$jednostka_czasu]))." ".$jednostka_czasu; }

echo roznica_data("$kupno", "$date", "dni")."
"; }

} else {

	echo'Aby mieć dostęp do tej strony musisz być zalogowany';

}

?>[/code]

(Copycona) #2

Ta funkcja działa. W podanym przykładzie nie masz takiej zmiennej $date, z odpowiednią wartością, a jej używasz.

Można zrobić tak:

<?php $date = date("Y-m-d H:i:s"); ?>[/code]

ale po co?

Lepiej od razu wstawić datę w formie Unix timestamp, zamiast robić to co kod wyżej i użyć funkcji strtotime(). Na to samo wyjdzie.

Przy takich obliczeniach argumenty musisz podać na odwrót, najpierw data końcowa (odliczana), później dzisiejsza (początek). (lub użyć jeszcze funkcji abs()). W aktualnej wersji dostaniesz wynik dobry, lecz od razu w bonusie na minusie.

Podsumowując:

[code=php]<?php
= '2012-04-29 10:02:39';


(Mrdzikupl) #3

teraz wygłada to tak :

<?php 

$date = date("Y-m-d");

if(isset($_SESSION['login'])) {

	if(!isset($_POST['data'])) {

		$kupno = addslashes($_SESSION['login']);

		$zapytanie = mysql_query("SELECT * FROM `uzytkownicy` WHERE kupno='".$kupno."';");

function roznica_data($data_poczatek, $date_koniec, $jednostka_czasu="sekund")

{$tablica = array(minut=>60, godzin=>3600, dni=>86400, sekund=>1);

 return "Pozostało : ".round(((strtotime($date_koniec) - strtotime($data_poczatek)) / $tablica[$jednostka_czasu]))." ".$jednostka_czasu; }

echo roznica_data("$kupno", "$date", "dni")."
"; }

} else {

	echo'Aby mieć dostęp do tej strony musisz być zalogowany';

}

?>[/code]


Jednak wynik nadal jest zły

[code]Pozostało : 15428 dni

w mysql mam ustawione że powinno być wynik 31... robiąc ty co podałeś wychodzi mi dobrze ale każdy użytkownik będzie miał inną datę kupna niż ta jaką tam podam.

Mam dokładnie takie coś:

Sklepik SMS > dodanie daty zakupu do mysql > doliczenie czasu zakupionej rangi (np. 30 dni) > ten skrypt po zalogowaniu ma pobrać tą datę i porównać ją z dzisiejsza (ile zostało do końca rangi)

Chyba coś muszę jeszcze importować chyba to będzie nick użytkownika ale sam nie wiem..


(Copycona) #4
      $kupno = addslashes($_SESSION['login']);      $zapytanie = mysql_query("SELECT * FROM `uzytkownicy` WHERE kupno='".$kupno."';");[/code][code=php]echo roznica_data("$kupno", "$date", "dni")."; } ???

W $kupno przechowujesz login, a nie datę. Datę musisz odczytać z wyniku zapytania.

http://www.php.net/manual/pl/mysql.examples-basic.php

http://www.php.net/manual/pl/ref.mysql.php funkcje mysql_fetch_*



Poza tym:

http://www.php.net/manual/pl/function.addslashes.php


[quote]
It's highly recommended to use DBMS specific escape function (e.g. mysqli_real_escape_string() for MySQL or pg_escape_string() for PostgreSQL)
[/quote]
 http://www.php.net/manual/pl/function.m ... string.php


Noi ten, no:

http://www.php.net/manual/pl/mysqlinfo.api.choosing.php 
[quote]
It is recommended to use either the mysqli or PDO_MySQL extensions. It is not recommended to use the old mysql extension for new development.
[/quote]

(Mrdzikupl) #5

Chyba nadal się nie rozumiemy...

login dla jakiego ma sprawić datę jest w aktywnej sesji o nazwie "login"

może tak zapytam...

jak zrobić aby dla zalogowanego użytkownika (z aktywnej sesji o nazwie "login") wybrać wartość z pola kupno... np.

ID nick haslo email ranga osobie data kupno

3 MrDzikuPL ****** emaill@gmail.com 1 --- 2012-03-24 15:38:02 2012-03-31

4 MrvipPL... ********* email@gmail.com 5 --- 2012-03-24 15:53:12 2012-04-25

i chcę dla obecnie zalogowanego użytkownika (np. MrvipPL) pobrać to co mam w "kupno" a potem dodać tą datę to pod np. $kupno2 i użyć w echo


(slepciu) #6
SELECT kupno FROM nazwaTabeli WHERE nick='szukanyLogin'