vainax
@vainax
псевдо-разработчик

В чем может быть ошибка в форме?

создал форму обратной связи с записью введенных данных в файле txt
<!DOCTYPE HTML>
<html>
<head>
    <title>Форма</title>
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"  type="text/javascript"></script>
    <script>
        $(document).ready(function(){
            $('#btn_submit').click(function(){
                // собираем данные с формы
                var user_name    = $('#user_name').val();
                var user_email   = $('#user_email').val();
                var text_comment = $('#text_comment').val();
                // отправляем данные
                $.ajax({
                    url: "action.php", // куда отправляем
                    type: "post", // метод передачи
                    dataType: "json", // тип передачи данных
                    data: { // что отправляем
                        "user_name":    user_name,
                        "user_email":   user_email,
                        "text_comment": text_comment
                    },
                    // после получения ответа сервера
                    success: function(data){
                        $('.messages').html(data.result); // выводим ответ сервера
                    }
                });
            });
        });
    </script>
</head>
<body>
    <br/>
    <div class="messages"></div>
    <br/>
    <label>Ваше имя:</label><br/>
    <input type="text" id="user_name" value="" /><br/>
     
    <label>Ваш e-mail:</label><br/>
    <input type="text" id="user_email" value="" /><br/>
     
    <label>Текст сообщения:</label><br/>
    <textarea id="text_comment"></textarea>
     
    <br/>
    <input type="button" value="Отправить" id="btn_submit" />     
</body>
</html>

<?php
    $msg_box = ""; // в этой переменной будем хранить сообщения формы
    $errors = array(); // контейнер для ошибок
    // проверяем корректность полей
    if($_POST['user_name'] == "")    $errors[] = "Поле 'Ваше имя' не заполнено!";
    if($_POST['user_email'] == "")   $errors[] = "Поле 'Ваш e-mail' не заполнено!";
    if($_POST['text_comment'] == "") $errors[] = "Поле 'Текст сообщения' не заполнено!";
 
    // если форма без ошибок
    if(empty($errors)){     
        // собираем данные из формы
        $message  = "Имя пользователя: " . $_POST['user_name'] . "<br/>";
        $message .= "E-mail пользователя: " . $_POST['user_email'] . "<br/>";
        $message .= "Текст письма: " . $_POST['text_comment'];      
        send_mail($message); // отправим письмо
        // выведем сообщение об успехе
        $msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
    }else{
        // если были ошибки, то выводим их
        $msg_box = "";
        foreach($errors as $one_error){
            $msg_box .= "<span style='color: red;'>$one_error</span><br/>";
        }
    }
 
    // делаем ответ на клиентскую часть в формате JSON
    echo json_encode(array(
        'result' => $msg_box
    ));
     
     
    // функция отправки письма
    function send_mail($message){
        // почта, на которую придет письмо
    	$file=fopen('mes.txt','a+'); 
    	fputs($file,$_POST['user_name']); 
    	fputs($file,$_POST['user_email']); 
    	fputs($file,$_POST['text_comment']); 
    	fclose($file); 
         
        // отправляем письмо 
        mail($message);
    }
     
?>

Данные записываются, но почему то текста "Сообщение отправлено" нет и переноса по строкам в файле тоже
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
maddog670
@maddog670
У вас скорей всего ошибка при отправке сообщения. Запись в файл происходит, а сообщение не отправляет

<?php
ini_set('display_errors', true);
ini_set('html_errors', false);

error_reporting(E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);

    $msg_box = ""; // в этой переменной будем хранить сообщения формы
    $errors = array(); // контейнер для ошибок
    // проверяем корректность полей
    if($_POST['user_name'] == "")    $errors[] = "Поле 'Ваше имя' не заполнено!";
    if($_POST['user_email'] == "")   $errors[] = "Поле 'Ваш e-mail' не заполнено!";
    if($_POST['text_comment'] == "") $errors[] = "Поле 'Текст сообщения' не заполнено!";
 
    // если форма без ошибок
    if(empty($errors)){     
        // собираем данные из формы
        $message  = "Имя пользователя: " . $_POST['user_name'] . "<br/>";
        $message .= "E-mail пользователя: " . $_POST['user_email'] . "<br/>";
        $message .= "Текст письма: " . $_POST['text_comment'];      
        if(send_mail($message)){
        	// выведем сообщение об успехе
        	$msg_box = "<span style='color: green;'>Сообщение успешно отправлено!</span>";
        }else{
        	$msg_box = "<span style='color: red;'>Сообщение не отправлено!</span>";
        }
    }else{
        // если были ошибки, то выводим их
        $msg_box = "";
        foreach($errors as $one_error){
            $msg_box .= "<span style='color: red;'>$one_error</span><br/>";
        }
    }
 
    // делаем ответ на клиентскую часть в формате JSON
    echo json_encode(array(
        'result' => $msg_box
    ));
     
     
    // функция отправки письма
    function send_mail($message){
        // почта, на которую придет письмо
        if(file_put_contents('mes.txt', $_POST['user_name']."\n".$_POST['user_email']."\n".$_POST['text_comment'], FILE_APPEND | LOCK_EX)){
        	return true;
        }
        else{
        	return false;
        }
    }
     
?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@jimquery
Возможно success не выполняется.
Смотри по логам веб-сервера на наличие ошибок со стороны php-скрипта.
Со стороны браузера ошибки в консоли JS. Можешь выводить отладочные сообщения через console.log() и смотреть какие участки выполняются и что возвращают.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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