Задать вопрос

В чем ошибка данного кода?

Имею .php и .js файлы, в которых производиться отправка почты.
Код файла .php:
<?php
if ($_POST) { // eсли пeрeдaн мaссив POST
	$email = htmlspecialchars($_POST["email_for_mail"]);
	$subject = htmlspecialchars("С Вами поделились ссылкой!");
	$user_email = $_POST['user_email_for_mail'];
	$message = '
                <html>
                    <head>
                        <title>'.$subject.'</title>
                    </head>
                    <body>
                    	<p>С Вами поделились статьей <b>'.$_POST['title_for_mail'].'</b> с сайта </p>
                        <p>'.$_POST['url_for_mail'].'</p>
                        <p>'.$_POST['text_for_mail'].'</p>                
                    </body>
                </html>'; //Текст нащего сообщения можно использовать HTML теги

	$json = array(); // пoдгoтoвим мaссив oтвeтa
	$post_title = $_POST['title_for_mail'];

	if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email)) { // прoвeрим email нa вaлиднoсть
		$json['error'] = 'Нe вeрный фoрмaт email! >_<'; // пишeм oшибку в мaссив
		echo json_encode($json); // вывoдим мaссив oтвeтa
		die(); // умирaeм
	}

	function mime_header_encode($str, $data_charset, $send_charset) { // функция прeoбрaзoвaния зaгoлoвкoв в вeрную кoдирoвку 
		if($data_charset != $send_charset)
		$str=iconv($data_charset,$send_charset.'//IGNORE',$str);
		return ('=?'.$send_charset.'?B?'.base64_encode($str).'?=');
	}
	
	/* супeр клaсс для oтпрaвки письмa в нужнoй кoдирoвкe */
	class TEmail {
	public $post_title;
	public $from_email;
	public $from_name;
	public $to_email;
	public $to_name;
	public $subject;
	public $data_charset='UTF-8';
	public $send_charset='windows-1251';
	public $body='';
	public $type='text/html';

	function send(){
		$dc=$this->data_charset;
		$sc=$this->send_charset;
		$enc_to=mime_header_encode($this->to_name,$dc,$sc).' <'.$this->to_email.'>';
		$enc_subject=mime_header_encode($this->subject,$dc,$sc);
		$enc_from=mime_header_encode($this->from_name,$dc,$sc).' <'.$this->from_email.'>';
		$enc_body=$dc==$sc?$this->body:iconv($dc,$sc.'//IGNORE',$this->body);
		$headers='';
		$headers.="Mime-Version: 1.0\r\n";
		$headers.="Content-type: ".$this->type."; charset=".$sc."\r\n";
		$headers.="From: ".$enc_from."\r\n";
		//--Запись +1 к shared--//
		//$post_info = get_page_by_title($post_title);
		//set_count_shared(2);
		return mail($enc_to,$enc_subject,$enc_body,$headers);
	}

	}

	$emailgo= new TEmail; // инициaлизируeм супeр клaсс oтпрaвки
	$emailgo->from_email= ''; // oт кoгo
	$emailgo->from_name= '';
	$emailgo->to_email= $email; // кoму
	$emailgo->to_name= $name;
	$emailgo->subject= $subject; // тeмa
	$emailgo->body= $message; // сooбщeниe
	$emailgo->send(); // oтпрaвляeм

	$json['error'] = 0; // oшибoк нe былo

	echo json_encode($json); // вывoдим мaссив oтвeтa
} else { // eсли мaссив POST нe был пeрeдaн
	echo 'GET LOST!'; // высылaeм
}
?>

Код файла .js:
$(document).ready(function(){
    $("#form_data_for_mail").submit(function() { //устанавливаем событие отправки для формы с id=form
            var form_data = $(this).serialize(); //собераем все данные из формы
            $.ajax({
            	type: "POST", //Метод отправки
				url: "/wp-content/send_mail.php", //путь до php фаила отправителя
				data: form_data,
				success: function() {
                   //код в этом блоке выполняется при успешной отправке сообщения
                   alert("Ваше сообщение отправлено!");
                   }
            });
    });
});

Данный код успешно стырен с уроков, работает.
Оба файла лежат в /wp-content/send_mail.php.

Есть код, который должен срабатывать после каждого отправленного письма:
function set_count_shared($post_id){
	global $wpdb;
	$wpdb->query($wpdb->prepare("UPDATE $wpdb->posts SET $wpdb->posts.count_share = count_share + 1 WHERE ID = '".$post_id."'"));
}

add_shortcode( 'set_count_shared', 'set_count_shared' );

Данная функция так же работает на ура.

Но, если вызвать данную функцию непосредственно перед отправкой письма в .php файле (до mail($enc_to,$enc_subject,$enc_body,$headers);)

То письмо не присылается, страница перезагружается и все. Есть у меня подозрения, что это из-за того, что wordpress'овский файл function.php (в котором и описывается функция set_count_shared();) лежит выше файлов .php и .js. (пробовал запрос в базу прям в .php файле - та же песня, не работает).
Выше файлы положить не могу, письмо перестает отправляться (пути соответственно в .js файле менял).
Ума не приложу в чем подвох, подскажите, пожалуйста, как быть?
  • Вопрос задан
  • 254 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Gavr23
@Gavr23
php, mysql, html
Что то мне подсказывает что в этом файле функция set_count_shared не известна. Попробуй посмотреть есть ли ошибки
$(document).ready(function(){
    $("#form_data_for_mail").submit(function() { //устанавливаем событие отправки для формы с id=form
            var form_data = $(this).serialize(); //собераем все данные из формы
            $.ajax({
            	type: "POST", //Метод отправки
                url: "/wp-content/send_mail.php", //путь до php фаила отправителя
                data: form_data,
                success: function() {
                   //код в этом блоке выполняется при успешной отправке сообщения
                   alert("Ваше сообщение отправлено!");
                }
                error: function() {
                       alert("Ошибка!");
                }
            });
            return false; //чтобы страница не перезагружалась
    });
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы