|
|
|
| Добрый вечер.
Тренируюсь и осваиваю php. Поставил перед собой задачу написать форму заказа. Есть следующие поля:
Кол-во:
Способ оплаты:
Способ доставки:
Итого к оплате:
К примеру, 1шт. стоит 18 у.е.
Способ оплаты:
- 1 способ
- 2 способ (предоставляется скидка 2%)
Способ доставки (есть 3 варианта):
-почта (5 у.е.)
-авиапочта (15 у.е.)
-курьер (8 у.е.)
Необходимо, чтобы все это просчитывалось и выводилось в поле итого к оплате. (желательно без перезагрузки страницы, хотя можно для начала и с ней).
Прошу помочь с тем, как это реализовать, а то пока чего-то не понимаю как это сделать.
Пока у меня реализовано все так:
1. В файле buy.php - форма заказа данные из которой передаются в zakaz.php
2. В файле zakaz.php происходит обработка данных и их последующая запись в БД.
Все работает, но как просчитать итоговую стоимость - не понимаю. | |
|
|
|
|
|
|
|
для: Dizels
(13.07.2009 в 22:46)
| | ну а файлы-то почему не показываете?
Или все эти данные предполагается извлечь из БД для составления окончательного отчета по заказу?
Тогда дамп чтоли приведите...
способы оплат и способы доставок заданы жестко или таблицами в БД описаны? | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 23:00)
| | Ну файлы там стандартные.
файл: buy.php
<form name="form" action="zakaz.php" method="post">
<table cellspacing="7">
<tr>
<td><p class="text">Кол-во:</p></td>
<td><input size="3" type="text" name="kolvo" value="1"> шт.</td>
</tr>
<tr>
<td><p class="text">Способ оплаты:</p></td>
<td>
<input type="radio" name="money" value="webmoney">WebMoney (скидка 2%)<Br>
<input type="radio" name="money" value="yandexmoney">ЯндексДеньги<Br>
</td>
</tr>
<tr>
<td><p class="text">Способ доставки:</p></td>
<td>
<input type="radio" name="dostavka" value="1">1 вариант<Br>
<input type="radio" name="dostavka" value="2">2 вариант<Br>
</td>
</tr>
<tr>
<td><p class="text">Итого к оплате:</p></td>
<td><input size="3" type="text" name="price">грн.</td>
</tr>
<tr>
<td></td>
<td><input class="button" type="submit" value="Заказать"></td>
</tr>
</table>
</form>
|
Файл zakaz.php:
<?php
// Выставляем уровень обработки ошибок
Error_Reporting(E_ALL & ~E_NOTICE);
// Устнавливаем соединение с базой данных
include "config.php";
// Проверим - достаточно ли информации для занесения в базу данных
if(empty($_POST['kolvo'])) links("Отсутствует title");
if(empty($_POST['money'])) links ("Выберите способ оплаты");
if(empty($_POST['dostavka'])) links ("Выберите способ доставки");
//if(empty($_POST['price'])) links ("Не высчитана общая стоимость заказа - обратитесь в тех. поддержку");
$kolvo = $_POST['kolvo'];
$money = $_POST['money'];
$dostavka = $_POST['dostavka'];
$price = $_POST['price'];
echo "$kolvo, $money, $dostavka, $price";
// Формируем и выполняем SQL-запрос на добавление заказа
$query = "INSERT INTO zakaz VALUES (NULL,
$kolvo,
'$money',
'$dostavka',
$price);";
if(mysql_query($query))
{
// Осуществляем автоматический переход на страницу с данными о заказе
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=rezult.php'>
</HEAD>";
}
else links("Ошибка при добавлении новой записи в базу данных");
// Небольшая вспомогательная функция для вывода
// сообщений в окно браузера
function links($msg)
{
echo "<p>".$msg."</p>";
exit();
}
?>
|
Вот но нужно, чтобы в файле buy.php автоматически высчитывалась общая стоимость заказа.
способы оплат и способы доставок заданы жестко | |
|
|
|
|
|
|
|
для: Dizels
(13.07.2009 в 23:23)
| |
<?php
// $price - расчитываем в зависимости от количества товаров голую стоимость
// взависимости от того какая оплата выбрана устанавливаем скидку
switch ($oplata) :
case "pay1" : $skidka = 0; break;
case "pay2" : $skidka = 0.02; break;
default : $skidka = 0; break;
endswitch;
switch ($dostavka) :
case "post" : $dost_sum = 5; break;
case "avia" : $dost_sum = 15; break;
case "сourier" : $dost_sum = 8; break;
endswitch;
// расчитываем сумму
$price = $price * (1 - $skidka) + $dost_sum;
?>
|
| |
|
|
|
|
|
|
|
для: buldovsky
(13.07.2009 в 23:28)
| | Большое спасибо и последний нерешенный вопросик остался - я так понимаю, что тут нужно или java-скрипт или AJAX - как все это вывести в поле Итоговая стоимость без перезагрузки страницы? | |
|
|
|
|
|
|
|
для: Dizels
(13.07.2009 в 23:37)
| | первое - нужно создать функцию js которая при каком-либо событии (например при изменении значения элемента формы) обращаласть бы к файлу buy.php (в котором содержиться php код расчета стоимости) и отправляла ему необходимые для этого переменные (пример такой функции приведу если потребуется). А затем получив результат сгенерированый сервером, разместить значение итоговой суммы в нужном месте страницы (средствами js). | |
|
|
|
|
|
|
|
для: buldovsky
(13.07.2009 в 23:56)
| | buldovsky, буду очень признателен за примеры. | |
|
|
|
|
|
|
|
для: Dizels
(14.07.2009 в 00:07)
| |
<html>
<head>
</head>
<body>
<script>
function recalc1(x)
{
var e = x.elements;
var qty = parseInt(e.kolvo.value);
var discount = (100.0-( e.money[0].checked*2
+e.money[1].checked*0))/100;
var delivery = e.dostavka[0].checked*5
+e.dostavka[1].checked*15
+e.dostavka[2].checked*8;
// return " qty="+qty+" ds="+discount+" dry="+delivery;
var price = 20;
price = (price * qty) * discount + delivery;
e.price.value = price;
}
</script>
<table cellspacing="7">
<form name="form" action="zakaz.php" method="post">
<tr>
<td><p class="text">Кол-во:</p></td>
<td><input size="3" type="text" name="kolvo" value="1"
onChange="recalc1(this.form);" > шт.</td>
</tr>
<tr>
<td><p class="text">Способ оплаты:</p></td>
<td>
<input type="radio" name="money" value="webmoney"
onClick="recalc1(this.form);" >WebMoney (скидка 2%)<Br>
<input type="radio" name="money" value="yandexmoney"
onClick="recalc1(this.form);" >ЯндексДеньги<Br>
</td>
</tr>
<tr>
<td><p class="text">Способ доставки:</p></td>
<td>
<input type="radio" name="dostavka" value="1"
onClick="recalc1(this.form);" >1 вариант<Br>
<input type="radio" name="dostavka" value="2"
onClick="recalc1(this.form);" >2 вариант<Br>
<input type="radio" name="dostavka" value="3"
onClick="recalc1(this.form);" >3 вариант<Br>
</td>
</tr>
<tr>
<td><p class="text">Итого к оплате:</p></td>
<td><input size="3" type="text" name="price">грн.</td>
</tr>
<tr>
<td></td>
<td><input class="button" type="submit" value="Заказать"></td>
</tr>
</form>
</table>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: Dizels
(14.07.2009 в 00:07)
| | Если понадобится вариант использования AJAX:
// эта функция подгатавливает асинхронный запрос AJAX (для большинства браузеров)
// пригодится если вы часто используете AJAX
function prepareRequest() {
var http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {}
} else if (window.ActiveXObject) {
try {http_request = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e) {try {http_request = new ActiveXObject("Microsoft.XMLHTTP");} catch (e) {}}
}
if (!http_request) {alert('error'); return false;}
return http_request;
}
// ваша функция которая будет вызываться при изменении в форме
function calcPrise(form) {
//Эта переменная должна содержать переменные в виде "&variable=value", например
var postvar = "&kolvo=2&oplata=pay1&dostavka=avia"; // и т.д. перечисляете все переменные которые нужно передать серверу
// их значения берете из формы "form"
var xmlHttp = prepareRequest(); //создаем новый запрос
xmlHttp.open("POST", "/buy.php", true); // Открыть соединение с сервером
// ставим заголовок, указывающий тип запроса
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttp.send(postvar); // Передаем запрос
xmlHttp.onreadystatechange = function () { // Установить функцию для сервера, которая выполнится после его ответа
if (xmlHttp.readyState == 4) {
var answer = xmlHttp.responseText; // теперь эта переменныя содержит ответ от сервера
// осталось только вставить этот ответ в нужное место страницы c помощью функции innerHTML
}
}
}
|
| |
|
|
|
|
|
|
|
для: Dizels
(13.07.2009 в 23:23)
| | >Вот но нужно, чтобы в файле buy.php автоматически высчитывалась общая стоимость заказа.
То есть прямо в момент выбора элементов формы?
Тогда это на JS.
[Horisontal scrolling ЛАП on] | |
|
|
|
|
|
|
|
для: Trianon
(13.07.2009 в 23:35)
| | В общем пока сделал с перезагрузкой страницы. Появился еще один вопрос, вернее даже 2 вопроса:
После оформления заказа я хочу, чтобы выводилась краткая информация по нему, а именно: итоговая сумма, адрес доставки и т.д.
Для этого в файле zakaz.php после успешного добавления данных в БД делаю перенаправление на страницу о заказе:
if(mysql_query($query))
{
// Осуществляем автоматический переход на страницу с данными о заказе
echo "<HTML><HEAD>
<META HTTP-EQUIV='Refresh' CONTENT='0; URL=rezult.php?id'>
</HEAD>";
}
|
И вот здесь как раз и наступает вопрос - как получить id только что добавленной записи в таблицу.
И второй вопрос вытекает из первого:
как можно иначе это организовать? не нравится то, что в строку id можно подставить любой номер и таким образом узнать данные о любом заказе. А это я думаю не очень хорошо) | |
|
|
|
|
|
|
|
для: Dizels
(14.07.2009 в 00:39)
| | Можно же сперва проверить, что заказ принадлежит именно этому посетителю ($_SESSION, user_id и т.п.). | |
|
|
|
|
|
|
|
для: Trianon
(14.07.2009 в 00:44)
| | Дело в том, что изначально я не планирую на данный момент делать регистрацию и т.д., так как теоретически - продаваться будет только 1 товар. | |
|
|
|
|
|
|
|
для: Dizels
(14.07.2009 в 00:53)
| | А слова $_SESSION Вы не заметили? | |
|
|
|
|
|
|
|
для: Dizels
(14.07.2009 в 00:39)
| | >И вот здесь как раз и наступает вопрос - как получить id только что добавленной записи в таблицу.
в поиск. Тема разжевана в кашу. | |
|
|
|