Все выложено здесь: http://stopline.org/calc.php

как видно саму форму, создал. с чего начать потом? описание переменных, функций... и желательно чтобы это все было в этом же файле (calc.php)
--
Спустя 33 минуты, 51 секунда (26.08.2012 - 19:44) Лена написал(а):
Начать с проектирования базы - неправильно спроектируете, после будут проблемы.
Из того, что есть, навскидку вырисовывается 3 таблицы:
country
id,country_name,tax (налог в этой стране)
delivery_option
id,id_country(внешний ключ с таблицей стран),date_to(фиксир. срок доставки),max_weight,max_cost
delivery (конкретная доставка)
id,kg(кол-во доставляемого в кг),cost_kg(стоимость за кг),to_date(конечная дата доставки),courier(1/0 - забор курьером)
Что дальше вызывает трудности? Вам остается расчитать стоимость конкретной доставки, у вас что-нибудь, кроме формы уже написано? Там все через if-else делается, используя информацию в базе. Проверка веса - через ajax.
Из того, что есть, навскидку вырисовывается 3 таблицы:
country
id,country_name,tax (налог в этой стране)
delivery_option
id,id_country(внешний ключ с таблицей стран),date_to(фиксир. срок доставки),max_weight,max_cost
delivery (конкретная доставка)
id,kg(кол-во доставляемого в кг),cost_kg(стоимость за кг),to_date(конечная дата доставки),courier(1/0 - забор курьером)
Что дальше вызывает трудности? Вам остается расчитать стоимость конкретной доставки, у вас что-нибудь, кроме формы уже написано? Там все через if-else делается, используя информацию в базе. Проверка веса - через ajax.
Спустя 1 час, 35 минут, 1 секунда (26.08.2012 - 21:19) iskatel2000 написал(а):
оу, как все... может базу данных не использовать, данных то не много может просто все описать в самом файле? а то эти запросы... мне пжл ток начать а дальше я сам пойду
Спустя 13 минут (26.08.2012 - 21:32) bodja написал(а):
Цитата |
оу, как все... может базу данных не использовать, данных то не много может просто все описать в самом файле? а то эти запросы... мне пжл ток начать а дальше я сам пойду |
Такие вещи делаются вообще JS ,тем более если данных немного.
Спустя 13 часов, 50 минут, 44 секунды (27.08.2012 - 11:22) iskatel2000 написал(а):
Народ, подскажите просто как написать одну функцию на одну страну... потому что формула разная будет для каждой страны...
и еще вопрос, как сделать чтобы как только выбрал страну чтобы эти поля (Cроки доставки, Mаксимальный вес, Mаксимальная заявленная стоимость) сразу показывали значения... т.е. не после нажатия а сразу ... потому что они хранят постоянные данные
и еще вопрос, как сделать чтобы как только выбрал страну чтобы эти поля (Cроки доставки, Mаксимальный вес, Mаксимальная заявленная стоимость) сразу показывали значения... т.е. не после нажатия а сразу ... потому что они хранят постоянные данные
Спустя 29 минут, 48 секунд (27.08.2012 - 11:52) Игорь_Vasinsky написал(а):
нужны навыки JS, я щас на работе, поэтому некогда расписывать
смысл прост, нужно читать value инпутов и после того как все инпуты считаны запустить функцию ( onclick(getData();) - на кнопку расчитать )
получить value c элемента можно, например, знав его ID
при этом стоит учитывать, что производятся арифметические действия, и перед самой формулой нужно все циферные переменные обработать parseInt() или parseFloat() (т.е. указать тип), смотря что за цифры
всё работает в реал тайме - без перезагрузки.
смысл прост, нужно читать value инпутов и после того как все инпуты считаны запустить функцию ( onclick(getData();) - на кнопку расчитать )
function getData(страна, вес, курьер)
{
//вычесления
return result
// а точнее в твоём случае использовать innerHTML = result; для блока куда ты хочешь вывести результат
}
получить value c элемента можно, например, знав его ID
document.getElementById('ID инпута').value()
при этом стоит учитывать, что производятся арифметические действия, и перед самой формулой нужно все циферные переменные обработать parseInt() или parseFloat() (т.е. указать тип), смотря что за цифры
всё работает в реал тайме - без перезагрузки.
Спустя 9 минут, 43 секунды (27.08.2012 - 12:02) iskatel2000 написал(а):
видел один подобный исходник на JS
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Калькулятор на JavaScript</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript">
/*
* Функция подсчета стоимости услуг на создания дизайна сайта
*/
function calc() {
var type_design = document.getElementById("type_design"); //получаем ссылку на элемент Select (Тип дизайна)
var is_html = document.getElementById("is_html"); //получаем ссылку на чекбокс (Требуется верстка?)
var count = document.getElementById("count"); //получаем ссылку на элемент input (Кол-во вариантов)
var result = document.getElementById("result"); //получаем ссылку на элемент span, в него будем писать стоимость дизайна
var price = 0;
price += parseInt(type_design.options[type_design.selectedIndex].value);
price += (is_html.checked == true) ? parseInt(is_html.value) : 0;
price = parseInt(count.value) * price;
result.innerHTML = price;
}
</script>
</head>
<body>
<b>Тип дизайна:</b><br/>
<select onchange="calc()" id="type_design">
<option value="0">Выбрать</option>
<option value="5000">Простой дизайн сайта</option>
<option value="7000">Сложный дизайн сайта</option>
<option value="10000">Дизайн интернет-магазина</option>
</select><br/>
<input type="checkbox" onchange="calc()" value="5" id="is_html" /> <label for="is_html">Забор курьера</label>
<br/>
Вес: <input type="text" id="count" value="1" onchange="calc()" />
<div>Стоимость пересылки: <span id="result">0</span> руб.</div>
</body>
</html>
Спустя 5 минут, 17 секунд (27.08.2012 - 12:07) Shuriken написал(а):
Твой пример:
Цитата |
Стоимость считается по формуле (пример Беларусь, за 1 кг=2,7 налог=10, минимальная сумма=21): 20 кг без курьера: 20*2,7+10=64 25 кг с курьером 25*2,7+10+5+1,81=84,31 3 кг без курьера:3*2,7+10=21 |
Рассчитывается приблизительно так:
<?
if (isset ($_POST['ves']))
{
$res=$_POST['ves']*2.7+10;
if (!empty($_POST['yes']))
{
$res=$res+5;
}
if ($res>77.47)
{
$res=$res+1.81;
}
if ($res<21)
{
$res=21;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Документ без названия</title>
</head>
<body>
<form action="calc.php" method="post">
<p>
<select name="contry" >
<option value="">Страна</option>
<option value=""></option>
<option value="Азербайджан">Азербайджан</option>
<option value=" Армения"> Армения</option>
<option value=" Белоруссия"> Белоруссия</option>
<option value=" Грузия"> Грузия</option>
<option value=" Казахстан"> Казахстан</option>
<option value=" Киргизия"> Киргизия</option>
<option value=" Латвия"> Латвия</option>
<option value=" Литва"> Литва</option>
<option value=" Молдова"> Молдова</option>
<option value=" Польша"> Польша</option>
<option value=" Россия"> Россия</option>
<option value=" Узбекистан"> Узбекистан</option>
<option value=" Украина"> Украина</option>
<option value=" Эстония"> Эстония</option>
</select>
<br>
Вес: <input type="text" name="ves" />
<br>
<input type="checkbox" name="yes" />
Забор курьером
<br>
<input type="submit" name="calc" value="Рассчитать"/>
</p>
</form>
<strong>Результат:</strong>
<table width="444" border="1">
<tr>
<td width="349">Стоимость пересылки</td>
<td width="79"><? echo $res; ?></td>
</tr>
<tr>
<td>Cроки доставки</td>
<td> </td>
</tr>
<tr>
<td>Mаксимальный вес</td>
<td> </td>
</tr>
<tr>
<td>Mаксимальная заявленная стоимость </td>
<td> </td>
</tr>
</table>
</body>
</html>
Если не хочешь использовать базу данных, то тебе нужно в файле прописать все значения налогов.
Спустя 1 минута, 47 секунд (27.08.2012 - 12:09) Игорь_Vasinsky написал(а):
ужс....
там кода на 10 строчек. и всё на JS
там кода на 10 строчек. и всё на JS
Спустя 8 минут, 54 секунды (27.08.2012 - 12:18) iskatel2000 написал(а):
Shuriken
СПАСИБО! ща буду пробывать...
Игорь_Vasinsky
ты про это имел ввиду?
СПАСИБО! ща буду пробывать...
Игорь_Vasinsky
ты про это имел ввиду?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Калькулятор на JavaScript</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript">
/*
* Функция подсчета стоимости услуг на создания дизайна сайта
*/
function calc() {
var type_design = document.getElementById("type_design"); //получаем ссылку на элемент Select (Тип дизайна)
var is_html = document.getElementById("is_html"); //получаем ссылку на чекбокс (Требуется верстка?)
var count = document.getElementById("count"); //получаем ссылку на элемент input (Кол-во вариантов)
var result = document.getElementById("result"); //получаем ссылку на элемент span, в него будем писать стоимость дизайна
var price = 0;
price += parseInt(type_design.options[type_design.selectedIndex].value);
price += (is_html.checked == true) ? parseInt(is_html.value) : 0;
price = parseInt(count.value) * price;
result.innerHTML = price;
}
</script>
</head>
<body>
<b>Тип дизайна:</b><br/>
<select onchange="calc()" id="type_design">
<option value="0">Выбрать</option>
<option value="5000">Простой дизайн сайта</option>
<option value="7000">Сложный дизайн сайта</option>
<option value="10000">Дизайн интернет-магазина</option>
</select><br/>
<input type="checkbox" onchange="calc()" value="5" id="is_html" /> <label for="is_html">Забор курьера</label>
<br/>
Вес: <input type="text" id="count" value="1" onchange="calc()" />
<div>Стоимость пересылки: <span id="result">0</span> руб.</div>
</body>
</html>
Спустя 22 минуты, 17 секунд (27.08.2012 - 12:40) Игорь_Vasinsky написал(а):
iskatel2000
ес оф коз. а что нужно было?
ес оф коз. а что нужно было?
Спустя 53 секунды (27.08.2012 - 12:41) Игорь_Vasinsky написал(а):
хм
смотри как я точно всю ситуацию расписал, даже некоторые переменные именами совпали


Спустя 9 минут, 11 секунд (27.08.2012 - 12:50) iskatel2000 написал(а):
Товарищи, вопрос РЕШЕН!!! один очень хороший человек [YS.PRO] сделал решение вот в таком виде, я считаю лучше быть не может! ОГРОМНОЕ ЕМУ СПАСИБО!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Документ без названия</title>
</head>
<body>
<form action="calc.php" method="post">
<p>
<select name="country" >
<option value="">Страна</option>
<option value=""></option>
<option value="Азербайджан">Азербайджан</option>
<option value="Армения"> Армения</option>
<option value="Белоруссия"> Белоруссия</option>
<option value="Грузия"> Грузия</option>
<option value="Казахстан"> Казахстан</option>
<option value="Киргизия"> Киргизия</option>
<option value="Латвия"> Латвия</option>
<option value="Литва"> Литва</option>
<option value="Молдова"> Молдова</option>
<option value="Польша"> Польша</option>
<option value="Россия"> Россия</option>
<option value="Узбекистан"> Узбекистан</option>
<option value="Украина"> Украина</option>
<option value="Эстония"> Эстония</option>
</select>
<br>
Вес: <input type="text" name="ves" />
<br>
<input type="checkbox" name="yes" />
Забор курьером
<br>
<input type="submit" name="calc" value="Рассчитать"/>
</p>
</form>
<?php
$prices = array(
'Белоруссия' => array(
'price_per_kg' => 2.7,
'tax' => 10,
'min_sum' => 21,
'max_sum' => 120,
'delivery_period' => 15,
'courier_price' => 5
),
'Армения' => array(
'price_per_kg' => 2.8,
'tax' => 11,
'min_sum' => 22,
'max_sum' => 121,
'delivery_period' => 16,
'courier_price' => 6
)
);
$additional_fee = 1.81;
if(!empty($_POST)) {
$country = trim($_POST['country']);
$weight = (int)$_POST['ves'];
$courier = isset($_POST['yes']) ? true : false;
// проверяем вес
$invalid_weight = false;
if(in_array($country, array('Белоруссия', 'Украина'))) {
if(30 < $weight) {
$invalid_weight = true;
}
} elseif(20 < $weight) {
$invalid_weight = true;
}
if ($invalid_weight) {
// если превышен вес, ничего не считаем, а выводим сообщение
echo '<h3>Превышен максимально разрешенный вес</h3>';
} elseif (empty($country)) {
echo '<h3>Выберите страну</h3>';
} elseif (!isset($prices[$country])) {
echo '<h3>Для рассчета необходимо внести значения в массив $prices для данной страны ('.$country.')</h3>';
} else {
// рассчитываем цену
$price = $weight * $prices[$country]['price_per_kg'] + $prices[$country]['tax'];
// добавляем оплату курьера, если нужно
if($courier) {
$price += $prices[$country]['courier_price'];
}
// дополнительная комиссия 1.81 за превышение цены в 77.47
if($price > 77.47) {
$price += 1.81;
}
// установка минимальной цены если нужно
if($price < $prices[$country]['min_sum']) {
$price = $prices[$country]['min_sum'];
}
?>
<strong>Результат:</strong>
<table width="444" border="1">
<tr>
<td>Страна доставки</td>
<td><?php echo $country; ?></td>
</tr>
<tr>
<td width="349">Стоимость пересылки</td>
<td width="79"><?php echo $price; ?></td>
</tr>
<tr>
<td>Cроки доставки</td>
<td><?php echo $prices[$country]['delivery_period'] ?></td>
</tr>
<tr>
<td>Mаксимальный вес</td>
<td><?php echo in_array($country, array('Белоруссия', 'Украина')) ? 30 : 20; ?></td>
</tr>
<tr>
<td>Mаксимальная заявленная стоимость </td>
<td><?php echo $prices[$country]['max_sum'] ?></td>
</tr>
</table>
<?php
}
}
?>
</body>
</html>
Спустя 5 минут, 22 секунды (27.08.2012 - 12:56) Игорь_Vasinsky написал(а):
бееее... я на JS элегантней.
мало ли у тя там ещё вдруг форма будет, и тогда засыпет тя нотисами
проверял бы нажатие кнопки isset()
if(!empty($_POST))
мало ли у тя там ещё вдруг форма будет, и тогда засыпет тя нотисами
проверял бы нажатие кнопки isset()
Цитата |
$weight = (int)$_POST['ves']; |
тут надобы проверять корректность введённых данных, а не тупо приводить их к типу - введёт "аываыа" - ты получишь 0 и произведёшь расчёт
Спустя 6 минут, 25 секунд (27.08.2012 - 13:02) iskatel2000 написал(а):
вот теперь можно и дорабатывать еще было бы хорошо не перезагружать страницу (ajax)
Спустя 1 минута, 59 секунд (27.08.2012 - 13:04) KOPOJI написал(а):
Цитата |
проверял бы нажатие кнопки isset() |
empty() тоже не выдаст нотайс, она тоже проверяет на NULL. это вообще аналог isset(), только больше проверок выполняет (и в отличии от isset-а может принимать только один аргумент)
Спустя 2 минуты, 28 секунд (27.08.2012 - 13:07) Игорь_Vasinsky написал(а):
это всё разные вещи.
empty() - переменная есть, но пустое
!isset() - переменной нет isset() - переменная есть
NULL - есть, но значения нет, т.е. оно NULL
вроде
empty() - переменная есть, но пустое
!isset() - переменной нет isset() - переменная есть
NULL - есть, но значения нет, т.е. оно NULL

вроде

Спустя 2 минуты, 24 секунды (27.08.2012 - 13:09) KOPOJI написал(а):
Спустя 3 минуты, 25 секунд (27.08.2012 - 13:12) Игорь_Vasinsky написал(а):
вспомнил
просто я всегда стараюсь применять то - что пытаюсь поймать

просто я всегда стараюсь применять то - что пытаюсь поймать
