13.05.2017, 13:17
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Немного не по теме, но может кто знает
кусок скрипта мейл.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>
";
}
}
|
|
13.05.2017, 14:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от j0hnik
|
foreach ( $_POST as $key => $value) {
if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" )
|
Уверены, что это будет выполняться?
Сообщение от j0hnik
|
код который будет еще и текст инпутов получать
|
Для этого их надо передать формой под какими-то ключами. Где они?
|
|
14.05.2017, 10:51
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от laimas
|
Уверены, что это будет выполняться?
Все работает!
Для этого их надо передать формой под какими-то ключами. Где они?
|
<?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>
|
|
14.05.2017, 11:14
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
$.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 {
//ошибки заполнения формы, действия
}
|
|
14.05.2017, 12:56
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
Сообщение от laimas
|
$.ajax({type: "POST", а проверяем if ( $method === 'POST' ) } else if ( $method === 'GET' ), это что?
Ваша задача принять и отправить принятое почтой. Чтобы ее отправить какие данные для этого обязательно нужны? Если $admin_email задается формой, то почему не проверятся заполнено ли этого поле и не просто заполнено, а действительно это адрес почты?
|
Да не обращайте на это внимание, на странице есть скрытый блок
<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 я не знаю, вот прошу помощи. может для кого-то это минутное дело.
|
|
14.05.2017, 14:15
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Если не обращать внимания на то, что обязательно требует внимания и проверки, значит закрывайте свой сайт и не задавайте вопросов.
Если адрес отправки и прочие его атрибуты определены, зачем же их передавать клиенту? Выбрасывайте из кода "умельца" написавшего эту чушь скрытые поля формы и ТГК, adm@36.ru определяйте через переменные РНР. И коли form_subject определено, значит и оно должно быть РНР переменной, а type="hidden" name="form_subject" без значения так вообще бруд не понятный для чего.
И так, адрес получателя, какое-то имя и тема сообщения серверу известна. Остается открытым вопрос - что ожидать от клиента? Явно же не пустые поля, а значит по крайней мере одно из ее полей должно быть обязательным для заполнения и это условие и должно определяться в первую очередь. Как это делается я написал.
Если у вас иные представления об отправке почты сервером и вы будете настаивать на своем, то дальнейшая баталия не имеет смысла.
|
|
14.05.2017, 14:58
|
|
Профессор
|
|
Регистрация: 01.12.2016
Сообщений: 3,650
|
|
насчет
type="hidden" name="form_subject" id="title"
value берется из тайтл.
var title = document.title;
$('#title').attr({"value":title});
еще раз повторяю все работает как часы!
Просто нужно еще текст опшенов передавать, а не только их value.
Насчет закрытия сайта совет просто гениальный!!
Проблемы надо решать глобально! (нет тела, нет дела!)
да и вообще редукционизм - принцип очень интересный
|
|
14.05.2017, 15:32
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ваша почта, ее принцип работы с данными извне, просто бесплатный рассадник для спама. Когда это поймете, тогда можно и по остальному ответ дать. Поддерживать же бред, который выдается за код, желания нет.
|
|
14.05.2017, 18:29
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,794
|
|
Я бы не стал использовать ни этот "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;
});
Серверная часть не должна нуждаться в получении извне опшенов селектов расположенных на странице, т.к. она сама формирует эту страницу.
Метод получения данных не определен.
Валидация формы не осуществляется вовсе.
Последний раз редактировалось Nexus, 14.05.2017 в 18:31.
|
|
15.05.2017, 00:56
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
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
|
|
|
|