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]
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.
<?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…
$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]