ФорумПрограммированиеPHP для идиотов → Отправка формы заказа с сайта на почт.ящик mail.ru

Отправка формы заказа с сайта на почт.ящик mail.ru

  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 1:42

    Доброго времени суток! На сайте есть пункт "Сделать заказ" (доставка роллов, пиццы и т.п.).
    Выбрав определенное кол-во продуктов и нажав кнопку "ПОДТВЕРДИТЬ ЗАКАЗ",
    это сообщение (в виде формы заказа) должно отправиться с сайта на почтовый ящик [email protected]. Но по какой то причине это уведомление не приходит.
    Обратился в службу поддержки хостинга сайта, т.к. вписывал функцию mail() по их рекомендации с их же сайта.
    Проверили.
    Сказали, что с их скриптом все впорядке. По видимому причина кроется до функции mail().

    Друзья, подскажите, пожалуйста, как исправить эту ошибку!

    Вот PHP код

    <?PHP
    $orders = array(
    'order1'=>'Ролл1',
    'order2'=>'Ролл2'
    );
    if (isset($_POST['name1'])) {$name1 = $_POST['name1'];}
    if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    if (isset($_POST['adress'])) {$adress = $_POST['adress'];}
    if (empty($name1))
    {
    echo "<b class=style5>Не указано имя!<p>";
    echo "<a href=order.htm class=style5>Вернуться к заполнению формы заказа</a>";
    exit;
    }
    if (empty($phone))
    {
    echo "<b class=style5>Не указан телефон!<p>";
    echo "<a href=order.htm class=style5>Вернуться к заполнению формы заказа</a>";
    exit;
    }
    if (empty($adress))
    {
    echo "<b class=style5>Не указан адрес!<p>";
    echo "<a href=order.htm class=style5>Вернуться к заполнению формы заказа</a>";
    exit;
    }
    else
    echo "<font class=style5>Получен заказ от: </font>".$_POST["name1"];
    echo "<br><br><font class=style5>Контактный телефон: </font>".$_POST["phone"];
    echo "<br><br><font class=style5>Адрес: </font>".$_POST["adress"];
    echo "<br><br><font class=style5>Время доставки: </font>".$_POST["time"];
    $order='';
    foreach($orders as $id=>$title){
    if(isset($_POST[$id]))
    $orders.="\n{$title}";
    }
    if(isset($_POST['order1'])) echo "<br><br><font class=style5>Ролл1</font>";
    if(isset($_POST['order2'])) echo "<br><br><font class=style5>Ролл2</font>";

    if($_POST['submit']) {
    $name1 = htmlspecialchars(substr(trim($_POST['name1'])), 0, 100);
    $phone = htmlspecialchars(substr(trim($_POST['phone'])), 0, 100);
    $adress = htmlspecialchars(substr(trim($_POST['adress'])), 0, 1000);
    $to = "[email protected]"; /*УКАЗАТЬ СВОЙ АДРЕС!*/
    $from = "[email protected]";
    $subject = "Сообщение с вашего сайта";
    $message = "Имя пославшего: $name1 \nТелефон: $phone \nАдрес:: $adress\nМеню Заказа:: $order";
    $verify = mail($to, $from, $subject, $message,
    "From: $from
    Reply-To: $from
    Content-Type: text/plain; charset=windows-1251
    Content-Transfer-Encoding: 8bit"
    );
    }
    if ($verify = true)
    {
    echo "<b class=style5><br><br>Спасибо! Скоро Вам перезвонят для подтверждения заказа.<p>";
    echo "<a href=index.htm class=style5>Нажмите,</a> чтобы вернуться на главную страницу";
    }
    else
    {
    echo "<br><br><font class=style5>Ошибка. Сообщение не отправлено!";
    }
    ?>


    Ниже форма заполнени заказа

    <form action="action.php" method="post" id="form1">
    <label><input type="checkbox" name="order1" value="roll1"><img src="images/logo_mess.png">ролл1</label>
    <label><input type="checkbox" name="order2" value="roll2"><img src="images/logo_mess.png">ролл2<br><br></label>

    <label>Фамилия Имя Отчество<br><input type="text" name="name1" size="55">
    <br><font class="style1">Пример: Иванов Иван Иванович</font></label><br><br>
    <label>Контактный телефон<br><input type="text" name="phone" size="55"><br>
    <font class="style1">Пример: 8-987-654-32-10 </font></label><br><br>
    Время доставки:<br>
    <select name="time">
    <option value="10.00-11.00">10.00-11.00</option>
    <option value="11.00-12.00">11.00-12.00</option>
    <option value="12.00-13.00">12.00-13.00</option>
    <option value="13.00-14.00">13.00-14.00</option>
    <option value="14.00-15.00">14.00-15.00</option>
    <option value="15.00-16.00">15.00-16.00</option>
    <option value="16.00-17.00">16.00-17.00</option>
    <option value="17.00-18.00">17.00-18.00</option>
    <option value="18.00-19.00">18.00-19.00</option>
    <option value="19.00-20.00">19.00-20.00</option>
    <option value="20.00-21.00">20.00-21.00</option>
    <option value="21.00-22.00">21.00-22.00</option>
    <option value="22.00-23.00">22.00-23.00</option>
    </select>
    <br><font class="style1">Выбирите удобное для Вас время доставки</font><br><br>
    <label>Адрес доставки:<br><textarea name="adress" cols="50" rows="4"></textarea>
    <br><font class="style1">Пример: ул. Советская, д.1, кв.1 </font></label><br><br>

    <label><input type="reset" name="reset1" value="Очистить форму"></label>
    <label><input type="submit" name="submit1" value="ПОДТВЕРДИТЬ ЗАКАЗ"></label>
    </form>


    Заранее спасибо!
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 6 декабря 2011 г. 1:54, спустя 12 минут 9 секунд

    kompot-cafe.ru
    мило

    а на другие ящики пробовал?
    Спустя 179 сек.
    вообще, советую юзать готовые классы для отправки писем. при этом лучше отправлять через smtp с существующего ящика с нормального сервера
  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 1:59, спустя 4 минуты 53 секунды


    kompot-cafe.ru
    мило

    а на другие ящики пробовал?
    Спустя 179 сек.
    вообще, советую юзать готовые классы для отправки писем. при этом лучше отправлять через smtp с существующего ящика с нормального сервера


    на другие ящики не пробовал. специалисты с этой хостинг компании высылали тест-уведомление с моего сайта. все нормально. на почту приходит. но вот почему то мой скрипт не работает. точнее будет сказано сообщение отправляется, но на ящик не доходит. хотя, я повторюсь, я использовал функцию mail(), которая у них на сайте выложена для отправки уведомлений (они мне посоветовали ее использовать)
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 6 декабря 2011 г. 2:02, спустя 3 минуты 21 секунду

    на другие ящики не пробовал.
    почему бы не попробовать?)

    точнее будет сказано сообщение отправляется, но на ящик не доходит.

    папку спам смотрел?)))
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 6 декабря 2011 г. 2:05, спустя 2 минуты 29 секунд

    kaylanger, mail($to, $from, $subject, $message… - лишний аргумент у функции. Какой - найди в мануале.
  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 2:10, спустя 5 минут 56 секунд

    папку спам смотрел?)))

    смотрел. все чисто :(
    почему бы не попробовать?)

    попробую на gmail

    Вообще мне посоветовали тщательно пересмотреть код до функции mail(). видимо там ошибка.
    Спустя 59 сек.
    mail($to, $from, $subject, $message… - лишний аргумент у функции. Какой - найди в мануале.

    это случайно не $from?
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 6 декабря 2011 г. 2:13, спустя 2 минуты 25 секунд

    Givi, ты еще и в код смотришь :DDDD
    Спустя 47 сек.
    это случайно не $from?

    ага, оно формируется в теле запроса
    Спустя 66 сек.
    kaylanger, а ты вообще кто по профессии/чем занимаешься?
  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 2:22, спустя 9 минут 36 секунд

    а ты вообще кто по профессии/чем занимаешься?

    профессии у меня пока что нет. учусь. насчет программирования - я далеко не профи. поэтому обратился за помощью сюда.
  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 2:29, спустя 6 минут 53 секунды

    а на другие ящики пробовал?

    попробовал на gmail. все равно уведомление не пришло. может есть еще какие нибудь идеи?
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 6 декабря 2011 г. 3:34, спустя 1 час 4 минуты 16 секунд


    а на другие ящики пробовал?

    попробовал на gmail. все равно уведомление не пришло. может есть еще какие нибудь идеи?



    Соединяйся сокетом по xmpp с вконтакте и отправляй туда сообщение юзеру, у юзера поставь отсылку смс на мобильный телефон (вроде контакт такую фичу держит)
    Альтернатива - используй твиттер апи и симку билайна, пости с аккаунта заказов через апи твиттера и на аккаунте с симкой билайна поставь "читать+смс"

    Имхо куда лучше для таких сервисов чтобы приходило на смс, а не на мыло.
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 6 декабря 2011 г. 10:57, спустя 7 часов 23 минуты 40 секунд

    kaylanger, ты разобрался с функцией mail(), скинь ту строку, которой её вызываешь, глянем что ты теперь в неё передаешь.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 6 декабря 2011 г. 14:22, спустя 3 часа 24 минуты 53 секунды

    @render
    def view(request, slug):
    page = get_object_or_404(Page, slug=slug)
    request.breadcrumbs(page.title, None)

    if not page.published and not request.user.is_staff:
    raise Http404(u'Страница "%s" еще не опубликована' % page.title)

    return {"page": page}
    =)
    Сапожник без сапог
  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 18:11, спустя 3 часа 49 минут 16 секунд


    kaylanger, ты разобрался с функцией mail(), скинь ту строку, которой её вызываешь, глянем что ты теперь в неё передаешь.


    вот код. кое что исправил, то что посоветовали на форумах. все равно не помогло. видимо действительно ошибка возникает до функции mail()

    <?php
    $orders = array(
    'order1'=>'Ролл1',
    'order2'=>'Ролл2'
    );
    if (isset($_POST['name1'])) {$name1 = $_POST['name1'];}
    if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    if (isset($_POST['adress'])) {$adress = $_POST['adress'];}
    if (empty($name1))
    {
    echo "<b class=style5>Не указано имя!<p>";
    echo "<a href=order.htm class=style5>Вернуться к заполнению формы заказа</a>";
    exit;
    }
    if (empty($phone))
    {
    echo "<b class=style5>Не указан телефон!<p>";
    echo "<a href=order.htm class=style5>Вернуться к заполнению формы заказа</a>";
    exit;
    }
    if (empty($adress))
    {
    echo "<b class=style5>Не указан адрес!<p>";
    echo "<a href=order.htm class=style5>Вернуться к заполнению формы заказа</a>";
    exit;
    }
    else
    echo "<font class=style5>Получен заказ от: </font>".$_POST["name1"];
    echo "<br><br><font class=style5>Контактный телефон: </font>".$_POST["phone"];
    echo "<br><br><font class=style5>Адрес: </font>".$_POST["adress"];
    echo "<br><br><font class=style5>Время доставки: </font>".$_POST["time"];
    $order='';
    foreach($orders as $id=>$title){
    if(isset($_POST[$id]))
    $orders.="\n{$title}";
    }
    if(isset($_POST['order1'])) echo "<br><br><font class=style5>Ролл1</font>";
    if(isset($_POST['order2'])) echo "<br><br><font class=style5>Ролл2</font>";

    if($_POST['submit']) {

    $name1 = htmlspecialchars(substr(trim($_POST['name1']), 0, 100));
    $phone = htmlspecialchars(substr(trim($_POST['phone']), 0, 100));
    $adress = htmlspecialchars(substr(trim($_POST['adress']), 0, 1000));
    $to = "[email protected]"; /*УКАЗАТЬ СВОЙ АДРЕС!*/
    $from = "[email protected]";
    $subject = "Сообщение с вашего сайта";
    $message = "Имя пославшего: $name1 \nТелефон: $phone \nАдрес:: $adress\nМеню Заказа:: $order";
    $message = wordwrap($message, 70);
    $verify = mail($to, $subject, $message,
    "From: $from\r\n
    Reply-To: $from\r\n
    Content-Type: text/plain; charset=windows-1251\r\n
    Content-Transfer-Encoding: 8bit"
    );
    }
    if ($verify = true)
    {
    echo "<b class=style5><br><br>Спасибо! Скоро Вам перезвонят для подтверждения заказа.<p>";
    echo "<a href=index.htm class=style5>Нажмите,</a> чтобы вернуться на главную страницу";
    }
    else
    {
    echo "<br><br><font class=style5>Ошибка. Сообщение не отправлено!";
    }
    ?>
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 6 декабря 2011 г. 18:37, спустя 25 минут 4 секунды

    kaylanger,

    1. if ($verify = true) - косяк. Так ты делаешь операцию присваивания, а не проверку равенства. Один знак = не то же самое что два знака == (или даже три знака ===).

    2. Этот кусок
    foreach($orders as $id=>$title){
    if(isset($_POST[$id]))
    $orders.="\n{$title}";
    }

    вообще полный ппц. У тебя есть массив, ты его раскладываешь и делаешь какой-то ппц. Если хочешь сделать присваивание имени заказа (Ролл1 или Ролл2), то коректно сделать примерно вот так:
    $orders = array('order1'=>'Ролл1','order2'=>'Ролл2');
    if (isset($_POST['id'])
    {
    $order = $orders[$_POST['id']; // это если у тебя через $_POST['id'] передается строковая переменная, равная либо "order1" либо "order2"
    }
    else
    {
    exit('Вы, бля, укажите сначала что именно хотите!'); // тут вставишь нужное тебе действие
    }


    3. Тут у тебя снова косяк (вообще я тебе в шаге 2 указал как корректно исправить это, но ты должен понять что ещё ты делаешь не так:
    $order='';
    foreach($orders as $id=>$title){
    if(isset($_POST[$id]))
    $orders.="\n{$title}";
    }

    Почему ты сначала инициализируешь переменную $order (как единичный заказ), а потом пытаешься присвоить имя уже другой (не инициализированной) переменной $orders (множественный заказ).

    4. Зачем разбивать ТЕКСТ (тело) письма по 70 символов в строку? Я про $message = wordwrap($message, 70);
    Разбивка может касаться заголовков, но текст пиши хоть в одну строку.

    5. if (isset($_POST['name1'])) {$name1 = $_POST['name1'];} - почему ты тут проверяешь только наличие переменной, а не делаешь сразу же проверку на заполненность? Да и вообще, раз передается форма, в которой было поле "name1", то по-любому в массиве $_POST такой ключ будет присутствовать. Так что лишняя проверка у тебя.

    Пока все. Исправишь это, будем думать дальше, мне пора работать.
  • kaylanger

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 6 декабря 2011 г. 18:43, спустя 6 минут 11 секунд

    Givi,Благодарю за помощь!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!