Немного не по теме, но может кто знает
кусок скрипта мейл.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 |
Poznakomlus, на каком основании в данном случае должен фигурировать $_REQUEST?
$key != "project_name" && $key != "admin_email" && $key != "form_subject" - этого вообще не должно быть в форме. Ну что такое, какой-то ламер написал хрень для непонимающего, и вы туда же. |
Цитата:
Ламерство не в отношении ученика, а написавшего, предлагать к учебе вредное к чему? |
laimas,
Видать вы так-же научились читать, только что хотите видеть Если подробно то Цитата:
if ( $method === 'POST' ) { // } else if ( $method === 'GET' ) { Вы уж простите, но с каких это времен знание глобальных переменных языка стало вредным? |
Poznakomlus,
то есть по вашему это в порядке вещей по отношению к почте? Я так и не узнал от автора чего у него там кроме мыла в форме, что нужно отправлять постой. Но сама по себе отправка почтового сообщения методом GET означает, что ее содержимое благополучно будет кешировано у роботов. В чем копаются все, кому не лень, а кто-то и целенаправлено. То есть слить таким образом в кеш личные данные своих пользователей это в порядке вещей? Цитата:
|
Цитата:
Или с кешом не так или запрещать не умеете. Я вот не говорил, что правильно и каким методом отправлять, а вы опять в лужу . Выдуманное кеширование и роботы. Вы хотите что то сказать про $_REQUEST. Так вроде уже ответил. |
Цитата:
И это не выдуманное мною. Я говорил единственное - сценарием определена отправка почты методом POST, каким боком к этому имеет отношение метод GET, а следовательно и $_REQUEST? Если же на все наплевать и принимать и методом GET, то это плохо, утверждать же обратное еще хуже, автор многого не понимает, но на ус мотает. Хотите советуйте так продолжать, это ваше право. |
Очень плохой скрипт говорите. =(
Единственный скрипт который выполняющий необходимые мне задачи который я нашел. А задача собственно была такая (есть скрипты которые просчитывают тамбуры, окна, двери, навесы итд.. на каждой странице по 20-25 различных инпута, которые надо отправлять, они могут и даже будут меняться) а этот скрипт отправляет любые стоить только обернуть тегом форм, просто и быстро. Если знаете что то подобное где не надо лезть в именно PHP код (НЕ ЛАМЕРСКИЙ) пожалуйста напишите. |
Цитата:
Я ведь говорил, что адрес вы получаете извне и даже не проверяете его, ставя во главу угла второстепенное. А нужно это не слать скрытыми полями, а определить через переменные на сервере, причем сервер формирует и страницу с формой, а значит и знает ее title, выдирать ее на клиенте опять возвращая серверу, это бесполезная операция. Уж точно вам захочется поместить на своих страницах яндекс метрики и подобные, которые будут кешировать у себя все GET запросы пользователя. А это означает, что отправка формы, которая может содержать и приватные данные, может попасть в открытый доступ. GET запросы для параметров в URL, поиска и подобного, но уж точно не для почты. Если даже чисто выбор тамбуров и дверей на страницах, то даже в этом случае какое может быть оправдание тому, что с одной можно получить GET, а с другой POST? К чему такое разнообразие для одной конкретной задачи? Вы ожидаете выбор пользователя. Означает ли это, что пользователь может вообще ничего не выбирать, но почту вам отправить? Наверное же нет. Тем не менее когда я об этом писал, ваша реакция на это была нулевой. Как вам написать что-то, если вы не понимаете или не хотите понять, что данные извне требуют проверки, и не приводите кода свой формы? Поймите, вас никто не пинает, когда предлагают хотя бы почитать о вопросах, которые затрагивает ваша тема. |
Часовой пояс GMT +3, время: 03:36. |