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

Форум PHP

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

 

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

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

тема: Проблема с отправкой данных
 
 автор: Dead_Fenix   (11.10.2005 в 21:38)   письмо автору
 
 

Здравствуйте.
Я нашел скрипт простого интернет-магазина. Все меня в нем устраивает, но никак не могу понять - как отправить" Анкету посетителя" и "Список покупок".
Помогите разобраться с этой функицией.
Заранее спасибо

   
 
 автор: cheops   (11.10.2005 в 23:31)   письмо автору
 
   для: Dead_Fenix   (11.10.2005 в 21:38)
 

Хм... а куда отправить?

   
 
 автор: Dead_Fenix   (12.10.2005 в 10:35)   письмо автору
 
   для: cheops   (11.10.2005 в 23:31)
 

На e-mail
И хотелось бы, что бы адрес отправителя брался из анкеты посетителя.

   
 
 автор: Dead_Fenix   (13.10.2005 в 14:36)   письмо автору
 
   для: 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
Как отправить это письмом? и как сделать что бы проверялись на заполнение все поля формы?

   
 
 автор: cheops   (13.10.2005 в 22:38)   письмо автору
 
   для: Dead_Fenix   (13.10.2005 в 14:36)
 

Для этого достаточно вызвать функцию mail(), передав ей в качестве третьего параметра $msg
<?php
  mail
('somebody@somewhere.ru',"тема",$msg);
?>

К переменной $msg следует добавить при помощи конструкции .= все остальные данные, которые должны быть отправлены в почтовом сообщении.

   
 
 автор: Dead_Fenix   (14.10.2005 в 03:47)   письмо автору
 
   для: cheops   (13.10.2005 в 22:38)
 

Спасибо. С этим я наконец разобрался (около недели мучился).
И еще 2 вопроса. Как проверить заполнены ли поля анкеты посетителя?
И как сделать что бы после отправки заказа - корзина очищалась?

   
 
 автор: cheops   (14.10.2005 в 14:10)   письмо автору
 
   для: Dead_Fenix   (14.10.2005 в 03:47)
 

1) для этого в обработчике HTML формы слеудет проверить существует ли соответствующий элемент суперглобального массива $_GET или $_POST (в зависимости от того, каким методом отправляются данные).
<?php
  
if(!isset($_POST['pole'])) exti("Заполните поле pole");
?>

2) А где храняться данные корзины? В файле shop.txt? Он ориентирован только на одного покупателя или сразу на несколько? Не могли бы вы привести его структуру?

   
 
 автор: Dead_Fenix   (14.10.2005 в 14:42)   письмо автору
970 байт
 
   для: cheops   (14.10.2005 в 14:10)
 

1) так, с этим примерно понятно. только может там не exti, а exit?

2) Ну да, именно в этом... А в каком смысле на 1 покупателя или несколько? ну я как понял на несколько..

   
 
 автор: cheops   (14.10.2005 в 14:54)   письмо автору
 
   для: Dead_Fenix   (14.10.2005 в 14:42)
 

1) Да, конечно :)
2) Хм... а если несколько как же они друг от друга отличаются?

   
 
 автор: Dead_Fenix   (14.10.2005 в 15:02)   письмо автору
 
   для: cheops   (14.10.2005 в 14:54)
 

Эм... я имею ввиду прайс один для всех, но пользоваться корзиной и отправлять заказ может кто угодно... Данные корзины хранятся в сессиях.

   
 
 автор: cheops   (14.10.2005 в 16:12)   письмо автору
 
   для: Dead_Fenix   (14.10.2005 в 15:02)
 

А... тогда для очистки можно испльзовать функцию unset()
<?php
  
unset($_SESSION);
?>

Ну или какуют-то часть сессионных данных, уточняя элемент массива
<?php
  
unset($_SESSION['что-то']);
?>

   
 
 автор: Dead_Fenix   (14.10.2005 в 20:23)   письмо автору
 
   для: 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"); 
?> 

   
 
 автор: cheops   (15.10.2005 в 00:47)   письмо автору
 
   для: 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]);
    }
  }
?>

   
 
 автор: Dead_Fenix   (16.10.2005 в 23:24)   письмо автору
 
   для: cheops   (15.10.2005 в 00:47)
 

Хм... а что за обработчик формы? видимо я совсем глупый=( куда не вставлю - не проверяет...

   
 
 автор: cheops   (17.10.2005 в 01:15)   письмо автору
 
   для: Dead_Fenix   (16.10.2005 в 23:24)
 

Обработчик формы - это то место где вы получаете информацию из HTML-формы и обрабатываете, например, помещаете переданные данные в файл или базу данных.

   
 
 автор: Dead_Fenix   (17.10.2005 в 05:14)   письмо автору
 
   для: cheops   (15.10.2005 в 00:47)
 

Странно, тогда все должно работать... может тут какая-то ошибка? смущение вызывает написание этой функции $_POST['v'][$i]

   
 
 автор: cheops   (17.10.2005 в 12:32)   письмо автору
 
   для: 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]); 
    } 
  } 
?>

   
 
 автор: Dead_Fenix   (17.10.2005 в 14:24)   письмо автору
 
   для: cheops   (17.10.2005 в 12:32)
 

Спасибо, сработало. Но при exit не прорисовывается дизайн сайта :(
И появился еще 1 вопрос, как сделать что бы введенные поля сохранялись... т.е. если первое поле заполнили, а второе нет, не приходилось первое заполнять еще раз, или это не возможно?

   
 
 автор: Dead_Fenix   (18.10.2005 в 13:07)   письмо автору
 
   для: cheops   (17.10.2005 в 12:32)
 

Как я понимаю exit это функция которая приостанавливает выполнение скрипта, а также обработку хтмл. Можно ли это как-то избежать?

   
 
 автор: cheops   (18.10.2005 в 14:27)   письмо автору
 
   для: 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();
?>

   
 
 автор: Dead_Fenix   (18.10.2005 в 15:13)   письмо автору
 
   для: cheops   (18.10.2005 в 14:27)
 

Что-то я не совсем понял...
Ладно поставлю вопрос по другому. Допустим поле не заполнено, то требуется загрузить страницу с формой еще раз и что бы над формой появилась надпись - Заполните поле. И что бы при этом заполненные поля не сбрасывались.
Хотя если на последнее трудно реализуемо - то лучше не надо...

   
 
 автор: cheops   (18.10.2005 в 20:48)   письмо автору
 
   для: Dead_Fenix   (18.10.2005 в 15:13)
 

У вас как выглядите обработчик? Т.е. он ведь не срабатывает при первой загрузке - каково условия его срабатывания?

Для того, чтобы поля не сбрасывались, необходимо поместить значения из $_POST в атрибут value тэга <input>.

   
 
 автор: Dead_Fenix   (18.10.2005 в 21:13)   письмо автору
 
   для: 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

   
 
 автор: cheops   (18.10.2005 в 21:36)   письмо автору
 
   для: 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 
.= "Текст из функции";
?>

   
 
 автор: Dead_Fenix   (18.10.2005 в 21:41)   письмо автору
 
   для: cheops   (18.10.2005 в 21:36)
 

Было б все так просто. Я должен вставить функцию в $msg, а функция выводит текст...

   
 
 автор: cheops   (18.10.2005 в 21:53)   письмо автору
 
   для: Dead_Fenix   (18.10.2005 в 21:41)
 

Тогда давайте подробностей, как вставляется функция, по какому принципу... но лучше в новой теме, вообще под новые вопросы лучше заводить новую тему - так и ответов больше будет и каши в темах меньше.

   
Rambler's Top100
вверх

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