На 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>
приходящее письмо
Подправил, вот сам 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>
Решение костыльное, но суть я думаю вы поймёте. На почту приходит такого вида письмо:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Знаю , что наверно буду объяснять непонятно ,ну вообщемУ меня возникла проблема с базой
Как сделать, чтобы из базы выводилось не одно последнее событие, как сейчас, а последние пять?