Изтичащи в близкия период

kini

Registered
Здравейте,

Искам да направя скрипт, който предупреждава потребителите, които са в базата, за оставащ период до изтичане на нещо. Немога да си помогна сам, защото незнам какво точно трябва да добавя, чрез взимане на дата ли ще е или по друг начин..

Някой ако има идея, може да сподели.
 
записваш time() на датата СЛЕД която искаш да изтече и просто проверяваш ..

пример:
PHP:
// wkarwash wremeto sled 5 dena
 $sled5dena = time() + (5*86400);
 $_1den = 1*86400;
 mysql_query("update ...  timestamp = '$sled5dena'");

// prowerqwa
$q = mysql_q(" ..  ");
$r = mysql_fetch_array($q);

if($r['timestamp'] < (time() - $_1den)) // ako ostawa < 1 den
{
 echo " predoprejdenie ";
}
else
     {
            echo "kato ostane 1 den ..  shte ti  kajem :)";
      }

Айде ти си :) :?: :?:
 
Определено кода не ми помогна, явно аз не съм обяснил подробно нещата..

Системата е следната:

Една таблица с потребители users, която има колона validnost и в нея е избрано (примерно: "1year").


Трябва да се получи следното:

От датата, когато е вписана тази валидност за даден потребител, да започне да си брои дните и когато наближи краят, да покаже примерно, че остават 20 дни още.


Валидностите съм ги направил да се добавят по следния начин: 1year, 2 years и т.н, понеже не знам как трябва да стане..

По какъв начин трябва да ги заменя за да може да се изчислява цялото това време?
 
Малко лошо си си направил бд-то. Със стрингове трудно ще се оправиш, защо не записваш броя на дните?
Направи си колоната validnost да е от тип int с дължина 4 символа.
И после, когато добавяш ново нещо, резултата го записваш така(ако продължителността е три години): 3 години по 365 дни = 1095 (ако не смяташ високосните, едва ли са ти проблем?)
И в скрипта...
PHP:
<?php
$query = mysql_query('select validnost from table where user="'.addslashes($user).'"');
$res = mysql_fetch_assoc($query);
$res = (int) $res['validnost'];//това е полето в бд-то
if($res <= 20) {//ако остават по-малко от 20 дни
    //тук някакво съобщение
    echo "Остават още само $res дни! ";
}
?>
 
anonimen каза:
Малко лошо си си направил бд-то. Със стрингове трудно ще се оправиш, защо не записваш броя на дните?
Направи си колоната validnost да е от тип int с дължина 4 символа.
И после, когато добавяш ново нещо, резултата го записваш така(ако продължителността е три години): 3 години по 365 дни = 1095 (ако не смяташ високосните, едва ли са ти проблем?)
И в скрипта...
PHP:
<?php
$query = mysql_query('select validnost from table where user="'.addslashes($user).'"');
$res = mysql_fetch_assoc($query);
$res = (int) $res['validnost'];//това е полето в бд-то
if($res <= 20) {//ако остават по-малко от 20 дни
    //тук някакво съобщение
    echo "Остават още само $res дни! ";
}
?>

Скрипта показва, ако остава по-малко от избраният срок. Но кое ще пресметне изминалите дни, от денят на добавената валидност в колоната, до денят в който потребителя вижда това съобщение?
 
Значи правиш друго нещо:
две колони - 'start' и 'end', и двете от тип инт(11). За всеки потребител при създаване на "валидност" правиш нещо такова:
PHP:
<?php
$now = time();//взимаме дата с точност до секундите
$end = strtotime("+1 year");//Ето как да използваш тази функция: [url=http://bg2.php.net/strtotime#refsect1-function.strtotime-examples]тук[/url]
$query = mysql_query(
'insert into table
(username, start, end)
values("'.$username.'", '.$now.', '.$end.')'
);
?>
Това беше скрипта за инсертване в базата.
За да вземеш данните в пододящ формат, използвай това:
PHP:
<?php
$query = mysql_query('select start, end from table where username="'.$user.'"');//взимаме началото и края за определения юзер
$res = mysql_fetch_assoc($query);
$start = ( (int) $res['start'] ) / (24 * 60 * 60);//преобразуваме в брой дни
$end = ( (int) $res['end'] ) / (24 * 60 * 60);
$now = time() / (24 * 60 * 60);
echo "Изминаха: ".($now - $start) . " дни.<br>";
echo "Остават: ".($end - $now) . " дни.<br>";
?>
 
anonimen каза:
Значи правиш друго нещо:
две колони - 'start' и 'end', и двете от тип инт(11). За всеки потребител при създаване на "валидност" правиш нещо такова:
PHP:
<?php
$now = time();//взимаме дата с точност до секундите
$end = strtotime("+1 year");//Ето как да използваш тази функция: [url=http://bg2.php.net/strtotime#refsect1-function.strtotime-examples]тук[/url]
$query = mysql_query(
'insert into table
(username, start, end)
values("'.$username.'", '.$now.', '.$end.')'
);
?>
Това беше скрипта за инсертване в базата.
За да вземеш данните в пододящ формат, използвай това:
PHP:
<?php
$query = mysql_query('select start, end from table where username="'.$user.'"');//взимаме началото и края за определения юзер
$res = mysql_fetch_assoc($query);
$start = ( (int) $res['start'] ) / (24 * 60 * 60);//преобразуваме в брой дни
$end = ( (int) $res['end'] ) / (24 * 60 * 60);
$now = time() / (24 * 60 * 60);
echo "Изминаха: ".($now - $start) . " дни.<br>";
echo "Остават: ".($end - $now) . " дни.<br>";
?>

Направих го по подобен начин, понеже когато е само time(); формата който е излиза е просто нелеп. (пример: 0.01.14514.12.14.4)

Проблема идва при добавянето на влидност, там съм го направил в дни (пример: 1 месец = 31дни.) В колоната е 31

И отново не се получава. :)

Другия вариант е да си направя колоните нормални и да вписвам датите ръчно (пример: start: 23.03.2014 end: 25.03.2014). При този вариант как мога да покажа само оставащите дни ?
 
Направих го по подобен начин, понеже когато е само time(); формата който е излиза е просто нелеп. (пример: 0.01.14514.12.14.4)
По начина, който ти дадох, ще ти изкарва оставащите дни. Какъв е проблема?
 
anonimen каза:
Направих го по подобен начин, понеже когато е само time(); формата който е излиза е просто нелеп. (пример: 0.01.14514.12.14.4)
По начина, който ти дадох, ще ти изкарва оставащите дни. Какъв е проблема?

Изкарва ето такъв резултат (12151542111), който немога да формулирам, за да му извадя нужното от него (само дните)..
 
Тогава дай echo на $start, $end и $now в скрипта за изкарване на броя дни и ще открием проблема :)
 
anonimen каза:
Тогава дай echo на $start, $end и $now в скрипта за изкарване на броя дни и ще открием проблема :)

Проблема е грешното задаване на $start датата и взимането на $now :)

Имислих изцяло друг вариант на системата. В момента записвам като старт и енд в ето такъв формат d.m.y При този вариант как ще стане пресмятането ?
 
По-добре записвай в обратния формат - y.m.d (с водещи нули!!), така по-лесно ще пресметнеш разликата:
PHP:
$start = (int) star_replace('.', '', $start);//махаш точките и преобразуваш в число
//аналогично за $end
echo ( $end - (int) date("Ymd") );//главно игрек за година с 4цифри, малко за две
 
По-добре записвай в обратния формат - y.m.d (с водещи нули!!), така по-лесно ще пресметнеш разликата:
PHP:
$start = (int) str_replace('.', '', $start);//махаш точките и преобразуваш в число
//аналогично за $end
echo $end - (int) date("Ymd");//главно игрек за година с 4цифри, малко за две
 
kini каза:
anonimen каза:
Значи правиш друго нещо:
две колони - 'start' и 'end', и двете от тип инт(11). За всеки потребител при създаване на "валидност" правиш нещо такова:
PHP:
<?php
$now = time();//взимаме дата с точност до секундите
$end = strtotime("+1 year");//Ето как да използваш тази функция: [url=http://bg2.php.net/strtotime#refsect1-function.strtotime-examples]тук[/url]
$query = mysql_query(
'insert into table
(username, start, end)
values("'.$username.'", '.$now.', '.$end.')'
);
?>
Това беше скрипта за инсертване в базата.
За да вземеш данните в пододящ формат, използвай това:
PHP:
<?php
$query = mysql_query('select start, end from table where username="'.$user.'"');//взимаме началото и края за определения юзер
$res = mysql_fetch_assoc($query);
$start = ( (int) $res['start'] ) / (24 * 60 * 60);//преобразуваме в брой дни
$end = ( (int) $res['end'] ) / (24 * 60 * 60);
$now = time() / (24 * 60 * 60);
echo "Изминаха: ".($now - $start) . " дни.<br>";
echo "Остават: ".($end - $now) . " дни.<br>";
?>

Направих го по подобен начин, понеже когато е само time(); формата който е излиза е просто нелеп. (пример: 0.01.14514.12.14.4)

Проблема идва при добавянето на влидност, там съм го направил в дни (пример: 1 месец = 31дни.) В колоната е 31

И отново не се получава. :)

Другия вариант е да си направя колоните нормални и да вписвам датите ръчно (пример: start: 23.03.2014 end: 25.03.2014). При този вариант как мога да покажа само оставащите дни ?


Защо не пробваш със добавяне в SQL-а на DATEDIFF()... :)
 

Back
Горе