Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970
 
 автор: sasch   (06.06.2006 в 23:26)   письмо автору
 
 

Ребята, как бы мне избавиться от вывода такого:
Warning: date(): Windows does not support dates prior to midnight (00:00:00), January 1, 1970 in z:\home\localhost\www\admin\datecheckA.php on line 15
Вот код:
PS. Мне помогал Trianon. С тех пор я что-то поменяла. Да, register globals=off !!!

<?php
 $prDay
=date('d');
 
$prMonth=date('m');
 
$prYear=date('Y');
 
$curentDate=date('m/d/Y');
 
 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
    }
     
$days 1// days to count
$prev $_POST['datea'];  // previous date 
$prev_tm cvt($prev); // the prev date mark 
$next_tm $prev_tm 3600*24*$days ;  // the future date mark 
if($days$next_tm += (($days 0)? :(-3)) * 3600// summer/winter correction 
$next date("m/d/Y"$next_tm); // the next date  

  
if (empty($_SESSION['datea']) || ($_SESSION['datea']<$curentDate))
   
$_SESSION['datea']=$curentDate;

  if (empty(
$_SESSION['dated']) && !empty($_SESSION['datea'])|| ($_SESSION['dated']<$_SESSION['datea'])) 
    
$_SESSION['dated']=date("m/d/Y",cvt($_SESSION['datea']) + 3600*27); 
    
  
// if ($_SESSION['datea'] < $curentDate)
  // $_SESSION['datea']=$curentDate;
   
  // if ($_SESSION['dated']<$_SESSION['datea'])
  // $_SESSION['dated']=date("m/d/Y",cvt($_SESSION['datea']) + 3600*27);
  
    
if(isset($_POST['datea']) && isset($_POST['dated'])) 
    { 
      
$datea htmlspecialchars($_SESSION['datea']);     $d1 cvt($datea); 
      
$dated htmlspecialchars($_SESSION['dated']);     $d2 cvt($dated); 
      
   
//   if((false === $d1)||(false === $d2))  
      
if((false === $d1)||(false===$d2)){    
      
$_SESSION['datea']=date('m/d/Y');
      
$_SESSION['dated']=date("m/d/Y",cvt($_SESSION['datea']) + 3600*27);
     
// if(($d1<date('m/d/Y'))OR($d2<$d1))
      
if($d2<$d1)
      
$_SESSION['dated']=date("m/d/Y",cvt($_SESSION['datea']) + 3600*27);
      echo(
"<div id=msg-error><img src=../images/icons/attantion.jpg width=18 height=16 />
            <p>Dates You have entered did not respond.</p>
              <ul><li><a>The system has set your travel dates to the default.</a></a></li>
              <li><a>If you wish to request rates and availability for other dates,
              please, set your travel dates from the calendar only.</a></li>
              </ul>
            </div>"
);
            }
     
     
$diff intval(($_SESSION['dated'] - $_SESSION['datea']+3600*3)/86400);            
     if ((
$diff 90))
      echo(
"<div id=msg-error><img src=../images/icons/attantion.jpg width=18 height=16 />
            <p>Attantion. The length of each stay cannot be more than 90 consecutive nights.</p>
             <ul>
              <li><a>You have requested rates and availability for a continuous stay lasting more than 
              90 nights. Please, change your travel dates to less than 90 nights.</li>
              <li>If you want to reserve more than 90 consecutive nights, please, contact us. To view our list 
              of contact information, please, click here.</li> 
              <li>To reach us electronically, click here.</a></li>
            </ul> 
            </div>"
);
                    

 
// If dates are fine - showing the results for needed hotels!  
    
if ($diff<=90)//true == $d1 && true == $d2 && $diff<=90
     
require_once "searcher.php";
     }
    else { } 
?>

Если тут что-то не так, простите, учимся!!
Спасибо.

   
 
 автор: cheops   (07.06.2006 в 01:13)   письмо автору
 
   для: sasch   (06.06.2006 в 23:26)
 

У вас судя по всему массив $tri нули содержит... выведите его дамп - перед строкой
<?php
  
echo "<pre>";
  
print_r($tri);
  echo 
"</pre>";
  
$tm mktime(0,0,0,$tri[0], $tri[1], $tri[2]);
?>

Что в нём?

   
 
 автор: sasch   (07.06.2006 в 09:15)   письмо автору
 
   для: cheops   (07.06.2006 в 01:13)
 

Если я вас правильно поняла, то

<?php 
  
echo "<pre>"
  
print_r($tri); 
  echo 
"</pre>"
  
$tm mktime(0,0,0,$tri[0], $tri[1], $tri[2]); 
  echo 
"$tm";
?>

выводит -1
Что делать?

   
 
 автор: sasch   (07.06.2006 в 09:59)   письмо автору
 
   для: sasch   (07.06.2006 в 09:15)
 

Я видимо нашла решение этой проблеме, вот только еще не знаю правильно ли...

 $curentDate=date('m/d/Y');
 
  if (empty($tri) || ($tri<$curentDate))
   $tri=$curentDate;

 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; 
    }

Теперь, пока, ошибка не появляется..
Такое решение является допустимым? Спасибо.

   
 
 автор: Trianon   (07.06.2006 в 10:01)   письмо автору
 
   для: sasch   (06.06.2006 в 23:26)
 

Вы бы описали задачу более подробно. Как то:
Имеется форма из следующих полей. Хочу, чтобы она заполнялась так-то и так-то. Хочу, чтобы данные, которые в ней вводятся, проверялись и обрабатывались так-то и так-то.
Сейчас форму выводит следующий скрипт
...
, а обработкой данных из формы занимается следующий.

   
 
 автор: sasch   (07.06.2006 в 10:26)   письмо автору
21 Кб
 
   для: Trianon   (07.06.2006 в 10:01)
 

1. Из формы №1 (см. рис. 1) посылается запрос. Вся введенная клиентом информация должна проверяться перед выводом инфор. на другой странице (рис №2). Камнем преткновения, для меня, явилось проверка дат (остальным еще не занималась). Я подумала и решила, что многократный вывод ошибки может раздрожать клиентов сайта и сделала вот что: если даты вводятся с ошибками, то вместо них подставляются the default dates, но выводится сообщение об этом факте дабы если клиент хотел поставить другие даты, но ошибся..
И вот вдруг находится такой умник который вводит в поля дат все что ему приходит на ум и скрипт выводит ту надпись что в начале темы. Некрасиво! Вот я и обратилась с просьбой о помощи...

   
 
 автор: sasch   (07.06.2006 в 10:33)   письмо автору
 
   для: sasch   (07.06.2006 в 10:26)
 

После того как я прописала

...
if (empty($tri) || ($tri<$curentDate)) 
   $tri=$curentDate; 

function cvt($ds) 
    { 
        if(!is_string($ds))
...

вывода ошибки пока не видела, но не знаю правильно ли так как я сделала. Если можно исправте , покажите как надо, или намекните я подумаю. Спасибо..

   
 
 автор: Trianon   (07.06.2006 в 10:42)   письмо автору
 
   для: sasch   (07.06.2006 в 10:33)
 

Я предлагал Вам исправленную функцию, которая проверяет вводимые данные без ошибок.
Вот эту:


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; 
    } 

Но Вы почему-то от нее отказались.
Очень советую вернуться к ней.

   
 
 автор: Trianon   (07.06.2006 в 10:37)   письмо автору
 
   для: sasch   (07.06.2006 в 10:26)
 

А код скриптов-то где?
И что, в конечном итоге, должно происходить с датами? После того, как они проверены.

   
 
 автор: sasch   (07.06.2006 в 10:46)   письмо автору
 
   для: Trianon   (07.06.2006 в 10:37)
 

А да простите. Скрипт 1 (see attached)

   
 
 автор: sasch   (07.06.2006 в 10:46)   письмо автору
 
   для: sasch   (07.06.2006 в 10:46)
 

Скрипт 2 (see attached)

   
 
 автор: Trianon   (07.06.2006 в 11:03)   письмо автору
 
   для: sasch   (07.06.2006 в 10:46)
 

там rtf-файлы.

   
 
 автор: sasch   (07.06.2006 в 11:08)   письмо автору
 
   для: Trianon   (07.06.2006 в 11:03)
 

там rtf-файлы. Так нельзя? Я не знала..

   
 
 автор: Trianon   (07.06.2006 в 11:18)   письмо автору
 
   для: sasch   (07.06.2006 в 11:08)
 

Можно. Только проще было прямо results.php прикрепить.
Хуже другое. Там часть отсутствует. Буквально в первой строке видим:

if (empty($_POST['datea']) || ($_POST['datea']<$curentDate))  

откуда берется это $curentDate?

   
 
 автор: sasch   (07.06.2006 в 11:22)   письмо автору
 
   для: Trianon   (07.06.2006 в 11:18)
 

Из начала первого скрипта... 5-ая строка

$curentDate=date('m/d/Y'); 

   
 
 автор: Trianon   (07.06.2006 в 11:26)   письмо автору
 
   для: sasch   (07.06.2006 в 11:22)
 

Вот начало первого скрипта: из rtf-файла Вашего сообщения (sash 07.06.2006 в 10:46)

<?php ...
if (empty(
$_POST['datea']) || ($_POST['datea']<$curentDate))
   
$_POST['datea']=$curentDate;

   
 
 автор: sasch   (07.06.2006 в 11:35)   письмо автору
 
   для: Trianon   (07.06.2006 в 11:26)
 

Посмотрите пожалуйста .txt файл, что я переслала следом

   
 
 автор: Trianon   (07.06.2006 в 11:48)   письмо автору
 
   для: sasch   (07.06.2006 в 11:35)
 

А во втором файле, тако впечатление, что все $_POST скопом заменены на $_SESSION.
И это при том, что механизм сессий не запущен.

   
 
 автор: sasch   (07.06.2006 в 12:00)   письмо автору
 
   для: Trianon   (07.06.2006 в 11:48)
 

Да вы правы session_start() не видно т.к. эти файлы прикреплены by require_once...

   
 
 автор: Trianon   (07.06.2006 в 12:34)   письмо автору
 
   для: sasch   (07.06.2006 в 12:00)
 

первый Ваш файл я слегка перетряс, чтобы его можно было без зубной боли читать и понимать:


<?php
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 || $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;
    }
 
$curentDate=date('m/d/Y');
   
// переносим в переменные данные из следующих полей формы:
   
foreach(
     array(
'city''location''status''adults''kids''rooms''datea''dated')
       as 
$varname)
         $
$varname = isset($_POST[$varname]) ? $_POST[$varname] : '';

   if(
$datea == ''// если первая дата не задана - ставим текущую.
      
$datea date('m/d/Y');
   if(
$dated == ''// если вторая дата не задана  - ставим на день позже.первая дата не задана - ставим текущую.
      
$dated =  date('m/d/Y'cvt($datea)+3600*26);



?>
        <div id="pod">
                <form name="reserve" action="results.php" method="POST">
                        <div class="label-top-with-util">
                        <label for="city">Select a city:</label></div>
                        <select name="city" style="width:168px;">
                        <option value="0" >Select city</option>
                        <option value="moscow"<?php if($city=='moscow') echo "selected"?>>Moscow City</option>
                        <option value="stpeter"<?php if($city=='stpeter') echo "selected"?>>St. Petersburg</option>
                        </select>
                <br>
                        <label for="location">Select a location:</label>
                <br>
                        <select name="location" style="width:168px">
                        <option value="0" >Select Location</option>
                        <option value="dt"<?php if($location=='dt') echo "selected"?>>City - Downtown</option>
                        <option value="dt2"<?php if($location=='dt2') echo "selected"?>>City - Within 2 miles</option>
                        <option value="dt3"<?php if($location=='dt3') echo "selected"?>>City - Within 3 miles</option>
                        <option value="dt4"<?php if($location=='dt4') echo "selected"?>>City - Within 4 miles and more</option>
                        <option value="apt"<?php if($location=='apt') echo "selected"?>>Near Airports</option>
                        </select>
                <br>
                        <label for="status">Select a hotel status:</label>
                <br>
                        <select name="status" style="width:168px;">
                        <option value="0" >Select Hotel Status</option>
                        <option value="5"<?php if($status==5) echo "selected"?>>Five Star Hotel</option>
                        <option value="4"<?php if($status==4) echo "selected"?>>Four Star Hotel</option>
                        <option value="3"<?php if($status==3) echo "selected"?>>Three Star Hotel</option>
                        </select>
                <br>
<div class="dateselect">
        <div class="ADULTS">
                <label for="rumnum">Adults:</label>
        <br>
        <select class="smallsellect" name="adults">
                <option value="1"<?php if($adults=='1') echo "selected"?>>1</option>
            <option value="2"<?php if($adults=='2') echo "selected"?>>2</option>
                <option value="3"<?php if($adults=='3') echo "selected"?>>3</option>
                </select>
        <br>
<!--         <label class="label-description" for="adults">per room</label> -->
        </div>
        <br>
        <div class="KIDS">
                <label for="kids">Kids:</label>
        <br>
        <select class="smallsellect" name="kids">
                <option value="0"<?php if($kids=='0') echo "selected"?>>0</option>
                <option value="1"<?php if($kids=='1') echo "selected"?>>1</option>
                <option value="2"<?php if($kids=='2') echo "selected"?>>2</option>
                <option value="3"<?php if($kids=='3') echo "selected"?>>3</option>
                </select>
        <br>
<!--                <label class="label-description" for="kids">per room</label> -->
    </div>
        <br>
        <div class="ROOM">
                <label for="rooms">Rooms:</label>
        <br>
        <select class="smallsellect" name="rumnum">
                <option value="1"<?php if($rooms=='1') echo "selected"?>>1</option>
<!--                <option value="2"<?php if($rooms=='2') echo "selected"?>>2</option>
                    <option value="3"<?php if($rooms=='3') echo "selected"?>>3</option>
-->
                </select>
        <br>
    </div>
                        <label for="status">Select check-in date:</label>
                <br>
<input class="date" name="datea" value="<?php echo $datea?>"><a href="javascript:void(0)" onclick="if(self.gfPop)gfPop.fStartPop(document.reserve.datea,document.reserve.dated);return false;" HIDEFOCUS><img class="PopcalTrigger" align="absmiddle" src="../private/cal/cal.gif" width="20" height="16" border="0" alt=""></a>
                <br>
                        <label for="status">Select check-out date:</label>
                <br>
<input class="date" name="dated" value="<?php echo $dated?>"><a href="javascript:void(0)" onclick="if(self.gfPop)gfPop.fEndPop(document.reserve.datea,document.reserve.dated);return false;" HIDEFOCUS><img class="PopcalTrigger" align="absmiddle" src="../private/cal/cal.gif" width="20" height="16" border="0" alt=""></a>
</div>
<div class="go-button">
                        <input class="submit go-button" type="submit" name="go" value="Check Availability">
                        <input type=hidden name=search value=search>
                        </div>
 <!-- <div class=hr></div>-->
                </form>
        </div>

   
 
 автор: Trianon   (07.06.2006 в 12:58)   письмо автору
 
   для: Trianon   (07.06.2006 в 12:34)
 

а со вторым что делать - не знаю. Потому что логика, по которой они комбинируются, друг друга запускают, и обмениваются данными, до меня не доходит.
В любом случае, функцию пересчета времени я исправил. Простите еще раз, что не посмотрел сразу.

   
 
 автор: sasch   (07.06.2006 в 13:17)   письмо автору
 
   для: Trianon   (07.06.2006 в 12:58)
 

Да что вы извиняетесь, если бы не вы то я все еще думала над этим. А работают они так:
Первый скрипт самастоятелен. В него не поступает ни какой информации. Когда человек заходит на строницу он показывает defualt dates. Человек задает параметры по которым следует вести поиск и передает эти параметры другому, второму скрипту. Тот, в свою очередь, производит проверку посланных данных и если все ок, то разрешает вывести искомый запрос.
Если даты заданы неверно он меняет их на default dates, если разница $d2-$d1 больше 90, выводит сообщение.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования