|
|
|
| Здравствуйте.
Я нашел скрипт простого интернет-магазина. Все меня в нем устраивает, но никак не могу понять - как отправить" Анкету посетителя" и "Список покупок".
Помогите разобраться с этой функицией.
Заранее спасибо | |
|
|
|
|
|
|
|
для: Dead_Fenix
(11.10.2005 в 21:38)
| | Хм... а куда отправить? | |
|
|
|
|
|
|
|
для: cheops
(11.10.2005 в 23:31)
| | На e-mail
И хотелось бы, что бы адрес отправителя брался из анкеты посетителя. | |
|
|
|
|
|
|
|
для: Dead_Fenix
(11.10.2005 в 21:38)
| | Вообщем, я так понимаю многим лень качать файл, так что напечатаю код который мне надо разобрать.
case "zakaz":
// форма для оформления заказа
echo "<form action=$PHP_SELF method=post><input type=hidden name=c value=post>".
"<input type=hidden name=SID value='$SID'>".
"<table border=1>";
for ($i=0; $i<count($post); $i++) {
echo "<tr><td>$post[$i]</td><td><input type=text size=40 name='v[$i]'></td></tr>";
}
echo "</table><input type=submit value='Отправить заказ'></form>";
break;
case "post":
// генерим и отправляем анкету посетителя, где указаны данные посетителя
// и список товаров из корзины
$msg="Анкета посетителя:\n\n";
for ($i=0; $i<count($post); $i++) {
$msg.="$post[$i]: ".substr($v[$i],0,500)."\n";
}
$msg.="\nСписок покупок:\n\n";
$k=@array_keys($t[all]);
for ($i=0; $i<count($k); $i++) {
$id=$k[$i];
$msg.=($i+1).") {$t[$id][name]} \\ ".doubleval($t[$id][cena])." руб \\ {$t[$id][kol]} шт. \\ = ".
sprintf("%.2f",$t[$id][cena]*$t[$id][kol])." руб\n";
}
|
Значит все данные, как я понял, хранятся в $msg
Как отправить это письмом? и как сделать что бы проверялись на заполнение все поля формы? | |
|
|
|
|
|
|
|
для: Dead_Fenix
(13.10.2005 в 14:36)
| | Для этого достаточно вызвать функцию mail(), передав ей в качестве третьего параметра $msg
<?php
mail('somebody@somewhere.ru',"тема",$msg);
?>
|
К переменной $msg следует добавить при помощи конструкции .= все остальные данные, которые должны быть отправлены в почтовом сообщении. | |
|
|
|
|
|
|
|
для: cheops
(13.10.2005 в 22:38)
| | Спасибо. С этим я наконец разобрался (около недели мучился).
И еще 2 вопроса. Как проверить заполнены ли поля анкеты посетителя?
И как сделать что бы после отправки заказа - корзина очищалась? | |
|
|
|
|
|
|
|
для: Dead_Fenix
(14.10.2005 в 03:47)
| | 1) для этого в обработчике HTML формы слеудет проверить существует ли соответствующий элемент суперглобального массива $_GET или $_POST (в зависимости от того, каким методом отправляются данные).
<?php
if(!isset($_POST['pole'])) exti("Заполните поле pole");
?>
|
2) А где храняться данные корзины? В файле shop.txt? Он ориентирован только на одного покупателя или сразу на несколько? Не могли бы вы привести его структуру? | |
|
|
|
|
 970 байт |
|
|
для: cheops
(14.10.2005 в 14:10)
| | 1) так, с этим примерно понятно. только может там не exti, а exit?
2) Ну да, именно в этом... А в каком смысле на 1 покупателя или несколько? ну я как понял на несколько.. | |
|
|
|
|
|
|
|
для: Dead_Fenix
(14.10.2005 в 14:42)
| | 1) Да, конечно :)
2) Хм... а если несколько как же они друг от друга отличаются? | |
|
|
|
|
|
|
|
для: cheops
(14.10.2005 в 14:54)
| | Эм... я имею ввиду прайс один для всех, но пользоваться корзиной и отправлять заказ может кто угодно... Данные корзины хранятся в сессиях. | |
|
|
|
|
|
|
|
для: Dead_Fenix
(14.10.2005 в 15:02)
| | А... тогда для очистки можно испльзовать функцию unset()
<?php
unset($_SESSION);
?>
|
Ну или какуют-то часть сессионных данных, уточняя элемент массива
<?php
unset($_SESSION['что-то']);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(14.10.2005 в 14:10)
| | И снова появилась проблема - у меня форма сделана позаумному:
<?php
$post=array(
"название организации",
"Ф.И.О. должностного лица",
"должность",
"ИНН организации",
"местонахождение организации",
"контактный телефон",
"e-mail");
?>
<?php
case "zakaz":
// форма для оформления заказа
echo "<form action=$PHP_SELF method=post><input type=hidden name=c value=post>".
"<input type=hidden name=SID value='$SID'>".
"<table border=1>";
for ($i=0; $i<count($post); $i++) {
echo "<tr><td>$post[$i]</td><td><input type=text size=40 name='v[$i]'></td></tr>";
}
echo "</table><input type=submit value='Отправить заказ'></form>";
break;
?>
|
в результате я не понимаю куда вставить:
<?php
if(!isset($_POST['pole'])) exit("Заполните поле pole");
?>
|
| |
|
|
|
|
|
|
|
для: Dead_Fenix
(14.10.2005 в 20:23)
| | В обработчике формы который можно разместить в любой части страницы следует поместить код вида
<?php
if(!empty($_POST))
{
for ($i=0; $i<count($post); $i++)
{
if(!isset($_POST['v'][$i])) exit("Заполните поле ".$post[$i]);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(15.10.2005 в 00:47)
| | Хм... а что за обработчик формы? видимо я совсем глупый=( куда не вставлю - не проверяет... | |
|
|
|
|
|
|
|
для: Dead_Fenix
(16.10.2005 в 23:24)
| | Обработчик формы - это то место где вы получаете информацию из HTML-формы и обрабатываете, например, помещаете переданные данные в файл или базу данных. | |
|
|
|
|
|
|
|
для: cheops
(15.10.2005 в 00:47)
| | Странно, тогда все должно работать... может тут какая-то ошибка? смущение вызывает написание этой функции $_POST['v'][$i] | |
|
|
|
|
|
|
|
для: Dead_Fenix
(17.10.2005 в 05:14)
| | Ну да у вас имя поля является массивом v[$i], поэтому следует использовать $_POST['v'][$i]. Попробуйте распечатать содержимое массива $_POST
<?php
print_r($_POST);
?>
|
а также измените !isset() на empty()
<?php
if(!empty($_POST))
{
for ($i=0; $i<count($post); $i++)
{
if(empty($_POST['v'][$i])) exit("Заполните поле ".$post[$i]);
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(17.10.2005 в 12:32)
| | Спасибо, сработало. Но при exit не прорисовывается дизайн сайта :(
И появился еще 1 вопрос, как сделать что бы введенные поля сохранялись... т.е. если первое поле заполнили, а второе нет, не приходилось первое заполнять еще раз, или это не возможно? | |
|
|
|
|
|
|
|
для: cheops
(17.10.2005 в 12:32)
| | Как я понимаю exit это функция которая приостанавливает выполнение скрипта, а также обработку хтмл. Можно ли это как-то избежать? | |
|
|
|
|
|
|
|
для: Dead_Fenix
(18.10.2005 в 13:07)
| | Конечно, введите, например, флаг $is_error, который будет сигнализировать об ошибке
<?php
$is_error = false;
if(!empty($_POST))
{
for ($i=0; $i<count($post); $i++)
{
if(empty($_POST['v'][$i]))
{
echo "Заполните поле ".$post[$i];
$is_error = true;
}
}
}
...
if($is_error) exit();
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(18.10.2005 в 14:27)
| | Что-то я не совсем понял...
Ладно поставлю вопрос по другому. Допустим поле не заполнено, то требуется загрузить страницу с формой еще раз и что бы над формой появилась надпись - Заполните поле. И что бы при этом заполненные поля не сбрасывались.
Хотя если на последнее трудно реализуемо - то лучше не надо... | |
|
|
|
|
|
|
|
для: Dead_Fenix
(18.10.2005 в 15:13)
| | У вас как выглядите обработчик? Т.е. он ведь не срабатывает при первой загрузке - каково условия его срабатывания?
Для того, чтобы поля не сбрасывались, необходимо поместить значения из $_POST в атрибут value тэга <input>. | |
|
|
|
|
|
|
|
для: cheops
(18.10.2005 в 20:48)
| | Э... Лучше приведу часть кода
<?php
case "zakaz":
// форма для оформления заказа
echo "<form action=$PHP_SELF method=post><input type=hidden name=c value=post>".
"<input type=hidden name=SID value='$SID'>".
"<table border=0 cellpadding=5 cellspacing=2 bgcolor=#275CBD>";
for ($i=0; $i<count($post); $i++) {
echo "<tr bgcolor=#FFFFFF><td><FONT size=+1>$post[$i]</FONT></td><td><input type=text size=60 name='v[$i]'></td></tr>";
}
echo "</table><br><input type=submit value='Отправить заказ'></form>";
break;
case "post":
// генерим и отправляем анкету посетителя, где указаны данные посетителя
// и список товаров из корзины
if(!empty($_POST))
{
for ($i=0; $i<count($post); $i++)
{
if(empty($_POST['v'][$i])) exit("Заполните поле ".$post[$i]);
}
}
$msg="Анкета посетителя:\n\n <BR>";
for ($i=0; $i<count($post); $i++) {
$msg.="$post[$i]: ".substr($v[$i],0,500)."\n <BR>";
}
$msg.="<BR> \nСписок покупок:\n\n <BR>";
$k=@array_keys($t[all]);
for ($i=0; $i<count($k); $i++) {
$id=$k[$i];
$msg.=($i+1).") {$t[$id][name]} \\ ".doubleval($t[$id][cena])." руб \\ {$t[$id][kol]} шт. \\ = ".
sprintf("%.2f",$t[$id][cena]*$t[$id][kol])." руб\n <BR>";
}
$to = "'somebody@somewhere.ru'";
$subject = "Заказ";
mail($to, $subject, $msg);
?>
|
И еще, мне надо отправить, в письме, текст из функции, как вставить его(текст) в $msg | |
|
|
|
|
|
|
|
для: Dead_Fenix
(18.10.2005 в 21:13)
| | Я имею ввиду следующее
<?php
case "zakaz":
// форма для оформления заказа
echo "<form action=$PHP_SELF method=post><input type=hidden name=c value=post>".
"<input type=hidden name=SID value='$SID'>".
"<table border=0 cellpadding=5 cellspacing=2 bgcolor=#275CBD>";
for ($i=0; $i<count($post); $i++) {
echo "<tr bgcolor=#FFFFFF><td><FONT size=+1>$post[$i]</FONT></td><td><input type=text size=60 name='v[$i]'></td></tr>";
}
echo "</table><br><input type=submit value='Отправить заказ'></form>";
break;
case "post":
// генерим и отправляем анкету посетителя, где указаны данные посетителя
// и список товаров из корзины
$is_error = false;
if(!empty($_POST))
{
for ($i=0; $i<count($post); $i++)
{
if(empty($_POST['v'][$i]))
{
echo ("Заполните поле ".$post[$i]);
$is_error = true;
}
}
}
if(!$is_error)
{
$msg="Анкета посетителя:\n\n <BR>";
for ($i=0; $i<count($post); $i++) {
$msg.="$post[$i]: ".substr($v[$i],0,500)."\n <BR>";
}
$msg.="<BR> \nСписок покупок:\n\n <BR>";
$k=@array_keys($t[all]);
for ($i=0; $i<count($k); $i++) {
$id=$k[$i];
$msg.=($i+1).") {$t[$id][name]} \\ ".doubleval($t[$id][cena])." руб \\ {$t[$id][kol]} шт. \\ = ".
sprintf("%.2f",$t[$id][cena]*$t[$id][kol])." руб\n <BR>";
}
$to = "'somebody@somewhere.ru'";
$subject = "Заказ";
mail($to, $subject, $msg);
}
?>
|
>И еще, мне надо отправить, в письме, текст из функции, как вставить его(текст) в $msg
<?php
$msg .= "Текст из функции";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(18.10.2005 в 21:36)
| | Было б все так просто. Я должен вставить функцию в $msg, а функция выводит текст... | |
|
|
|
|
|
|
|
для: Dead_Fenix
(18.10.2005 в 21:41)
| | Тогда давайте подробностей, как вставляется функция, по какому принципу... но лучше в новой теме, вообще под новые вопросы лучше заводить новую тему - так и ответов больше будет и каши в темах меньше. | |
|
|
|