Как отправить все textarea поля с одинаковыми name?

90
13 марта 2021, 22:40

На jquery создаются texarea, их количество всегда разное -2/3/1/4/20/50...

<textarea name="good[]" wrap="hard" class="gNum"></textarea>

В php (юзаю этот скрипт ):

$form['myShopCartForm'] = array(
  'fields' => array(
    'name' => array(
      'title' => 'Имя',
      'validate' => array(
        'minlength' => '2',
        'maxlength' => '35',
      ),
      'messages' => array(
        'minlength' => 'Минимальная длинна поля [ %1$s ] - %2$s',
        'maxlength' => 'Максимальная длинна поля [ %1$s ] - %2$s',
      )
    ),
    'tell' => array(
      'title' => 'Телефон',
      'validate' => array(
        'minlength' => '9',
      ),
      'messages' => array(
        'minlength' => 'Введите телефон корректно',
      )
    ),
    'good' => array(
      'title' => '',
      'validate' => array(
      ),
      'messages' => array(
      )
    ),
    'checkbox' => array(
      'title' => 'Галочка',
      'validate' => array(
        'minlength' => '1',
      ),
      'messages' => array(
        'minlength' => '[ %1$s ] Необходимо установить',
      )
    ),
  ),
  'cfg' => array(
    'charset' => 'utf-8',
    'subject' => 'Новый заказ с сайта',
    'title' => 'Перечень товаров',
    'ajax' => true,
    'validate' => true,
    'from_email' => 'mail@mail.ru',
    'from_name' => 'noreply',
    'to_email' => 'mail@mail.ru',
    'to_name' => 'noreply1, noreply2',
    'geoip' => true,
    'referer' => true,
    'type' => 'html',
    'tpl' => true,
    'antispam' => 'email77',
    'antispamjs' => 'address77',
    'okay' => '<h3>Спасибо за заказ!</h3><br><br> Мы скоро свяжемся с Вами, пожалуйста, оставайтесь на связи.',
    'fuck' => 'ERROR - заказ не отправлен, попробуйте еще раз',
    'spam' => 'Cпам робот, пшел вон!',
    'notify' => 'color-modal-textbox',
    'usepresuf' => false
  )
);

tpl(вид приходящего письма)

<table border="0" style="background:#ffca3b;color:#000;padding:50px">
  <tr>
    <td colspan="2"><strong>Перечень заказанных товаров:</strong></td>
  </tr>
  <tr>
    <td>%%name.title%%</td>
    <td>%%name.value%%</td>
  </tr>
  <tr>
    <td>%%tell.title%%</td>
    <td>%%tell.value%%</td>
  </tr>
  <tr>
    <td>%%checkbox.title%%</td>
    <td>%%checkbox.value%%</td>
  </tr>
  <tr>
    <td>%%good.title%%</td>
    <td>%%good.value%%</td>
  </tr>
</table>

Но когда письмо приходит в нем из textarea приходят данные только последнего поля. Как подпилить чтобы приходили данные со всех полей?

Это форма написанная мною:

<form action="feedback/index.php" method="get" class="myShopCartForm" name="myShopCartForm">
<input name="name" type="text" placeholder="Имя">
<input name="tell" type="text" placeholder="Телефон">
<label class="checkbox"><input type="checkbox" class="checkbox" value="Согласился(-ась) с пользовательским соглашением" name="checkbox" checked="checked">
<span class="customCheckbox"></span><span class="agreement">Согласие с <span>Пользовательским соглашением</span></span></label>
<input class="feedback btn btn-block btn-large btn-success ttu" name="send" type="button" value="заказать">
<!-- здесь JQuery создает textarea -->
<!-- <textarea name="good" wrap="hard" class="gNum"></textarea> -->
</form>

приходящее письмо

Answer 1

Подправил, вот сам feedback/index.php

<?php
$act = isset($_REQUEST['act']) ? $_REQUEST['act'] : die('error');
$params = isset($_REQUEST['json']) ? json_decode($_REQUEST['json'], true) : array();
$jsonBox = array();
$error = array();
$info = array();
$exemple = array();
$form = array();
$host = $_SERVER['HTTP_HOST'];
$ref = $_SERVER['HTTP_REFERER'];

$form['myShopCartForm'] = array(
    'fields' => array(
        'name' => array(
            'title' => 'Имя',
            'validate' => array(
                'minlength' => '2',
                'maxlength' => '35',
            ),
            'messages' => array(
                'minlength' => 'Минимальная длинна поля [ %1$s ] - %2$s',
                'maxlength' => 'Максимальная длинна поля [ %1$s ] - %2$s',
            )
        ),
        'tell' => array(
            'title' => 'Телефон',
            'validate' => array(
                'minlength' => '9',
            ),
            'messages' => array(
                'minlength' => 'Введите телефон корректно',
            )
        ),
        'good' => array(
            'title' => 'Товары',
            'validate' => array(
            ),
            'messages' => array(
            )
        ),
        'checkbox' => array(
            'title' => 'Галочка',
            'validate' => array(
                'minlength' => '1',
            ),
            'messages' => array(
                'minlength' => '[ %1$s ] Необходимо установить',
            )
        ),
    ),
    'cfg' => array(
        'charset' => 'utf-8',
        'subject' => 'Новый заказ с сайта',
        'title' => 'Перечень заказанных товаров',
        'ajax' => true,
        'validate' => true,
        'from_email' => '89002325266@mail.ru',
        'from_name' => 'noreply',
        'to_email' => '89002325266@mail.ru',
        'to_name' => 'noreply1, noreply2',
        'geoip' => true,
        'referer' => true,
        'type' => 'html',
        'tpl' => true,
        'antispam' => 'email77',
        'antispamjs' => 'address77',
        'okay' => '<h3>Спасибо за заказ!</h3><br><br> Мы скоро свяжемся с Вами, пожалуйста, оставайтесь на связи.',
        'fuck' => 'ERROR - заказ не отправлен, попробуйте еще раз',
        'spam' => 'Cпам робот, пшел вон!',
        'notify' => 'color-modal-textbox',
        'usepresuf' => false
    )
);


if($act == 'cfg') {
    $jsonBox['configs'] = ExportConfigs($form);
    die(json_encode($jsonBox));
}
function ExportConfigs($form) {
    $need = array('antispam','antispamjs','notify');
    $conf = array();
    foreach($form as $name => $data) {
        foreach($data['cfg'] as $k => $cfg) {
            if(in_array($k, $need)) {
                $conf[$name]['cfg'][$k] = $cfg;
            }
        }
    }
    return $conf;
}

if(isset($form[$act])) {
    $form = $form[$act];
    $getdata = array();
    $sb = array(); // subject и body

    foreach($form['fields'] as $name => $field) {
        $title = (isset($field['title'])) ? $field['title'] : $name;
        $getdata[$name]['title'] = $title;
        //Проверяем, приходит массив или нет?
        if(is_array($_POST[$name])){
            $rawdata = array();
            foreach ($_POST[$name] as $item){
                $rawdata[] = $item;
            }
        }else{
            $rawdata = isset($_POST[$name]) ? trim($_POST[$name]) : '';
        }
        if(isset($field['validate'])) {
            $def = 'Поле с именем [ '.$name.' ] содержит ошибку.';
            // -0-
            if(isset($field['validate']['required']) &&
                empty($rawdata)) {
                $error[$name] = isset($field['messages']['required']) ? sprintf($field['messages']['required'], $title) :
                    (isset($messages['validator']['required']) ? sprintf($messages['validator']['required'], $title) : $def);
            }
            // -1-
            if(isset($field['validate']['minlength']) &&
                mb_strlen($rawdata) < $field['validate']['minlength']) {
                $error[$name] = isset($field['messages']['minlength']) ? sprintf($field['messages']['minlength'], $title, $field['validate']['minlength']) : $def;
            }
            // -2-
            if(isset($field['validate']['maxlength']) &&
                mb_strlen($rawdata) > $field['validate']['maxlength']) {
                $error[$name] = isset($field['messages']['maxlength']) ? sprintf($field['messages']['maxlength'], $title, $field['validate']['maxlength']) : $def;
            }
            // -3-
            if(isset($field['validate']['preg']) && mb_strlen($rawdata) > 0 &&
                !preg_match($field['validate']['preg'], $rawdata)) {
                $error[$name] = isset($field['messages']['preg']) ? sprintf($field['messages']['preg'], $title, $field['validate']['preg']) : $def;
            }
            // -4-
            if(isset($field['validate']['substr']) &&
                mb_strlen($rawdata) > $field['validate']['substr']) {
                $rawdata = mb_substr($rawdata, 0, $field['validate']['substr']);
            }
            if(!is_array($rawdata)){
                $outdata = htmlspecialchars($rawdata);
            }else{
                $outdata = $rawdata;
            }
            $getdata[$name]['value'] = $outdata;
        }
        else {
            $getdata[$name]['value'] = htmlspecialchars($rawdata);
        }
        if(empty($getdata[$name]['value'])) {
            unset($getdata[$name]);
        }

    } //foreach end

    if(isset($form['cfg']['antispam']) && isset($_POST[$form['cfg']['antispam']])) {
        if(!empty($_POST[$form['cfg']['antispam']])) {
            $error[] = $form['cfg']['spam'];
        }
    }
    if(isset($form['cfg']['antispamjs']) && isset($_POST[$form['cfg']['antispamjs']])) {
        if(!empty($_POST[$form['cfg']['antispamjs']])) {
            $error[] = $form['cfg']['spam'];
        }
    }

    if(count($error) == 0) {
        if(function_exists("mb_internal_encoding")) mb_internal_encoding($form['cfg']['charset']);
        $get_fromName = (isset($form['fields'][$form['cfg']['from_name']]) && isset($getdata[$form['cfg']['from_name']]['value']) && mb_strlen($getdata[$form['cfg']['from_name']]['value']) > 2) ? $getdata[$form['cfg']['from_name']]['value'] : ((mb_strlen($form['cfg']['from_name']) > 2 && !isset($_POST[$form['cfg']['from_name']])) ? $form['cfg']['from_name'] : 'Anonymous');
        $get_fromEmail = (isset($form['fields'][$form['cfg']['from_email']]) && isset($getdata[$form['cfg']['from_email']]['value']) && mb_strpos('@', $getdata[$form['cfg']['from_email']]['value']) === false) ? $getdata[$form['cfg']['from_email']]['value'] : ((mb_strpos('@', $form['cfg']['from_email']) !== false) ? $form['cfg']['from_email'] : 'no-reply@'.$host);
        $fromName = (function_exists("mb_encode_mimeheader")) ? mb_encode_mimeheader($get_fromName, $form['cfg']['charset'], "Q") : $get_fromName;
        $sb['subject'] = (function_exists("mb_encode_mimeheader")) ? mb_encode_mimeheader($form['cfg']['subject'], $form['cfg']['charset'], "Q") : $form['cfg']['subject'];
        $toName = trim($form['cfg']['to_name'], " ,");
        $toEmail = trim($form['cfg']['to_email'], " ,");
        if(strpos($toName, ",") !== false) {
            $exp_toName = explode(",", $toName);
            $c = count($exp_toName);
            for($i=0; $i<$c; $i++) {
                $exp_toName[$i] = (function_exists("mb_encode_mimeheader")) ? mb_encode_mimeheader(trim($exp_toName[$i]), $form['cfg']['charset'], "Q") : trim($exp_toName[$i]);
            }
        }
        else {
            $toName = (function_exists("mb_encode_mimeheader")) ? mb_encode_mimeheader($toName, $form['cfg']['charset'], "Q") : $toName;
        }
        if(strpos($toEmail, ",") !== false) {
            $exp_toEmail = explode(",", $toEmail);
        }
        $To = '';
        if(isset($exp_toEmail)) {
            $c = count($exp_toEmail);
            for($i=0; $i < $c; $i++) {
                $To .= ((isset($exp_toName) && isset($exp_toName[$i])) ? $exp_toName[$i] : $toName) . " <".trim($exp_toEmail[$i]).">";
                if($i < ($c-1)) $To .= ", ";
            }
        }
        else {
            $To = ((isset($exp_toName) && isset($exp_toName[0])) ? $exp_toName[0] : $toName)." <".$toEmail.">";
        }

        $headers = "Return-Path: <".$get_fromEmail.">\r\n";
        $headers .= "From: ".$fromName." <".$get_fromEmail.">\r\n";
        $headers .= "X-Mailer: Feedback, v0.3 (http://artuelle.com)\r\n";
        $headers .= "X-Priority: 3\r\n";
        $headers .= "Reply-To: ".$fromName." <".$get_fromEmail.">\r\n";
        //$headers .= "To: ".$To."\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/" . $form['cfg']['type'] . "; charset=\"" . $form['cfg']['charset'] . "\"\r\n";
        $headers .= "Content-Transfer-Encoding: 8bit\r\n";
        $sb['body'] = "";
        // парсим шаблон
        if($form['cfg']['tpl']) {
            $out = tpl(array('name' => $act, 'getdata' => $getdata, 'cfg' => $form['cfg']));
            if(is_string($out)) {
                $sb['body'] = $out;
            }
        }
        // или отдаем голый текст
        if(mb_strlen(trim($sb['body'])) < 10) {
            if(isset($form['cfg']['title']))
                $sb['body'] .= $form['cfg']['title']."\r\n\r\n";
            foreach($getdata as $name => $data) {
                $sb['body'] .= $data['title'].": ".$data['value']."\r\n";
            }
            if($form['cfg']['referer'])
                $sb['body'] .= "\r\n\r\n\r\n\r\n".$ref;
        }
        // если есть что добавить
        if(isset($form['cfg']['adds']) &&
            is_array($form['cfg']['adds'])) {
            $sb = adds($sb);
        }
        //отправка письма
        $mail = mail($To, $sb['subject'], $sb['body'], $headers);
        if($mail) {
            $jsonBox['ok'] = 1;
            $info[] = $form['cfg']['okay'];
            //setcookie("limit", "1", time() + $form['cfg']['limit']);
        }
        else {
            $info[] = $form['cfg']['fuck'];
        }
    }
} else {
    $error[] = 'Нет настроек формы с именем #'.$act;
}
if(count($error) > 0) {
    $jsonBox['errors'] = $error;
}
if(count($info) > 0) {
    $jsonBox['infos'] = $info;
}
die(json_encode($jsonBox)); //мертвые с косами
/* добавляет любые доп данные из вне в нужное место
 * (например в заголовок письма необходимо дабавить Ник юзера или Номер заказа )
 *
 *  */
function adds($vars) {
    global $form;
    $adds = $form['cfg']['adds'];
    foreach($adds as $key => $opts) {
        if(is_string($key)) {
            $one = array();
            $two = array();
            foreach($opts as $i => $val) {
                if(isset($_POST[$val])) {
                    $one[] = '%%'.$val.'%%';
                    $two[] = $_POST[$val];
                }
            }
            $vars[$key] = str_replace($one, $two, $vars[$key]);
        }
    }
    return $vars;
}
/*
 * парсер шаблона
 */
function tpl($vars) {
    $tpl = 'tpl/'.$vars['name'].'.tpl';
    if(file_exists($tpl)) {
        $template = file_get_contents($tpl);
        foreach($vars['getdata'] as $name => $data) {
            if(!is_array($data['value'])){
                $template = str_replace(array("%%".$name.".title%%", "%%".$name.".value%%"), array($data['title'], $data['value']), $template);
            }else{
                $i = 1;
                $temp = '';
                foreach ($data['value'] as $item){
                    $temp .= '<tr>';
                    $temp .= '<td>' . $data['title'] . $i . '</td>';
                    $temp .= '<td>' . $item . '</td>';
                    $temp .= '</tr>';
                    $i++;
                }
                $template = str_replace($name, $temp, $template);
            }
        }
        return $template;
    }
    else {
        return false;
    }
}

И myShopCartForm.tpl:

<table border="0" style="background:#ffca3b;color:#000;padding:50px">
  <tr>
    <td colspan="2"><strong>Перечень заказанных товаров:</strong></td>
  </tr>
  <tr>
    <td>%%name.title%%</td>
    <td>%%name.value%%</td>
  </tr>
  <tr>
    <td>%%tell.title%%</td>
    <td>%%tell.value%%</td>
  </tr>
  <tr>
    <td>%%checkbox.title%%</td>
    <td>%%checkbox.value%%</td>
  </tr>
  good
</table>

Решение костыльное, но суть я думаю вы поймёте. На почту приходит такого вида письмо:

READ ALSO
Форма редактирования/создания рецепта

Форма редактирования/создания рецепта

Хотел посоветоваться в решении такой задачи

115
Вывод из базы данных php

Вывод из базы данных php

Знаю , что наверно буду объяснять непонятно ,ну вообщемУ меня возникла проблема с базой

106
Как сделать чтобы выводилось 5 последних событий?

Как сделать чтобы выводилось 5 последних событий?

Как сделать, чтобы из базы выводилось не одно последнее событие, как сейчас, а последние пять?

82