Отправка письма на PHP

(Ответов: 6, Просмотров: 2101)
  1. Дипломник Аватар для Vadyxa
    • Регистрация: 21.03.2011
    • Сообщений: 167
    • Репутация: 32
    Привет всем. PHP я только изучаю, так что строго не судите
    В общем я делаю интернет магазин. Все уже готово, только решил сделать так, что бы пользователю отправлялось письмо о том, что он заказал товар, и в самом письме указывались товары, их количество и общая сумма заказа.

    Сам процесс оформления заказа:
    1) Посетитель переходит на сайт и выбирает товар.
    2) Добавляет выбранный в корзину и нажимает кнопку "Оформить заказ".
    3) После чего его перебрасывает на страницу order.php где он вводит свои данные и нажимает кнопку "Заказать". После чего, все данные что он ввел (name, s_name, address, post_index, email) передаются в БД, а ему выдается сообщение что заказ принят.

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

    Вот, как выглядит сама страница оформления заказа _http://prntscr.com/17mcsn. А вот сам ее код:

    PHP код:
    <h2 align="center">Оформление заказа</h2>

    <?
    if($_SESSION['cart'] && !isset($_POST['order']))
    {
    ?>
    <form action="index.php?view=order" method="post" id="cart-form">

    <table id="mycart" align="center" cellspacing="0" cellpadding="0" border="0">
          <tr>
                <th>Товар</th>
                <th>Цена</th>
                <th>Кол-во</th>
                <th>Всего</th>
          </tr>

          <? foreach($_SESSION['cart'] as $id => $quantity):
             
    $product get_product($id);
          
    ?>
            
          <tr>
              <td align="center"><?=$product['title'];?></td>
              <td align="center">$<?=number_format($product['price'],2);?></td>
              <td align="center"><?=$quantity;?></td>
              <td align="center">$<?=number_format($product['price'] * $quantity ,2);?></td>
          </tr>
          
          <?endforeach;?>
          
    </table>    
         <p class="total" align="center">Общая сумма заказа: <span class="product-price"><?=number_format($_SESSION['total_price'],2);?> $</span></p>
         
         <p align="center" style="color:  #fff;">
         Ваше Имя: <br />
         <input type="text" name="name" /><br />
         Ваша Фамилия: <br />
         <input type="text" name="s_name" /><br />
         Ваш адрес: <br />
         <input type="text" name="address" /><br />
         Почтовый индекс: <br />
         <input type="text" name="post_index" /><br />
         Ваш e-mail: <br />
         <input type="text" name="email" /><br />
         </p>
         
         <p align="center"><input type="submit" name="order" value="Заказать" /></p>    
    </form>

    <?
    }
    if(
    $_SESSION['cart'] && isset($_POST['order']))
    {
        foreach(
    $_POST as $ArrKey => $ArrStr
        {
            
    $ArrKey $_POST[$ArrKey];
        }
        
    $date date('Y-m-d');
        
    $time date('H:i:s');
        
        foreach(
    $_SESSION['cart'] as $id => $quantity):
        
    $product get_product($id);
            
    $query mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
        endforeach;
        unset(
    $_SESSION['cart']); /* Очистка корзины после заказа */ 
        // если была нажата кнопка "Отправить" 
    if($_POST['order']) { 
            
    // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменной $_POST['mess'] все аналогично 
            
    $title substr(htmlspecialchars(trim($product['title'])), 01000); 
            
    $price =  substr(htmlspecialchars(trim($product['price'],2)), 01000000); 
            
    $qty substr(htmlspecialchars(trim($quantity)), 01000); 
            
    $tprice =  substr(htmlspecialchars(trim(number_format($product['price'] * $quantity ,2))), 01000000); 
            
    // $to - кому отправляем 
            
    $to $_POST['email']; 
            
    // $from - от кого 
            
    $from='vvarisov@yandex.ru'
            
    // функция, которая отправляет наше письмо. 
            
    mail($to$title$price$qty$tprice); 
            
    mail($from$title$price$qty$tprice); 

        echo 
    "<p align='center' style='color: #fff;'>Ваш заказ успешно принят и на Вашу електронную почту была отправлен! Спасибо за покупку!</p>";
    }
    ?>    
    <h2 align="center">Оформление заказа</h2>

    <?
    if($_SESSION['cart'] && !isset($_POST['order']))
    {
    ?>
    <form action="index.php?view=order" method="post" id="cart-form">

    <table id="mycart" align="center" cellspacing="0" cellpadding="0" border="0">
          <tr>
                <th>Товар</th>
                <th>Цена</th>
                <th>Кол-во</th>
                <th>Всего</th>
          </tr>

          <? foreach($_SESSION['cart'] as $id => $quantity):
             
    $product get_product($id);
          
    ?>
            
          <tr>
              <td align="center"><?=$product['title'];?></td>
              <td align="center">$<?=number_format($product['price'],2);?></td>
              <td align="center"><?=$quantity;?></td>
              <td align="center">$<?=number_format($product['price'] * $quantity ,2);?></td>
          </tr>
          
          <?endforeach;?>
          
    </table>    
         <p class="total" align="center">Общая сумма заказа: <span class="product-price"><?=number_format($_SESSION['total_price'],2);?> $</span></p>
         
         <p align="center" style="color:  #fff;">
         Ваше Имя: <br />
         <input type="text" name="name" /><br />
         Ваша Фамилия: <br />
         <input type="text" name="s_name" /><br />
         Ваш адрес: <br />
         <input type="text" name="address" /><br />
         Почтовый индекс: <br />
         <input type="text" name="post_index" /><br />
         Ваш e-mail: <br />
         <input type="text" name="email" /><br />
         </p>
         
         <p align="center"><input type="submit" name="order" value="Заказать" /></p>    
    </form>

    <?
    }
    if(
    $_SESSION['cart'] && isset($_POST['order']))
    {
        foreach(
    $_POST as $ArrKey => $ArrStr
        {
            
    $ArrKey $_POST[$ArrKey];
        }
        
    $date date('Y-m-d');
        
    $time date('H:i:s');
        
        foreach(
    $_SESSION['cart'] as $id => $quantity):
        
    $product get_product($id);
            
    $query mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
        endforeach;
        unset(
    $_SESSION['cart']); /* Очистка корзины после заказа */ 
        // если была нажата кнопка "Отправить" 
    if($_POST['order']) { 
            
    // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и  substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменной $_POST['mess'] все аналогично 
            
    $title substr(htmlspecialchars(trim($product['title'])), 01000); 
            
    $price =  substr(htmlspecialchars(trim($product['price'],2)), 01000000); 
            
    $qty substr(htmlspecialchars(trim($quantity)), 01000); 
            
    $tprice =  substr(htmlspecialchars(trim(number_format($product['price'] * $quantity ,2))), 01000000); 
            
    // $to - кому отправляем 
            
    $to $_POST['email']; 
            
    // $from - от кого 
            
    $from='vvarisov@yandex.ru'
            
    // функция, которая отправляет наше письмо. 
            
    mail($to$title$price$qty$tprice); 
            
    mail($from$title$price$qty$tprice); 

        echo 
    "<p align='center' style='color: #fff;'>Ваш заказ успешно принят и на Вашу електронную почту была отправлен! Спасибо за покупку!</p>";
    }
    ?>
    Ребята, очень надеюсь на вашу помощь :)
    • 0
  2. Sapienti sat Аватар для brainix
    • Регистрация: 01.01.2013
    • Сообщений: 1,925
    • Записей в дневнике: 1
    • Репутация: 817
    • Webmoney BL: ?
    Цитата Сообщение от Vadyxa Посмотреть сообщение
    $price =  substr(htmlspecialchars(trim($product['price'],2)), 0, 1000000)
    Именно в $price хранится то что отправляется на почту. Ну и по коду туда записывается какое-то одно значение, последнее которое было получено в цикле.
    И какой вкладывался смысл в эту конструкцию? Сделать строку из миллиона символов?
    Цитата Сообщение от Vadyxa Посмотреть сообщение
    електронную
    электронную

    И функцию mail дважды вызывать не нужно, зачем отправлять два письма.
    • 1

    Спасибо сказали:

    Vadyxa(01.06.2013),
  3. Дипломник Аватар для Vadyxa
    • Регистрация: 21.03.2011
    • Сообщений: 167
    • Репутация: 32
    brainix, вторая функция mail отвечает за отправку копии этого письма администратору.
    То что хранится в $price, $qty и $title отправляется на почту. Но как сделать так, что бы в письме отсылались все товары из заказа? И как такому письму придать нормальный вид? (сейчас оно выглядит вот так _http://prntscr.com/17or1f)
    • 0
  4. Sunshine reggae Аватар для OKyJIucT
    • Регистрация: 02.09.2011
    • Сообщений: 3,240
    • Репутация: 1830
    • Webmoney BL: ?
    Vadyxa, отправлять сразу нескольким адресатам можно следующий образом:


    PHP код:
    $to $_POST['email'] . ', ';
    $to .= 'vvarisov@yandex.ru'


    Использовать html код можно следующим образом:


    PHP код:
    $message '
    <html>
    <head>
      <title>Список ваших товаров</title>
    </head>
    <body>
      <table>
        <tr>
          <th>Товар</th>
          <th>Кол-во</th>
          <th>Цена</th>
          <th>Стоимость</th>
        </tr>
        <tr>
          <td>Лексус RM-370</td><td>1</td><td>$44.000</td><td>$44.000</td>
        </tr>
      </table>
    </body>
    </html>
    '

    И напоследок - проще всего оформить список товаров таблицей, и в цикле foraech ее формировать, например так

    PHP код:
    $table '
    <table>
        <tr>
          <th>Товар</th>
          <th>Цена</th>
          <th>Кол-во</th>
          <th>Стоимость</th>
        </tr>
    '
    ;
    foreach(
    $_SESSION['cart'] as $id => $quantity): 
        
    $product get_product($id); 
            
    $query mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
    $table .= '
    <tr>
    <td>' 
    substr(htmlspecialchars(trim($$product['title'])), 01000) . '</td>
    <td>' 
    substr(htmlspecialchars(trim($$product['price'],2)), 01000000) . '</td>
    <td>' 
    substr(htmlspecialchars(trim($quantity)), 01000) . '</td>
    <td>' 
    substr(htmlspecialchars(trim(number_format($product['price'] * $quantity ,2))), 01000000) . '</td>
    </tr>
    '
    ;
    endforeach;
    $table .= '
    </table>'

    Таким образом, для каждого товара будет формироваться строка в таблице и добавляться к предыдущим строкам. И на выходе вы получите переменную $table, в которой будет находиться таблица с товарами, их количеством и ценами/стоимостью
    • 1

    Спасибо сказали:

    Vadyxa(01.06.2013),
  5. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Я добавил бы еще подтверждения номера(мобильного) чтоб знать что человек действительно заказывает товар а не играется
    • 0
  6. Дипломник Аватар для Vadyxa
    • Регистрация: 21.03.2011
    • Сообщений: 167
    • Репутация: 32
    Спасибо большое за помощь. Уже решил вопрос :)

    ---------- Сообщение добавлено 19:45 ---------- Предыдущее 19:45 ----------

    Bposter, это для меня пока еще слишком сложно)
    • 0
  7. Гуру Аватар для Bposter
    • Регистрация: 16.01.2013
    • Сообщений: 500
    • Репутация: 18
    • Webmoney BL: ?
    Vadyxa, Я тоже не гуру в php, но на самом деле это не сложнее формы

    PHP код:
      //Генерируем число от 100 до 900
      
    $x rand(100,900);
      
      
    //Отправляем это число покупателю
      
      
    $ch curl_init("http://sms.ru/sms/send");
    curl_setopt($chCURLOPT_RETURNTRANSFER1); 
    curl_setopt($chCURLOPT_TIMEOUT30);
    curl_setopt($chCURLOPT_POSTFIELDS, array(

        
    "api_id"        =>    "****************************************",
        
    "to"            =>    "Переменная с номером клиента",
        
    "text"        =>    $x

    ));
    $body curl_exec($ch);
    curl_close($ch);


    //Сверяем что ввел клиент с нашим числом
    if($x == $k){ echo 'Все супер отправляем письмо';}
    else{ echo 
    'Болалайка номер не верный';} 
    Это так быстрый набросок чтоб показать принцип как я его вижу, конечно надо продумать все + на ajax посадить это дело.
    • 1

    Спасибо сказали:

    Vadyxa(02.06.2013),

Похожие темы

Темы Раздел Ответов Последний пост
WordPress - не работает отправка комментариев
WordPress 2 16.02.2013 03:23
Отправка sms на телефоны через php
Web программирование 6 21.10.2012 21:41
отправка смс
Реклама партнерских программ 4 10.10.2011 01:47
Отправка EMAIL средствами PHP
Дайджест блогосферы 0 29.05.2011 16:40
Постфикс и удаленная отправка сообщений
Софт, скрипты, сервисы 3 21.09.2009 21:43

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры