Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.05.2017, 13:17
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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>
		";
	}
}
Ответить с цитированием
  #2 (permalink)  
Старый 13.05.2017, 14:02
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от j0hnik
foreach ( $_POST as $key => $value) {
if ( $value != "" && $key != "project_name" && $key != "admin_email" && $key != "form_subject" )
Уверены, что это будет выполняться?

Сообщение от j0hnik
код который будет еще и текст инпутов получать
Для этого их надо передать формой под какими-то ключами. Где они?
Ответить с цитированием
  #3 (permalink)  
Старый 14.05.2017, 10:51
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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>
Ответить с цитированием
  #4 (permalink)  
Старый 14.05.2017, 11:14
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 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 {
    //ошибки заполнения формы, действия
}
Ответить с цитированием
  #5 (permalink)  
Старый 14.05.2017, 12:56
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 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 я не знаю, вот прошу помощи. может для кого-то это минутное дело.
Ответить с цитированием
  #6 (permalink)  
Старый 14.05.2017, 14:15
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если не обращать внимания на то, что обязательно требует внимания и проверки, значит закрывайте свой сайт и не задавайте вопросов.

Если адрес отправки и прочие его атрибуты определены, зачем же их передавать клиенту? Выбрасывайте из кода "умельца" написавшего эту чушь скрытые поля формы и ТГК, adm@36.ru определяйте через переменные РНР. И коли form_subject определено, значит и оно должно быть РНР переменной, а type="hidden" name="form_subject" без значения так вообще бруд не понятный для чего.

И так, адрес получателя, какое-то имя и тема сообщения серверу известна. Остается открытым вопрос - что ожидать от клиента? Явно же не пустые поля, а значит по крайней мере одно из ее полей должно быть обязательным для заполнения и это условие и должно определяться в первую очередь. Как это делается я написал.

Если у вас иные представления об отправке почты сервером и вы будете настаивать на своем, то дальнейшая баталия не имеет смысла.
Ответить с цитированием
  #7 (permalink)  
Старый 14.05.2017, 14:58
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

насчет
type="hidden" name="form_subject" id="title"

value берется из тайтл.
var title = document.title;
	$('#title').attr({"value":title});

еще раз повторяю все работает как часы!
Просто нужно еще текст опшенов передавать, а не только их value.

Насчет закрытия сайта совет просто гениальный!!
Проблемы надо решать глобально! (нет тела, нет дела!)
да и вообще редукционизм - принцип очень интересный
Ответить с цитированием
  #8 (permalink)  
Старый 14.05.2017, 15:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ваша почта, ее принцип работы с данными извне, просто бесплатный рассадник для спама. Когда это поймете, тогда можно и по остальному ответ дать. Поддерживать же бред, который выдается за код, желания нет.
Ответить с цитированием
  #9 (permalink)  
Старый 14.05.2017, 18:29
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 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.
Ответить с цитированием
  #10 (permalink)  
Старый 15.05.2017, 00:56
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 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
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парни кто знает как... dezytube Элементы интерфейса 0 25.08.2016 18:27
Кто рисует это? greatilya Оффтопик 2 19.01.2011 13:19
Помогите кто может?! Ingiborn Javascript под браузер 7 04.12.2009 19:06
Подскажите кто может Matvey Общие вопросы Javascript 2 23.07.2009 09:04
Может кто подсказать как можно сделать submit из левого фрейма в правый maxander Internet Explorer 1 28.11.2008 10:15