Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> расчет цены ошибка в коде 
:(
    Опции темы
rulez22
Дата 12.4.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 7.4.2007

Репутация: нет
Всего: нет



В общем пытаюсь сделать расчет цены резервирования отеля, цены заданы периодами времени в массиве в коде скрипта, расчет должен быть в зависимости от заданных дат и считать между ними складывая заданный диапазон выпадает на разные периоды, считает почему-то только по цене последнего периода в диапазоне, а должно складывать в пределах заданных дат. Считать по количеству людей пока не доделала так что не обращайте внимания. Хорошо бы еще узнать как реализовать ошибку если заданные пользователем даты выпадают за диапазон цен заданных в самом скрипте. Желающих помочь заранее блогадарю.
Код состоит из 2 скриптов:
page1.php
Код

<?php
$minpeople = '1';
$maxpeople = '12';
//-------------------------------------
$startDay = '1';
$endDay = '31';

$startMonth = '1';
$endMonth = '12';

//current year
$startYear = date("Y");
//current year + 8 years
$endYear = date("Y")+8;

$peoplemenu = getdates($minpeople, $maxpeople);
$dayMenu = $monthMenu = getdates($startDay, $endDay);
$monthMenu = getdates($startMonth, $endMonth);
$yearMenu = getdates($startYear, $endYear);
getForm( $monthMenu,$dayMenu, $yearMenu,$peoplemenu);



function getdates($start,$end){
         //функция рисует пункты меню для  <select>
$menu='';
for ($i=$start; $i<=$end; $i++) {$menu .= "\r\n<option value=\"$i\">$i</option>\n";}
return $menu;
}


function getForm($monthMenu, $dayMenu, $yearMenu,$peoplemenu)
{
echo <<<HWRZ
<form name="dateForm" action="page2.php" method="POST"></br>
Check-in date:
<select name = "startDay">
$dayMenu
</select>
/
<select name = "startMonth">
$monthMenu
</select>
/
<select name = "startYear">
$yearMenu
</select><br />
Check-out date:
<select name = "endDay">
$dayMenu
</select>
/
<select name = "endMonth">
$monthMenu
</select>
/
<select name = "endYear">
$yearMenu
</select>
<br /><br />
People:&nbsp;
<select name = "people">
$peoplemenu
</select>
<br /><br /><input type="submit" name="submitDate" value="Submit">
</form>
HWRZ;
}// end getForm
?>


page2.php
Код

<?php
//задаем цены на периоды времени
$priceArr[] = array('first_day'=>mktime(0,0,0,1,1,2007), 'price'=>5);
$priceArr[] = array('first_day'=>mktime(0,0,0,3,1,2007), 'price'=>15);
$priceArr[] = array('first_day'=>mktime(0,0,0,6,1,2007), 'price'=>35);
$priceArr[] = array('first_day'=>mktime(0,0,0,9,1,2007), 'price'=>20);
$priceArr[] = array('first_day'=>mktime(0,0,0,12,1,2007), 'price'=>5);

$date_check_in = mktime(0,0,0,$_POST['startMonth'],$_POST['startDay'],$_POST['startYear']);
$date_check_out = mktime(0,0,0,$_POST['endMonth'],$_POST['endDay'],$_POST['endYear']);

foreach ($priceArr as $key=>$period){
    if ($period['first_day']<$date_check_in) continue;
    if ($period['first_day']>$date_check_out) break;
    $txt =  date('d.m.Y', max($period['first_day'], $date_check_in))." - ".date('d.m.Y', min ( strtotime( "-1 day", $priceArr[$key+1]['first_day']), $date_check_out)).": ".$period['price'];
    $txt2 = $period['price'];
}

//проверяем правильно ли введены данные и введенеы ли вообще
if (isset($_POST['endMonth'],$_POST['endDay'],$_POST['endYear']) and checkdate($_POST['endMonth'],$_POST['endDay'],$_POST['endYear'])) $okout=true;
else {
echo 'Please go back and correct the check-out date<br /><br />';
echo "<a href=\"javascript:history.go(-1)\" class=\"text\">Back</a><br />";
$okout=false;}

if (isset($_POST['startMonth'],$_POST['startDay'],$_POST['startYear']) and checkdate($_POST['startMonth'],$_POST['startDay'],$_POST['startYear'])) $okin=true;
else {
echo 'Please go back and correct the check-in date<br /><br />';
echo "<a href=\"javascript:history.go(-1)\" class=\"text\">Back</a><br />";
$okin=false;}


//вычисляем разницу в секундах между датами
$dateDiff = gmmktime(0,0,0,$_POST['endMonth'],$_POST['endDay'],$_POST['endYear']) - gmmktime(0,0,0,$_POST['startMonth'],$_POST['startDay'],$_POST['startYear']);

if (isset($_POST['submitDate']) and $okin and $okout)
{
//так ка один деть состоит из 60*60*24 секунд делаем обратную операцию и печатаем ответ
echo 'Your booking is from ' . $_POST['startDay'] . '/' . $_POST['startMonth'] . '/' . $_POST['startYear'] . ' to ' . $_POST['endDay'] . '/' . $_POST['endMonth'] . '/' . $_POST['endYear'] . '<br />';
echo 'for a period of ' .(round($dateDiff/60/60/24)). ' nights<br />';
echo 'The price would be ' .((round($dateDiff/60/60/24)) * $txt2). ' pounds<br />';

}//end if

?>

PM MAIL   Вверх
Всемогущий
Дата 12.4.2007, 20:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 25.6.2006
Где: Челябинск

Репутация: 5
Всего: 13



простите меня Модераторы,не сочтите за флейм.

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


--------------------
Цитата(smartov @  16.1.2007,  13:26 Найти цитируемый пост)
Видел я PHP код, который пишут наСильники, никогда на php не писавшие  :D  То еще зрелище. Все пытаются сделать руками и через ж (как в С привыкли). Все пытаются память освобождать итд итп. 
PM MAIL ICQ   Вверх
SelenIT
Дата 12.4.2007, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



rulez22, уточните пожалуйста, что подразумевается под 
Цитата(rulez22 @  12.4.2007,  14:22 Найти цитируемый пост)
если заданные пользователем даты выпадают за диапазон цен заданных в самом скрипте.

В Вашем примере, границы этого диапазона с 1 января по 1 декабря 2007? Или, может быть, по 1 января 2008?

Что же до самой ошибки - очевидно, что вычислять сумму нужно в цикле, там, где Вы сравниваете начальную и конечную даты пользователя с Вашими интервалами. Одной переменной $txt2 Вы не отделаетесь - нужно накапливать сумму (($txt/60/60/24) * $txt2) каждого захваченного отрезка внутри цикла, именно она и будет общей стоимостью заказа...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
rulez22
Дата 12.4.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 7.4.2007

Репутация: нет
Всего: нет



диапазон с 1 января по 1 декабря 2007, что касается каждого отрезка это итак ясно, вопрос в том как именно это реализовать? Ведь заданный пользователем диапазон может выпасть на разные промежутки заданные времени и соответствующих им цен в скрипте
PM MAIL   Вверх
SelenIT
Дата 12.4.2007, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



rulez22, так Вы же перебираете все эти отрезки в цикле (строчки 11-15), и на каждом отрезке (на каждом проходе цикла) знаете и длительность этого отрезка, и цену каждого его дня. Все, что Вам нужно - это перемножить эти числа и прибавить результат к общей сумме. На выходе из цикла у Вас как раз получится искомая стоимость...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
rulez22
Дата 13.4.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 7.4.2007

Репутация: нет
Всего: нет



не понятно (($txt/60/60/24) * $txt2), ведь $txt это диапазон с ценой, а $txt2 это только цена заданного диапазона, как вы их умножаете?
PM MAIL   Вверх
SelenIT
Дата 13.4.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



rulez22, а что есть цена за период, как не цена одного дня, умноженная на количество дней в периоде? А у Вас фактически может захватиться несколько периодов, которые нужно просуммировать...

Или я не учел какого-то очевидного для Вас нюанса?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0532 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.