Как сформировать и отправить письмо, если не знаешь ни один name, class и id?

drkrol

Постоялец
Регистрация
6 Мар 2016
Сообщения
112
Реакции
11
Здравствуйте. Посмотрите на код:
HTML:
<div>
  <span id="name" name="name">Переменное название 1</span>
  <span id="price" name="price">переменная цена 1</span>
  <span><input type="text" name="kol" value="1">шт.</span>
  <span id="stoim" name="stoim">переменная стоимость 1</span>
</div>
<div>
  <span id="name" name="name">Переменное название 2</span>
  <span id="price" name="price">переменная цена 2</span>
  <span><input type="text" name="kol" value="1">шт.</span>
  <span id="stoim" name="stoim">переменная стоимость 2</span>
</div>
...

Нужно отправить эти "переменные значения" на почту. Кол-во этих "переменных" неизвестно. Если я задам id одному из обособляемых "переменных", то этот id задастся всем другим.

Вообще, по факту, код выглядит так:
HTML:
<div>
  <span id="name" name="name">{tittle}</span>
  <span id="price" name="price">{price}</span>
  <span><input type="text" name="kol" value="1">шт.</span>
  <span id="stoim" name="stoim">{stoim}</span>
</div>

, а движок уже сам определяется, сколько таких div вывести

Если бы я знал name и кол-во таких div (в этом случае 2), то php код выглядел примерно так:
PHP:
$name= $_POST['name'];
$price= $_POST['price'];
$kol= $_POST['kol'];
$stoim = $_POST['stoim'];
$name2= $_POST['name2'];
$price2= $_POST['price2'];
$kol2= $_POST['kol2'];
$stoim2 = $_POST['stoim2'];
$message = "название $name, цена $price, кол-во $kol, стоимость $stoim . название $name2, цена $price2, кол-во $kol2, стоимость $stoim2";

, но я его не знаю, так как не знаю, сколько будет таких div.

Так же я могу беспроблемно вместо
<span id="name" name="name">{tittle}</span>
Написать
<input type="text" name="kol" value="{tittle}">
, но что это меняет?

Подскажите, каким образом можно отправить php файлу эти безымянные переменные и обработать в самом php их?
 
Здравствуйте. Посмотрите на код:
HTML:
<div>
  <span id="name" name="name">Переменное название 1</span>
  <span id="price" name="price">переменная цена 1</span>
  <span><input type="text" name="kol" value="1">шт.</span>
  <span id="stoim" name="stoim">переменная стоимость 1</span>
</div>
<div>
  <span id="name" name="name">Переменное название 2</span>
  <span id="price" name="price">переменная цена 2</span>
  <span><input type="text" name="kol" value="1">шт.</span>
  <span id="stoim" name="stoim">переменная стоимость 2</span>
</div>
...

Нужно отправить эти "переменные значения" на почту. Кол-во этих "переменных" неизвестно. Если я задам id одному из обособляемых "переменных", то этот id задастся всем другим.

Вообще, по факту, код выглядит так:
HTML:
<div>
  <span id="name" name="name">{tittle}</span>
  <span id="price" name="price">{price}</span>
  <span><input type="text" name="kol" value="1">шт.</span>
  <span id="stoim" name="stoim">{stoim}</span>
</div>

, а движок уже сам определяется, сколько таких div вывести

Если бы я знал name и кол-во таких div (в этом случае 2), то php код выглядел примерно так:
PHP:
$name= $_POST['name'];
$price= $_POST['price'];
$kol= $_POST['kol'];
$stoim = $_POST['stoim'];
$name2= $_POST['name2'];
$price2= $_POST['price2'];
$kol2= $_POST['kol2'];
$stoim2 = $_POST['stoim2'];
$message = "название $name, цена $price, кол-во $kol, стоимость $stoim . название $name2, цена $price2, кол-во $kol2, стоимость $stoim2";

, но я его не знаю, так как не знаю, сколько будет таких div.

Так же я могу беспроблемно вместо
<span id="name" name="name">{tittle}</span>
Написать
<input type="text" name="kol" value="{tittle}">
, но что это меняет?

Подскажите, каким образом можно отправить php файлу эти безымянные переменные и обработать в самом php их?
В name можно что-то типа массива name="array[1][name]"
Тоесть 1 это группа а name ключ. и формируйте с учётом этого ваш html
 
Подскажите, каким образом можно отправить php файлу эти безымянные переменные и обработать в самом php их?
Если сделать вот так:
PHP:
<div>
  <input type="hidden" name="name[]" value="{tittle}">
  <input type="hidden" name="price[]" value="{price}">
  <span><input type="text" name="kol[]" value="1">шт.</span>
  <input type="hidden" name="stoim[]" value="{stoim}">
</div>
То на сервере можно обработать в цикле сколько угодно таких блоков:
PHP:
foreach ($_POST['name'] as $key=>$value) {
$name= $_POST['name'][$key];
$price= $_POST['price'][$key];
$kol= $_POST['kol'][$key];
$stoim = $_POST['stoim'][$key];
//Здесь обрабатываем данные — отсылаем на почту, запоминаем в переменную или в базу
}
Насчёт id. По стандарту id должен быть только 1 на странице, поэтому из цикла нужно их убрать. Если нужно прицепиться к чему-то яваскриптом, то для массивов используйте классы. И код формы не забудьте обрамить инпуты формой и сделать внизу сабмит-кнопку <input type="submit" value="Заслать запрос">
Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
спасибо. а как быть с выводом? в смысле "$message = "название $name, цена $price, кол-во $kol, стоимость $stoim . название $name2, цена $price2, кол-во $kol2, стоимость $stoim2";
 
в пост запросе будут приходить массивы
PHP:
$_POST['name'][0]
$_POST['name'][1]
$_POST['name'][2]
...
аналогично остальные поля
выше пример с foreach очень правильно описывает перебор полей
 
Эм... Посмотрите на код пожалуйста. Что я пропустил?
PHP:
foreach ($_POST['name'] as $key=>$value) {
$name= $_POST['name'][$key];
$price= $_POST['price'][$key];
$kol= $_POST['kol'][$key];
$stoim = $_POST['stoim'][$key];
}
$error = "no";
// Тут должна быть проверка полей
if($error=="no") {

        $to = 'gmail@gmail.com'; //Почта получателя, через запятую можно указать сколько угодно адресов
        $subject = 'Заявка'; //Загаловок сообщения
        $message = '$name[1] $name[0]'; //Текст нашего сообщения
        $headers  = "Content-type: text/html; charset=utf-8 \r\n"; //Кодировка письма
        $headers .= "From: Отправитель <from@example.com>\r\n"; //Наименование и почта отправителя
        if(mail($to, $subject, $message, $headers)){
            echo "Ok"; // Отправлено
        }else{
            echo "erorr";  // Неотправлено
        }
}else {
    echo "global error"; // Не пыталось даже
}

HTML:
<form enctype="multipart/form-data" method="post" id="favaa" class="rel">
<input type="text" name="name[]" value="[xfvalue_podname] {title} [xfvalue_podraz]">
  <input type="text" name="price[]" value="[xfvalue_price]">
  <span><input type="text" name="kol[]" value="1">шт.</span>
  <input type="text" name="stoim[]" >
<input type="submit" value="Заказать звонок"/>
        </form>
Код:
      $(function(){
    $("#favaa").on('submit', function(e){ //устанавливаем событие отправки для формы с id=form
            e.preventDefault();
            var fd = new FormData( this );
            $.ajax({
            type: "POST", //Метод отправки
            url: "/buy.php", //путь до php фаила отправителя
            contentType: false, // важно - убираем форматирование данных по умолчанию
            processData: false, // важно - убираем преобразование строк по умолчанию
            data: fd,
            success: function(msg) {
                alert("Ваше сообщение отпрвлено!");
            }
    });
});
});
 
на первый взгляд вроде ничего...

только зачем объявлять
Код:
$error = "no";
и далее ее проверять
Код:
if($error=="no") {
если по существу эта переменная нигде не меняется. в данном коде эта проверка бессмысленна
 
только зачем объявлять и далее ее проверять
Да у меня там своя проверка. Я чтоб не засорять код её на время удалил.

Яж почему спросил, нормально ли всё с кодом? У меня на почту приходит такой текст: "$name[1] $name[0]", хотя должен приходить "текст 2 текст 1"
 
текст в одинарных кавычках не распознается как переменные.
либо заворачивайте в двойные кавычки
Код:
$message = "$name[1] $name[0]"; //Текст нашего сообщения
либо склеивайте переменные с текстом. я предпочитаю второй вариант:
Код:
$message = $name[1].' '.$name[0]; //Текст нашего сообщения
P.S.
тестеры в инете пишут что вариант "$name[1] $name[0]" работает медленнее
 
либо заворачивайте в двойные кавычки
теперь вместо текста пришли две кракозябры, а когда попытался отправить price (т.е. число), то пришло: "8 5", хотя price первого был 850, а второго 830.
 
Назад
Сверху