Немного не по теме, но может кто знает
кусок скрипта мейл.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, время: 17:10. |