Немного не по теме, но может кто знает
кусок скрипта мейл.php
как дописать в этот цикл код который будет еще и текст инпутов получать для отправки.
$c = true;
if ( $method === 'POST' ) {
$project_name = trim($_POST["project_name"]);
$admin_email = trim($_POST["admin_email"]);
$form_subject = trim($_POST["form_subject"]);
foreach ( $_POST as $key => $value) {
if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
$message .= "
" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
</tr>
";
}
}
|
Цитата:
Цитата:
|
Цитата:
<?php
$method = $_SERVER['REQUEST_METHOD'];
//Script Foreach
$c = true;
if ( $method === 'POST' ) {
$project_name = trim($_POST["project_name"]);
$admin_email = trim($_POST["admin_email"]);
$form_subject = trim($_POST["form_subject"]);
foreach ( $_POST as $key => $value) {
if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
$message .= "
" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
</tr>
";
}
}
} else if ( $method === 'GET' ) {
$project_name = trim($_GET["project_name"]);
$admin_email = trim($_GET["admin_email"]);
$form_subject = trim($_GET["form_subject"]);
foreach ( $_GET as $key => $value) {
if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) {
$message .= "
" . ( ($c = !$c) ? '<tr>':'<tr style="background-color: #f8f8f8;">' ) . "
<td style='padding: 10px; border: #e9e9e9 1px solid;'><b>$key</b></td>
<td style='padding: 10px; border: #e9e9e9 1px solid;'>$value</td>
</tr>
";
}
}
}
$message = "<table style='width: 100%;'>$message</table>";
function adopt($text) {
return '=?UTF-8?B?'.Base64_encode($text).'?=';
}
$headers = "MIME-Version: 1.0" . PHP_EOL .
"Content-Type: text/html; charset=utf-8" . PHP_EOL .
'From: '.adopt($project_name).' <'.$admin_email.'>' . PHP_EOL .
'Reply-To: '.$admin_email.'' . PHP_EOL;
mail($admin_email, adopt($form_subject), $message, $headers );
Вот весь скрипт, он передает все инпуты внутри тега form, а конкретнее атрибут name и value. нужно чтобы опшены селектов захватывал. вот перехватчик
$("#form").submit(function() {
var th = $(this);
$.ajax({
type: "POST",
url: "calc.php",
data: th.serialize()
}).done(function() {
// Done Functions
th.trigger("reset");
});
return false;
});
</script>
|
$.ajax({type: "POST", а проверяем if ( $method === 'POST' ) } else if ( $method === 'GET' ), это что?
Ваша задача принять и отправить принятое почтой. Чтобы ее отправить какие данные для этого обязательно нужны? Если $admin_email задается формой, то почему не проверятся заполнено ли этого поле и не просто заполнено, а действительно это адрес почты? Наверное же эта проверка первичная, у вас же не понять для чего вот это foreach ( $_POST as $key => $value) { if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" ) что ну никак не выполняет требуемые условия. Если клиенту определен метод оправки формы POST, то ни о каких GET и речи быть не должно, а если пришло, значит левая форма.
if($post = array_diff(array_map('trim', $_POST), [''])) {
//массив не пуст, проверяем наличие обязательных полей
//и только если они есть и корректные формируем почтовое отправление
} else {
//ошибки заполнения формы, действия
}
|
Цитата:
<input type="hidden" name="project_name" value="ТГК"> <input type="hidden" name="admin_email" value="adm@36.ru"> <input type="hidden" name="form_subject" id="title"> скрипт писал не я, и PHP я не знаю, вот прошу помощи. может для кого-то это минутное дело. |
Если не обращать внимания на то, что обязательно требует внимания и проверки, значит закрывайте свой сайт и не задавайте вопросов.
Если адрес отправки и прочие его атрибуты определены, зачем же их передавать клиенту? Выбрасывайте из кода "умельца" написавшего эту чушь скрытые поля формы и ТГК, adm@36.ru определяйте через переменные РНР. И коли form_subject определено, значит и оно должно быть РНР переменной, а type="hidden" name="form_subject" без значения так вообще бруд не понятный для чего. И так, адрес получателя, какое-то имя и тема сообщения серверу известна. Остается открытым вопрос - что ожидать от клиента? Явно же не пустые поля, а значит по крайней мере одно из ее полей должно быть обязательным для заполнения и это условие и должно определяться в первую очередь. Как это делается я написал. Если у вас иные представления об отправке почты сервером и вы будете настаивать на своем, то дальнейшая баталия не имеет смысла. |
насчет
type="hidden" name="form_subject" id="title" value берется из тайтл.
var title = document.title;
$('#title').attr({"value":title});
еще раз повторяю все работает как часы! Просто нужно еще текст опшенов передавать, а не только их value. Насчет закрытия сайта совет просто гениальный!! :lol: Проблемы надо решать глобально! (нет тела, нет дела!) да и вообще редукционизм - принцип очень интересный |
Ваша почта, ее принцип работы с данными извне, просто бесплатный рассадник для спама. Когда это поймете, тогда можно и по остальному ответ дать. Поддерживать же бред, который выдается за код, желания нет.
|
Я бы не стал использовать ни этот "js-код", ни ваш "мейл.php".
var th = $(this),data=th.serialize();
th.find('select').each(function(){
var val=$(this).val(),name=$(this).attr('name');
if(!name) return;
$(this).find('option').each(function(i){
data+=encodeURIComponent('&'+name+'_option_'+i+'='+$(this).attr('value'));
});
});
$.ajax({
type: "POST",
url: "calc.php",
data: th.serialize()
}).done(function() {
// Done Functions
th.trigger("reset");
});
return false;
});
Серверная часть не должна нуждаться в получении извне опшенов селектов расположенных на странице, т.к. она сама формирует эту страницу. Метод получения данных не определен. Валидация формы не осуществляется вовсе. |
j0hnik,
откройте для себя $_REQUEST зачем trim к полям, про валидацию писали выше используйте хотя-бы filter_var валидация всегда!!! должна быть и на клиенте и на сервере
$key != "project_name" && $key != "admin_email" && $key != "form_subject"
$validKeys = ['project_name', 'admin_email', 'form_subject'];
if(in_array($key, $validKeys)){}
Для почты распространены PHPMailer и swiftmailer Обои можно ставить через Composer |
| Часовой пояс GMT +3, время: 12:15. |