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

Форум PHP

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

 

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

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

тема: Дата и условие if
 
 автор: venzh   (05.08.2006 в 10:40)   письмо автору
 
 

&&&&&&&Эпиграф:&&&&&&&&&
Да ознаменует эта месага начало моего долгого но плодотворного изучения php...
&&&&&&&Сожаления:&&&&&&&&&
Да, как и положено надо извиниться за свою глупость, за отрывание важных людей от дел и т.д. ИЗВИНЯЮСЬ.....

&&&&&&&Вопрос на 5 копеек:&&&&&&&&&
есть оператор if, кот. может проверять даже 2 и более условия ...и есть код...

$date_m_start = 1;
$date_m_end = 1;
$date_d_start = 2;
$date_d_end = 1;

if ($date_m_start > $date_m_end and $date_d_start > $date_d_end)
// if ($date_g_start > $date_g_end )

exit('Хрен тебе, исправляй дату, назад во времени ходить нельзя');


не хитрый код..... направлен на исключение перекрёстной даты.......
Но. Oн не работает даже в таком виде. Не говоря о "прилетаемых" переменных $date_m_start .....
Опытным путём установлено что проверяется только первое условие в if....
В чём "фашисты нагадили" ?
;-)

Да. подзабыл сказать - юзаю денвер с 5 пхп

-Димитрий
Воронеж
PS Торжественно клянусь ньюмессить только если все мои 11 книг по вебу не помогут......

   
 
 автор: JIEXA   (05.08.2006 в 11:00)   письмо автору
 
   для: venzh   (05.08.2006 в 10:40)
 

Потому что между условиями вы указали AND, а так как первое условие у вас не выполняется, то всегда будет false.
Вообщем вот исправленный код:
<?
$date_m_start 
1;
$date_m_end 1;
$date_d_start 2;
$date_d_end 1;

if ((
$date_m_start $date_m_end) or ($date_d_start $date_d_end))
{
    exit(
'Хрен тебе, исправляй дату, назад во времени ходить нельзя');
}
?>

   
 
 автор: venzh   (05.08.2006 в 11:19)   письмо автору
 
   для: JIEXA   (05.08.2006 в 11:00)
 

;-(
Печально но дажи так не работаит.
Вкладываю файлы.
И вообще как оптимально реализовать:
- проверку (исключение) перекрёстных дат
- (!!!!) посчитать количество дней (промежуток между датами)

   
 
 автор: venzh   (05.08.2006 в 11:19)   письмо автору
 
   для: venzh   (05.08.2006 в 11:19)
 

второй файл

ТАк как быть?

   
 
 автор: cheops   (05.08.2006 в 11:35)   письмо автору
 
   для: venzh   (05.08.2006 в 11:19)
 

А цель скрипта какая? Посчтитать количество дней между датами?

   
 
 автор: venzh   (05.08.2006 в 11:39)   письмо автору
 
   для: cheops   (05.08.2006 в 11:35)
 

ну да....
но до этого надо ведь проверьть ввведённые данные....

   
 
 автор: cheops   (05.08.2006 в 11:50)   письмо автору
 
   для: venzh   (05.08.2006 в 11:39)
 

Давайте для начала второй файл перепишем так
<html>
<head>

<title> Тестовая страница </title>
</head>

<body bgcolor="#FAF9C5" >


<table  border="1" >
<?php 
  
if($_POST['date_m_start'] <= 0) exit("Не верный формат месяца для стартовой даты");
  if(
$_POST['date_d_start'] <= 0) exit("Не верный формат дня для стартовой даты");
  if(
$_POST['date_g_start'] <= 0) exit("Не верный формат года для стартовой даты");
  if(
$_POST['date_m_end'] <= 0) exit("Не верный формат месяца для конечной даты");
  if(
$_POST['date_d_end'] <= 0) exit("Не верный формат дня для конечной даты");
  if(
$_POST['date_g_end'] <= 0) exit("Не верный формат года для конечной даты");
  
// Получив POST-переменные следует сформировать дату в 
  // формате UNIXSTAMP, т.е. в виде числа секунд, прошедших
  // с 1 января 1970 года - их удобнее сравнивать
  
$start mktime(000$_POST['date_m_start'], $_POST['date_d_start'], $_POST['date_g_start']);
  
$end mktime(000$_POST['date_m_end'], $_POST['date_d_end'], $_POST['date_g_end']);

  if (
$start $end) exit('Начало интервала позднее конца - так нельзя'); 
?>


</body>
</html>

   
 
 автор: venzh   (05.08.2006 в 12:11)   письмо автору
 
   для: cheops   (05.08.2006 в 11:50)
 

Большое СПС - буду скрипт совершенствовать направление задали, но.....
вопрос почему if с 2мя и более условиями у меня не работает?....
и вообще оно должно работать.... с т.з. документации...

   
 
 автор: koder   (05.08.2006 в 12:39)   письмо автору
 
   для: venzh   (05.08.2006 в 12:11)
 

Ну а если вместо and и or использовать && и || соответственно?

   
 
 автор: venzh   (05.08.2006 в 12:52)   письмо автору
 
   для: koder   (05.08.2006 в 12:39)
 

да пробовал конечно... не фига..... выполняется только первое условие из многих.....
мне важно понять - это глюки только моего php или так в php делать нельзя..... а то наберусь ума, денвер снесу и поставлю нормальную связку апач пхп скюл

   
 
 автор: cheops   (05.08.2006 в 23:38)   письмо автору
 
   для: venzh   (05.08.2006 в 12:11)
 

>вопрос почему if с 2мя и более условиями у меня не работает?
Дело в том, что дата вещь линейная, каждый момент времени либо больше, либо меньше предыдущего момента времени, а когды мы сравниваем разные временные величны вроде месяцев, дней и годов просто одно условие не покатит... так как месяц одной даты может быть больше месяца другой даты, а день наоборот меньше. Лучше переводить дату в линейный формат, в секунды... собственно этот формат и был введён в программирование ради таких сравнений более 30 лет назад.

   
Rambler's Top100
вверх

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