|
| |
|
|
| |
для: sasch
(27.05.2006 в 12:43)
| | | Как оказалось, is_integer работает совсем не так как описан. Поэтому правильной версией будет следующая:
function cvt($ds)
{
if(!is_string($ds))
return false;
$tri = explode('/',$ds);
if(count($tri) != 3)
return false;
list($m, $d, $y) = $tri;
$m = intval($m); $d = intval($d); $y = intval($y);
if($m < 1|| $m > 12 || $d < 1 || $d > 31 || $y < 1970 || $y > 2030)
return false;
$tm = mktime(0,0,0,$m, $d, $y);
$dt = date("m/d/Y", $tm);
if($dt != $ds)
return false;
return $tm;
}
|
прошу прощения, что сразу не проверил.
Книги по php приведены в правом верхнем углу окна этого форума. Непохие такие книги.
ссылка на онлайн-учебник есть опять же вверху. | |
| |
|
|
| |
|
|
| |
для: sasch
(27.05.2006 в 12:26)
| | | А если заменить старую функцию новой,
function cvt($ds)
{
if(!is_string($ds))
return false;
$tri = explode('/',$ds);
if(count($tri) != 3)
return false;
list($m, $d, $y) = $tri;
if(!is_integer($m) || !is_integer($d) || !is_integer($y) )
return false;
$m = intval($m); $d = intval($d); $y = intval($y);
if($m < 1|| $m > 12 || $d < 1 || $d > 31 || $y < 1970 || $y > 2030)
return false;
$tm = mktime(0,0,0,$m, $d, $y);
$dt = date("m/d/Y", $tm);
if($dt != $ds)
return false;
return $tm;
}
|
то преобразование непроставленной даты происходит на 01/02/1970, а не на следующий день. Оставляю в прежнем виде. Эта функция почему то не работает, а старая отвечает всем моим запросам.
Посоветуйте книгу по PHP. Что бы просто и понятно... Я ни чего не знаю - это мой вывод. | |
| |
|
|
| |
|
|
| |
для: sasch
(27.05.2006 в 12:19)
| | | Register_globals в состоянии OFF и все работает. Вы про это говорили? | |
| |
|
|
| |
|
|
| |
для: Trianon
(27.05.2006 в 12:12)
| | | Что вы имеете в виду? Надо отключить reg_glob? Я знаю, что советуют его держать OFF. Все скрипты у меня довольно просты и не требуют включения этой функции. Сейчас заблокирую. | |
| |
|
|
| |
|
|
| |
для: sasch
(27.05.2006 в 11:58)
| | | Можно проверять вводимые строки более аккуратно:
function cvt($ds)
{
if(!is_string($ds))
return false;
$tri = explode('/',$ds);
if(count($tri) != 3)
return false;
list($m, $d, $y) = $tri;
if(!is_integer($m) || !is_integer($d) || !is_integer($y) )
return false;
$m = intval($m); $d = intval($d); $y = intval($y);
if($m < 1|| $m > 12 || $d < 1 || $d > 31 || $y < 1970 || $y > 2030)
return false;
$tm = mktime(0,0,0,$m, $d, $y);
$dt = date("m/d/Y", $tm);
if($dt != $ds)
return false;
return $tm;
}
|
еще:
Вот этот код явно повторяет мой.
list($m, $d, $y) = explode("/", $_POST['datea']);
$datea = mktime(0, 0, 0, $m, $d, $y);
list($m, $d, $y) = explode("/", $_POST['dated']);
$dated = mktime(0, 0, 0, $m, $d, $y);
if( $datea > $dated ) {
|
его вполне можно поменять на
>Знаете, убрала проверку на if datea>dated и вроде бы все
>встало на свои места. Она не нужна!
Очень плохо. У Вас вылезают побочные эффекты из-за того, похоже, что скрипт написан в стиле regisrer_globals... а поскольку всего скрипта не видно, даже не ясно, почему так происходит, и чем может кончиться. | |
| |
|
|
| |
|
|
| |
для: sasch
(27.05.2006 в 11:44)
| | | Знаете, убрала проверку на if datea>dated и вроде бы все встало на свои места. Она не нужна! | |
| |
|
|
| |
|
|
| |
для: sasch
(27.05.2006 в 11:30)
| | | Ах еще одна штука, даже если все ОК то при переходе на другую страницу эти даты принимают вид: Пр. 05/27/2006 на 1148673600. | |
| |
|
|
| |
|
|
| |
для: sasch
(26.05.2006 в 20:15)
| | | Все работает отлично. Но, если кто-нибудь введет дату типа того, что показано во влож. файле, то выводится ошибка. Отлично понимаю, что нормальный человек не будет вводить все подряд, но это имеет место быть и надо фильтровать введенную инфу. Сама не исправлю, но....
Так же выкладываю все что получилось для тех кого этот вопрос может зантересовать. Это хороший код!
Хочу еще раз поблагодарить Trianonа за помощь.
<?php
$days = 1; // сколько дней отсчитать
$prev = $_POST['datea']; // предыдущая дата
$prev_tm = cvt($prev); // метка времени предыдущей даты
$next_tm = $prev_tm + 3600*24*$days ; // метка времени следующей даты
if($days) $next_tm += (($days > 0)? 3 :(-3)) * 3600; // коррекция летнего/зимнего времени
$next = date("m/d/Y", $next_tm); // следующая дата
if (empty($_POST['dated']) && !empty($_POST['datea']) )
$_POST['dated']=date("m/d/Y",cvt($_POST['datea']) + 3600*27);
function cvt($ds)
{
if(!is_string($ds))
return false;
$tri = explode('/',$ds);
if(count($tri) != 3)
return false;
$tm = mktime(0,0,0,$tri[0], $tri[1], $tri[2]);
$dt = date("m/d/Y", $tm);
if($dt != $ds)
return false;
return $tm;
}
if(isset($_POST['datea']) && isset($_POST['dated']) )
{
$datea = $_POST['datea']; $d1 = cvt($datea);
$dated = $_POST['dated']; $d2 = cvt($dated);
if(false === $d1)
echo("<div id=msg-error><img src=../images/icons/attantion.jpg width=18 height=16 />
<p>The check-in date does not respond.</p>
<ul>
<li><a>Please, select a date from the calendar only.</a></li>
</ul>
</div>");
if(false === $d2)
echo("<div id=msg-error><img src=../images/icons/attantion.jpg width=18 height=16 />
<p>The check-out date does not respond.</p>
<ul>
<li><a>Please, select a date from the calendar only.</a></li>
</ul>
</div>");
$v = intval(($d2 - $d1+3600*3)/86400);
// echo "Time interval between $datea and $dated is $v days<br>";
}
else
{
}
// If datea is > dated. Print out the error msg.
list($m, $d, $y) = explode("/", $_POST['datea']);
$datea = mktime(0, 0, 0, $m, $d, $y);
list($m, $d, $y) = explode("/", $_POST['dated']);
$dated = mktime(0, 0, 0, $m, $d, $y);
if( $datea > $dated ) {
echo "<div id=msg-error><img src=../images/icons/attantion.jpg width=18 height=16 />
<p>Please, check entered dates.</p>
<ul>
<li><a>The check-out date must occur after the check-in date. Please change the check-in date.</a></li>
</ul>
</div>";
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(26.05.2006 в 20:10)
| | | Ну почему я не пошла на программиста учиться. А водь хотела. ! До завтра. | |
| |
|
|
| |
|
|
| |
для: sasch
(26.05.2006 в 19:47)
| | | Так а почему оно не должно работать?
Я взял код, который Вы показали, выкинул из него все промежуточные переменные и пояснения, которые там были. И чуть упростил оставив случай расчета лишь следующего дня.
Функцию преобразования даты в метку тоже можно вместо
function cvt($ds)
{
if(!is_string($ds))
return false;
$tri = explode('/',$ds);
if(count($tri) != 3)
return false;
$tm = mktime(0,0,0,$tri[0], $tri[1], $tri[2]);
$dt = date("m/d/Y", $tm);
if($dt != $ds)
return false;
return $tm;
}
|
сделать такой:
function cvt($ds) { if(count($tri = explode('/',$ds)) != 3) return false;
if(date("m/d/Y", ($tm = mktime(0,0,0,$tri[0], $tri[1], $tri[2]))) != $ds) return false;
return $tm; }
|
И тоже по сути не изменится ничего, кроме оформления... . | |
| |
|
| |
|