[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с отправкой почты!!! Помогите пожалуйста
unscored
Ребята, столкнулся с такой вот проблемой, для начала скажу что php изучал сам, что то по книгам что то по видеоурокам, много не знаю. Написал интернет магазинчик легкий такой. И сейчас застопорился на том, что попросили меня поставить туда корзину для товаров. Раньше он работал без корзины, т.е нажал на товар и он единственный шел в заказ а мне приходило на почту что такой то такой то с таким то контактным телефоном заказал такой товар.
Корзину я вроде бы реализовал, возможно корявинько, но работает четко - товары добавляются удаляются все отслеживается хорошо. Вопрос в следующем: как мне содержимое корзины(все что назаказывал клиент) - при нажатии кнопки "оформить заказ" впихнуть в письмо, которое придет мне и я свяжусь с человеком для уточненения заказа? Php в связке с MySQL, все товары в базе, вход на сайт без регистрации, использую сессии. Код корзины добавлю. Заранее благодарен тем кто откликнется.

<?
if (isset($_GET['id']))
$id=$_GET['id'];
else
$id=1;

if (isset($_GET['action']))
$action=$_GET['action'];
else
$action="empty";

switch($action)
{
case "add";
if (isset($_SESSION['cart'][$id]))
$_SESSION['cart'][$id]++;
else
$_SESSION['cart'][$id]=1;
break;
case "remove";
if (isset($_SESSION['cart'][$id]))
{
$_SESSION['cart'][$id]--;
if ($_SESSION['cart'][$id]==0)
unset($_SESSION['cart'][$id]);
}
break;
case "empty";
unset($_SESSION['cart']);
break;
}
/* Отображение корзины */
if (isset($_SESSION['cart']))
{
echo "<table border=0 cellspacing=0 cellpadding=0 width='500'>";
echo "<tr>";
echo "<td align='left'> <p>Наименование </td>";
echo "<td align='right'> <p>Кол-во, шт</td>";
echo "<td align='right'> <p>Цена, грн</td>";
echo "<td align='right'> <p>Стоимость, грн</td>";
echo "</tr>";
foreach($_SESSION['cart'] as $id => $x)
{
$result2 = mysql_query("SELECT name, price from tel_tab WHERE id=$id",$db);
$myrow2 = mysql_fetch_array($result2);
$name = $myrow2['name'];
$price = $myrow2['price'];
$line_cost = $price * $x;
$total = $total + $line_cost;

echo "<tr>";
echo "<td align='left'> <p>$name </td>";
echo "<td align='right'> <p>$x <a href='cart.php?id=".$id."&action=remove'><img class='cart_img' src='img\minus-button.png' border='0'></a></td>";
echo "<td align='right'> <p>$price</td>";
echo "<td align='right'> <p>$line_cost</td>";
echo "</tr>";


}
echo "<tr>";
echo "<td></td>";
echo "<td></td>";
echo "<td align='right'><br><p>Итого к оплате: </td>";
echo "<td align='right'><br> <p>$total грн.</td>";
echo "</tr>";
echo "</table>";
echo "<a href='cart.php?action=empty'><p align='center'>Очистить корзину</a>";

}
else
echo "<p>Ваша корзина пуста. Добавляйте товары в корзину, нажимая на кнопку добавить в корзину возле понравившегося Вам товара. В корзину можно добавлять необходимое Вам количество товаров. Приятных покупок в нашем магазине!";

?>







Спустя 18 часов, 44 минуты, 43 секунды (1.07.2011 - 15:17) WebDebug написал(а):
Собственно, всё просто. Смотря как вы раньше отправляли почту и как сейчас хотите отправлять почту.

Лучше - воспользоваться формой <form></form> и какой либо библиотекой - ИМХО лучше libmail, при отправке - чтение данных о всех заказах, добавление этих данных в любом виде к письму (ИМХО лучше HTML). И $mail->send(). В большинстве почтовых библиотек именно так отправляется составленное письмо.

В общем, загружаете libmail (http://lwest.free.fr/doc/php/lib/zip/libmail.zip), и изучаете. Пример там есть.

Спустя 1 день, 20 часов, 33 минуты, 35 секунд (3.07.2011 - 11:50) unscored написал(а):
Я почту вот так отправлял, но так как сейчас в корзине несколько наименований, то этот вариант работает не корректно.


<?php
include ("blocks/bd.php");/*Соединяемся сбазой*/

if (isset($_POST['id'])) {$id = $_POST['id'];}
if (isset($_POST['name'])) {$name = $_POST['name'];}
if (isset($_POST['price'])) {$price = $_POST['price'];}
if (isset($_POST['author'])) {$author = $_POST['author'];}
if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
if (isset($_POST['text'])) {$text = $_POST['text'];}
if (isset($_POST['sub_order'])) {$sub_order = $_POST['sub_order'];}

if (isset($sub_order))

{
if (isset($author)){trim($author);}
else {$author = "";}

if (isset($phone)){trim($phone);}
else {$phone = "";}

if (isset($text)){trim($text);}
else {$text = "";}

if (empty($author) or empty($phone))
{
exit ("<p> Вы ввели не всю информацию, вернитесь назад и заполните все поля.<br><input name='back' type='button' value='Вернуться назад' onclick='javascript:self.back();'>");
}

$author = stripslashes($author);
$phone = stripslashes($phone);
$text = stripslashes($text);

$author = htmlspecialchars($author);
$phone = htmlspecialchars($phone);
$text = htmlspecialchars($text);


$date = date ("Y-m-d H:i");
$result = mysql_query ("INSERT INTO order_table (id_tov, name_tov, price, author, phone, text, date) VALUES('$id', '$name', '$price', '$author', '$phone', '$text', '$date')",$db);

$address = "vit-sb@list.ru";
$subject = "Заказ товара";
$message = "Название товара: ".$name."\nЦена товара: ".$price." грн.\nИмя покупателя: ".$author."\nКонтактный телефон: ".$phone."\nДетали заказа: ".$text."\nДата и время заказа: ".$date."";

mail($address,$subject,$message,"Content-type:text/plain;Charset=windows-1251\r\n");

}
?>

Спустя 11 минут, 34 секунды (3.07.2011 - 12:02) WebDebug написал(а):
А почему Вы всё обрабатываете через $_POST? Получается, что на страницу оформления заказа пользователи приходят через форму, в которой раньше находился один заказ?

Раз у Вас вся корзина хранится в сессии ($_SESSION['cart']), то и для отправки сообщения нужно перебирать элементы из $_SESSION['cart'].

Спустя 14 минут, 48 секунд (3.07.2011 - 12:17) unscored написал(а):
это код отправки почты когда корзины еще не было....поэтому без сессии. раньше нажимали пользователи на товар и он шел в обработчик. а сейчас корзина есть, и вот тут как отправить содержимое корзины на почту я застопорился..

Спустя 39 минут, 35 секунд (3.07.2011 - 12:56) WebDebug написал(а):
Если приведёшь структуру массива $_SESSION['cart'], могу забацать код.

Спустя 8 минут (3.07.2011 - 13:04) unscored написал(а):
да вот как раз с массивами я на "вы"((

Спустя 3 минуты, 38 секунд (3.07.2011 - 13:08) WebDebug написал(а):
а как товары в корзину добавляются? можешь кусок скрипта выдернуть, который за это отвечает?

Спустя 9 минут, 53 секунды (3.07.2011 - 13:18) unscored написал(а):
да тут все очень просто, у каждого товара есть кнопка "В корзину". Кнопка является ссылкой в корзину которая имеет два параметра id и action:
сайт/cart.php?action=add&id=33
а как корзина работает приведено в 1 сообщении.

Спустя 23 минуты, 59 секунд (3.07.2011 - 13:42) WebDebug написал(а):
Попробуй скрипт: (написал только что, Вам, возможно, нужно немного подкорректировать его)

// 1. Если в корзине много товаров (маловероятно, но нужно рассчитывать на это), то собираем ОДИН SQL запрос

// 1.1 проверяем правильность массива и что товары в нём есть

if (is_array($_SESSION['cart']) && count($_SESSION['cart']) > 0) {
$arIDs = array();
// 1.2 отмечаем какие ID товаров есть в корзине
foreach($_SESSION['cart'] as $id => $x) {
$arIDs[] = $id;
}
// 1.3 дописываем "id=" в начал
foreach ($arIDs as &$arID) {
$arID = "id={$arID}";
}
// 1.4 склеиваем
$IDs = implode(" OR ", $arIDs);
// 1.5 получаем запрос
$SQL = "SELECT id, name, price from tel_tab WHERE {$IDs}";

// 2. Достаём товары из БД в массив
$result = mysql_query($SQL);
// 2.1 формируем массив товаров
$arItems = array();
$total = 0;
while ($row = mysql_fetch_array($result)) {
$arItems[] = array(
"name" => $row["name"],
"price" => $row["price"],
"x" => $_SESSION['cart'][$row["id"]],
"line_cost" => $row["name"] * $row["price"]
);

$total += $line_cost; // вместо записи $total = $total + $line_cost;
}

// 3. Теперь у нас есть массив товаров из корзины: составляем текст письма HTML формата
$message = "";
$message .= "<table>"; // вместо $message = $message."<table>";
$message .= "<tr><td>Наименование</td><td>Кол-во, шт</td><td>Цена, грн</td><td>Стоимость, грн</td></tr>";
foreach ($arItems as $arItem) {
$message .= "<tr>";
$message .= "<td>{$arItem["name"]}</td>";
$message .= "<td>{$arItem["price"]}</td>";
$message .= "<td>{$arItem["x"]}</td>";
$message .= "<td>{$arItem["line_cost"]}</td>";
$message .= "</tr>";
}
$message .= "<tr><td align='right'>Итого</td><td align='right'>{$total}</td></tr>";
$message .= "</table>";

// 4. Отправка письма
$address = "vit-sb@list.ru";
$subject = "Заказ товара";
mail($address,$subject,$message,"Content-type:text/html;Charset=windows-1251\r\n");

}


Будут ошибки - исправим

Спустя 7 минут, 50 секунд (3.07.2011 - 13:50) unscored написал(а):
спасибо большое, сейчас попробую. отпишусь

Спустя 1 день, 2 часа, 21 минута, 5 секунд (4.07.2011 - 16:11) unscored написал(а):
у тебя есть аська?

Спустя 12 часов, 50 минут, 46 секунд (5.07.2011 - 05:01) WebDebug написал(а):
Цитата (unscored @ 4.07.2011 - 13:11)
у тебя есть аська?

68-04-360

Спустя 5 дней, 10 часов, 37 минут, 34 секунды (10.07.2011 - 15:39) unscored написал(а):
проблемка решена. Большое спасибо WebDebug. Тему можно закрывать
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.