Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
1

Отправка письма

11.03.2020, 19:43. Просмотров 289. Ответов 16
Метки нет (Все метки)


Имеется код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<? session_start(); error_reporting(0); ?><!DOCTYPE html>
<html><head>
    <?php $title = 'Отправить на email';
    include ("head.php"); 
    include ("feedback.php"); ?>
</head><body>
    <div class="one">
        <?php include ("header.php"); ?>
        <div class="content">
            <?php include ("nav.php"); ?>
            <section>
<? if ($_POST) {
        $name = trim($_POST['name']);
        $email = trim($_POST['email']);
        $tem = trim($_POST['tem']);
        $comment = trim($_POST['comment']);
        $error = false;
 
        if (empty($email)) {
            $error = true;
            $errortext_pas = "<font color='red'>Обязательное поле</font>";
        } else {
            if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,4}$/i",$email)) {
                $error = true;
                $emailErr = "<font color='red'>Неправильно заполнено поле e-mail </font>";
            }
        }
        
        if (empty($name)) {
            $error = true;
            $nameErr = "<font color='red'>Имя обязательно</font>";
        } 
            
        if ($error == false) {
            $qs = mysql_query("INSERT `sms`(`sms_na`, `sms_email`, `sms_tem`, `sms_comment`) VALUES ('$name','$email','$tem', '$comment')");
            echo 'Отправлено сообщение';
            exit("<meta http-equiv='Refresh' content='0; URL=index.php'>");
        }
    }
?>
<? if ($_SESSION['na']) { ?>
    <div>
        <table class="hh2">
            <tr>
                <td><h2>Отправить на email</h2></td>
                <td><div id="msgbox"><span id="msg"><?php echo $msg_box;?></span></div></td>
            </tr>
        </table>
        <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
            <table class="frm">
                <tbody>
                    <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" >
                        <tr>
                            <td><label>Представьтесь: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="name" value="<?php echo $name;?>"></td>
                            <td><span class="error2"> <?php echo $nameErr;?></span></td>
                        </tr><tr>
                            <td><label>Ваш E-mail: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="email" value="<?php echo $email;?>"></td>
                            <td> <span class="error2"> <?php echo $emailErr;?></span></td>
                        </tr><tr>
                            <td><label>Тема сообщения: </label></td>
                            <td><input class="input_group" type="text" name="tem" value="<?php echo $tem;?>"></td>
                        </tr><tr>
                            <td><label>Текст сообщения: </label></td>
                            <td><textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea></td>
                        </tr><tr>
                            <td><p><span class="error2"><span>*</span> обязательные поля</span></p></td>
                        </tr><tr>
                            <td align="right" colspan="3"><input id="btn" type="submit" name="submit" value="Отправить"></td>
                        </tr>
                    </form>
                </tbody>
            </table>
        </form>
    </div>
    <div><p><br><br></div>
<? } else { ?>
    <p><br><a id="a_a" href="log.php">Авторизуйтесь</a>, чтобы связаться с нами
<?}?>
 
            </section>
        </div>
    </div>
    <?php include ("footer.php"); ?>
</body></html>
Но при отправке письма в нём добавляется лишний мусор в виде дублирования имени пользователя, а так же нужно конвертировать текст в хтмл формат. Помогите доделать.

Пример текста письма, мусор в 6й строке
Код
X-Sendmail-Cmdline: sendmail.pl -t -i
To: comp@comp.ru
Subject: Письмо с обратной связи
X-PHP-Originating-Script: 0:feedback.php
Content-type:text/html; charset=utf-8
qqq

Имя пользователя: qqq
E-mail пользователя: 11@23.com
Тема сообщения: dfdfgtrgyt
Текст письма: retggytrerfygtretygyuftrert
Добавлено через 51 минуту
feedback.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?
// определите переменные и задайте пустые значения
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $tem = "";
$err_m = 0;
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameErr = "Имя обязательно";
        $err_m++;
    } else {
        $name = test_input($_POST["name"]);
        if (!preg_match("/^[a-zА-ЯЁ][A-Zа-яё]+$/ui",$name)) {
            $nameErr = "Только буквы и пробелы";
            $err_m++;
        }
    }
    
    if (empty($_POST["email"])) {
        $emailErr = "Email обязательно";
        $err_m++;
    } else {
        $email = test_input($_POST["email"]);
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Некорректный формат Email";
            $err_m++;
        }
    }
        
    if (empty($_POST["tem"])) {
        $tem = "";
    } else {
        $tem = test_input($_POST["tem"]);
        if (!preg_match("/^[a-zА-ЯЁ][A-Zа-яё]+$/ui",$tem)) {
            $temErr = "Только буквы и пробелы";
            $err_m++;
        }
    }
 
    if (empty($_POST["comment"])) {
        $comment = "";
    } else {
        $comment = test_input($_POST["comment"]);
    }
    if ($err_m == 0){
        // выведем сообщение об успехе
        $msg_box = "<span id='msg' style='display:block; color: #4f8a10; background: #dff2bf; '>Сообщение отправлено!</span>";
    }
}
 
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
 
    // собираем данные из формы
    $message  = "Имя пользователя: ".$_POST['name']."\r\n";
    $message .= "E-mail пользователя: ".$_POST['email']."\r\n";
    $message .= "Тема сообщения: ".$_POST['tem']."\r\n";
    $message .= "Текст письма: ".$_POST['comment'];
    send_mail($message); // отправим письмо
    
 
    // функция отправки письма
    function send_mail($message){
        $mail_to  = "comp@comp.ru"; // кому
        $subject  = "Письмо с обратной связи"; // тема письма
        $headers .= "Content-type:text/html; charset=utf-8\r\n"; // кодировка письма
        $headers .= $_POST['name']; // от кого письмо
        // отправляем письмо 
        mail($mail_to, $subject, $message, $headers);
    }
?>
Добавлено через 21 минуту
Ну и ещё проблема в том, что письмо отправляется не 1 раз, причём отправляются пустые письма

мусор я удалил уже
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2020, 19:43
Ответы с готовыми решениями:

Отправка письма php. Письма со скрипта на локальном сервере (Denwer) не приходят на почту.
Доброго Времени Суток!!! Я запускаю Денвером php скрипт со следующим кодом &lt;?php $name=$_GET;...

отправка письма
Здравствуйте, при отправки письма с формы, столкнулся с такой ситуацией. Первая проблема в том...

Отправка письма
Скрипт должен брать текст из textarea вставлять в письмо и присылать на ящик, но приходит только...

Отправка письма
$from = 'admin@site.ru'; $subject = &quot;Регистрация на сайте site.ru&quot;; $message...

16
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
11.03.2020, 21:36 2
посмотрите лог файлы ошибок - там должно быть много информации.
1) в строке 70 feedback.php $headers не объявлена, а вы ее объединяете (точку надо убрать)
2) в заполнении данных email почему-то используются значения $_POST, а не результаты их обработки, то есть не $name, а $_POST['name'] и т.д.
3) if (!preg_match("/^[a-zА-ЯЁ][A-Zа-яё]+$/ui", ..)) это выражение составлено неправильно. сейчас некогда, увы проверять, но должно быть примерно так
PHP
1
if (!preg_match("/^[a-zA-Zа-яА-ЯёЁ\s]$/", ..))
4) если функцией send_mail вы больше нигде не пользуетесь, то она никчему
я прошу прощения, но некогда сейчас проверять - попробуйте сами этот скрипт, если что не так - завтра исправим
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
if (isset($_POST['email'])) {
    $fields = ['name' => true, 'email' => true, 'tem', 'comment'];
    $errors = [];
    foreach ($fields as $key => $required) {
        if ($key == 'email') {
            $$key = filter_input(INPUT_POST, $key, FILTER_VALIDATE_EMAIL);
            if (!$$key) {
                $errors[$key] = 'Неправильный email';
            }
        } else {
            $$key = htmlentities((INPUT_POST, $key), ENT_QUOTES, 'utf-8');
            if (!preg_match("/^[a-zA-Zа-яА-ЯёЁ\s]$/", $$key)) {
                $errors[$key] = 'Недопустимые символы, разрешены только буквы, цифры ипробелы';
            } elseif (trim($$key) == '' && $required) {
                $errors[$key] = 'Не заполнено поле ';
            } 
        }
    }
    if (!count($errors)) {
        $mail_to  = 'comp@comp.ru';
        $subject = 'Письмо с обратной связи';
        $subject = '=?utf-8?B?' . base64_encode($subject) . '?=';
        $message  = "Имя пользователя: ".$name."\r\n";
        $message .= "E-mail пользователя: ".$email."\r\n";
        $message .= "Тема сообщения: ".$tem."\r\n";
        $message .= "Текст письма: ".$comment;
        $headers  = 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= 'MIME-Version: 1.0'."\r\n"; 
        $headers .= 'From: <'.$email.'>'."\r\n"; 
        $headers .= 'Reply-To: <'.$email.'>'."\r\n";
        if (mail($mail_to, $subject, $message, $headers)) {
            ?><span id='msg' style='display:block; color: #4f8a10; background: #dff2bf; '>Сообщение отправлено!</span><?php
        } else {
            $errors['mail'] = 'сообщение отправить не удалось';
        }
    }
    if (count($errors)) {
        foreach ($errors as $sender => $error) {
            echo '<p><strong>'.$sender.'</strong>: '.$error.'</p>';
        }
    }
}
1
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
13.03.2020, 14:57  [ТС] 3
Вот это
Цитата Сообщение от vinikon Посмотреть сообщение
<span id='msg' style='display:block; color: #4f8a10; background: #dff2bf; '>Сообщение отправлено!</span>
висит в начале страницы при её открытии, если делать как у вас в коде, а если как у меня - всё форматирование отсутствует и надпись отображается очень мелко

Как в заголовок письма перенести почту отправителя и тему письма? Пытаюсь доделать и вообще всё сломал.
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
13.03.2020, 15:25 4
не переживайте, заработает. сейчас посмотрю

Добавлено через 24 минуты
посмотрите вот такой скрипт.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$errors = [];
$send = false;
if (isset($_POST['email'])) {
    $fields = ['name' => true, 'email' => true, 'tem' => false, 'comment' => false];
    foreach ($fields as $key => $required) {
        if ($key == 'email') {
            $$key = filter_input(INPUT_POST, $key, FILTER_VALIDATE_EMAIL);
            if (!$$key) {
                $errors[$key] = 'Неправильный email';
            }
        } else {
            $$key = htmlentities(
                filter_input(INPUT_POST, $key), ENT_QUOTES, 'utf-8');
            if (!preg_match("/[a-zA-Zа-яА-ЯёЁ\s]/", $$key)) {
                $errors[$key] = 'Недопустимые символы, разрешены только буквы, цифры и пробелы';
            } elseif (trim($$key) == '' && $required) {
                $errors[$key] = 'Не заполнено поле ';
            } 
        }
    }
    if (!count($errors)) {
        $mail_to  = 'comp@comp.ru';
        $subject = 'Письмо с обратной связи';
        $subject = '=?utf-8?B?' . base64_encode($subject) . '?=';
        $message  = "Имя пользователя: ".$name."<br/>";
        $message .= "E-mail пользователя: ".$email."<br/>";
        $message .= "<p>Тема сообщения: <strong>".$tem."</strong></p>";
        $message .= "<p>Текст письма: ".nl2br($comment)."</p>";
        $headers  = 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= 'MIME-Version: 1.0'."\r\n"; 
        $headers .= 'From: <'.$email.'>'."\r\n"; 
        $headers .= 'Reply-To: <'.$email.'>'."\r\n";
        if (!mail($mail_to, $subject, $message, $headers)) {
            $errors['mail'] = 'сообщение отправить не удалось';
        } else {
            $send = true;
        }
    }
}
?>
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="utf-8">
    <title>tester</title>
</head>
<body>
<?php
if (count($errors)) {
    foreach ($errors as $sender => $error) {
        echo '<p><strong>'.$sender.'</strong>: '.$error.'</p>';
    }
}
if ($send) {
    echo '<p>Сообщение отправлено успешно</p>';
}
 
?>
<form action="" method="POST">
<label for="name">Name</label>
<input type="text" name="name" id="name" value=""/><br/>
<label for="tem">Tem</label>
<input type="text" name="tem" id="tem" value=""/><br/>
<label for="email">Email</label>
<input type="text" name="email" id="email" value=""/><br/>
<label for="comment">Comment</label>
<textarea name="comment" id="comment" cols="50" rows="20"></textarea>
<p><input type="submit" value="Send"/></p>
</form>
</body>
</html>
1
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
13.03.2020, 15:46  [ТС] 5
Допустим я объявляю новые переменные и делаю так
PHP
1
2
3
4
5
6
7
8
9
$usereml  = $_POST['email'];
$temamsg  = $_POST['tem'];
...
    $subject  = 'Письмо с обратной связью: '.$temamsg."\r\n";
    //$subject  = '=?utf-8?B?'.base64_encode($subject).'?='."\r\n";
 
    $headers  = 'Content-type: text/html; charset=utf-8'."\r\n";
    $headers .= 'MIME-Version: 1.0'."\r\n";
    $headers .= 'From: <'.$usereml.'>'."\r\n";
Код
X-Sendmail-Cmdline: sendmail.pl -t -i
To: comp@comp.ru
Subject: Письмо с обратной связью: [B]пусто[/B]
X-PHP-Originating-Script: 0:feedback.php
Content-type: text/html; charset=utf-8
MIME-Version: 1.0
From: <Имя пользователя: tgb
Текст письма: sdfghjkhgf> [B]не туда[/B]
Добавлено через 6 минут
Какую часть моего файла нужно заменить вашим скриптом? Просто у нас никто ничё не объясняет, вся программа выглядит как "Оказывается есть интернет. Слышали? Там есть сайты. А заданием на сдачу будет: <<Написать сайт на php чтоб был одинаковым во всех браузерах и естественно выглядил современно, а ещё чтоб в нём были JS, Java апплеты и БД для регистрации пользователей.>>"
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
13.03.2020, 16:21 6
1. не знаю, почему
Цитата Сообщение от Ваю Посмотреть сообщение
пусто
. может тему забыли указать - $_POST['tem'] не заполнено. если надо добавить в тему письма содержимое $_POST['tem'], то в моем скрипте строку 28 перепишите так:
PHP
1
$subject = 'Письмо с обратной связи: '.$tem;
2. $subject = '=?utf-8?B?'.base64_encode($subject).'?='."\r\n"; - эта строчка нужна, чтобы кириллический шрифт нормально читался в заголовке браузера
3.
Цитата Сообщение от Ваю Посмотреть сообщение
Какую часть моего файла нужно заменить вашим скриптом
покажите свой скрипт - тогда отвечу
4. а сами письма отправляются нормально - пробовали?

Добавлено через 1 минуту
а третий вопрос отпадает - сейчас отвечу

Добавлено через 22 минуты
1) в своем скрипте строки 12-40 меняете моими 54-61 (здесь будет вывод ошибок)
2) feedback.php сейчас заменяется моим скриптом. только в моем скрипте надо добавить скрипт записи в базу данных. для этого строчку 41 меняем этими двумя
PHP
1
2
$qs = mysql_query("INSERT `sms`(`sms_na`, `sms_email`, `sms_tem`, `sms_comment`) VALUES ('$name','$email','$tem', '$comment')");
$send = true;
и удаляем html код из моего скрипта - все, начиная с
Цитата Сообщение от vinikon Посмотреть сообщение
<!DOCTYPE html>
0
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
13.03.2020, 17:06  [ТС] 7
Заменил, страница совсем не грузится, не знаю что не так

contactsOn.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<? session_start(); error_reporting(0); ?><!DOCTYPE html>
<html><head>
    <?php $title = 'Отправить на email';
    include ("head.php"); 
    include ("feedback.php"); ?>
</head><body>
    <div class="one">
        <?php include ("header.php"); ?>
        <div class="content">
            <?php include ("nav.php"); ?>
            <section>
<?php
    if (count($errors)) {
        foreach ($errors as $sender => $error) {
            echo '<p><strong>'.$sender.'</strong>: '.$error.'</p>';
        }
    }
    if ($send) {
        echo '<p>Сообщение отправлено успешно</p>';
    }
?>
<? if ($_SESSION['na']) { ?>
    <div>
        <table class="hh2">
            <tr>
                <td><h2>Отправить на email</h2></td>
                <td><div id="msgbox"><span id="msg"><?php echo $msg_box;?></span></div></td>
            </tr>
        </table>
        <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
            <table class="frm">
                <tbody>
                    <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" >
                        <tr>
                            <td><label>Представьтесь: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="name" value="<?php echo $name;?>"></td>
                            <td><span class="error2"> <?php echo $nameErr;?></span></td>
                        </tr><tr>
                            <td><label>Ваш E-mail: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="email" value="<?php echo $email;?>"></td>
                            <td> <span class="error2"> <?php echo $emailErr;?></span></td>
                        </tr><tr>
                            <td><label>Тема сообщения: </label></td>
                            <td><input class="input_group" type="text" name="tem" value="<?php echo $tem;?>"></td>
                        </tr><tr>
                            <td><label>Текст сообщения: </label></td>
                            <td><textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea></td>
                        </tr><tr>
                            <td><p><span class="error2"><span>*</span> обязательные поля</span></p></td>
                        </tr><tr>
                            <td align="right" colspan="3"><input id="btn" type="submit" name="submit" value="Отправить"></td>
                        </tr>
                    </form>
                </tbody>
            </table>
        </form>
    </div>
    <div><p><br><br></div>
<? } else { ?>
    <p><br><a id="a_a" href="log.php">Авторизуйтесь</a>, чтобы связаться с нами
<?}?>
 
            </section>
        </div>
    </div>
    <?php include ("footer.php"); ?>
</body></html>
Тут переводы строк я заменил с хтмл на виндовые, иначе в письме каша из форматов линукса и винды получается
feedback.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
header("Content-Type: text/html; charset=utf-8");
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
$errors = [];
$send = false;
if (isset($_POST['email'])) {
    $fields = ['name' => true, 'email' => true, 'tem' => false, 'comment' => false];
    foreach ($fields as $key => $required) {
        if ($key == 'email') {
            $$key = filter_input(INPUT_POST, $key, FILTER_VALIDATE_EMAIL);
            if (!$$key) {
                $errors[$key] = 'Неправильный email';
            }
        } else {
            $$key = htmlentities(
                filter_input(INPUT_POST, $key), ENT_QUOTES, 'utf-8');
            if (!preg_match("/[a-zA-Zа-яА-ЯёЁ\s]/", $$key)) {
                $errors[$key] = 'Недопустимые символы, разрешены только буквы, цифры и пробелы';
            } elseif (trim($$key) == '' && $required) {
                $errors[$key] = 'Не заполнено поле ';
            } 
        }
    }
    if (!count($errors)) {
        $mail_to  = 'comp@comp.ru';
        $subject = 'Письмо с обратной связью: '.$tem."\r\n";
        //$subject = '=?utf-8?B?' . base64_encode($subject) . '?='."\r\n";
        $message  = "Имя пользователя: ".$name."\r\n";
        $message .= "E-mail пользователя: ".$email."\r\n";
        $message .= "<p>Текст письма: ".nl2br($comment)."</p>";
        $headers  = 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= 'MIME-Version: 1.0'."\r\n";
        $headers .= 'From: <'.$email.'>'."\r\n";
                if (!mail($mail_to, $subject, $message, $headers)) {
            $errors['mail'] = 'сообщение отправить не удалось';
        } else {
            $qs = mysql_query("INSERT `sms`(`sms_na`, `sms_email`, `sms_tem`, `sms_comment`) VALUES ('$name','$email','$tem', '$comment')");
            $send = true;
        }
    }
}
?>
Перекодировку я закоментил чтоб можно было самому прочесть письмо в сыром виде
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
13.03.2020, 18:11 8
страница не грузится, потому что там $_SESSION['na'] непонятное. уберите его или как-то задайте ему значение - тогда будет грузиться. там еще надо в форме убрать сообщения об ошибках под полями, потому что они выводятся над формой. неизвестная переменная $msg_box тоже что-то с ней надо делать (лучше убрать)
0
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
13.03.2020, 19:34  [ТС] 9
Едва ли дело в них, до замены же всё было нормально, сессия у меня на каждой странице и всё открывается, короче верну всё как было
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
13.03.2020, 19:47 10
дело ваше. у меня нормально открывается и работает (когда присвою $_SESSION['na'] = true).
0
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
13.03.2020, 20:03  [ТС] 11
Сейчас у меня имеется вот что, работает хоть как-то
contactsOn.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<? session_start(); error_reporting(0); ?><!DOCTYPE html>
<html><head>
    <?php $title = 'Отправить на email';
    include ("head.php"); 
    include ("feedback.php"); ?>
</head><body>
    <div class="one">
        <?php include ("header.php"); ?>
        <div class="content">
            <?php include ("nav.php"); ?>
            <section>
<? if ($_POST) {
        $name = trim($_POST['name']);
        $email = trim($_POST['email']);
        $tem = trim($_POST['tem']);
        $comment = trim($_POST['comment']);
        $error = false;
 
        if (empty($email)) {
            $error = true;
            $errortext_pas = "<font color='red'>Обязательное поле</font>";
        } else {
            if (!preg_match("/^[-0-9a-z_\.]+@[-0-9a-z^\.]+\.[a-z]{2,4}$/i",$email)) {
                $error = true;
                $emailErr = "<font color='red'>Неправильно заполнено поле e-mail </font>";
            }
        }
 
        if (empty($name)) {
            $error = true;
            $nameErr = "<font color='red'>Имя обязательно</font>";
        } 
 
        if ($error == false) {
            $qs = mysql_query("INSERT `sms`(`sms_na`, `sms_email`, `sms_tem`, `sms_comment`) VALUES ('$name','$email','$tem', '$comment')");
            echo 'Отправлено сообщение';
            exit("<meta http-equiv='Refresh' content='0; URL=index.php'>");
        }
    }
?>
<? if ($_SESSION['na']) { ?>
    <div>
        <table class="hh2">
            <tr>
                <td><h2>Отправить на email</h2></td>
                <td><div id="msgbox"><span id="msg"><?php echo $msg_box;?></span></div></td>
            </tr>
        </table>
        <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
            <table class="frm">
                <tbody>
                    <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" >
                        <tr>
                            <td><label>Представьтесь: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="name" value="<?php echo $name;?>"></td>
                            <td><span class="error2"> <?php echo $nameErr;?></span></td>
                        </tr><tr>
                            <td><label>Ваш E-mail: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="email" value="<?php echo $email;?>"></td>
                            <td> <span class="error2"> <?php echo $emailErr;?></span></td>
                        </tr><tr>
                            <td><label>Тема сообщения: </label></td>
                            <td><input class="input_group" type="text" name="tem" value="<?php echo $tem;?>"></td>
                        </tr><tr>
                            <td><label>Текст сообщения: </label></td>
                            <td><textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea></td>
                        </tr><tr>
                            <td><p><span class="error2"><span>*</span> обязательные поля</span></p></td>
                        </tr><tr>
                            <td align="right" colspan="3"><input id="btn" type="submit" name="submit" value="Отправить"></td>
                        </tr>
                    </form>
                </tbody>
            </table>
        </form>
    </div>
    <div><p><br><br></div>
<? } else { ?>
    <p><br><a id="a_a" href="log.php">Авторизуйтесь</a>, чтобы связаться с нами
<?}?>
 
            </section>
        </div>
    </div>
    <?php include ("footer.php"); ?>
</body></html>
feedback.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?
// определите переменные и задайте пустые значения
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $tem = "";
$err_m = 0;
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameErr = "Имя обязательно";
        $err_m++;
    } else {
        $name = test_input($_POST["name"]);
        if (!preg_match("/^[a-zА-ЯЁ][A-Zа-яё]+$/ui",$name)) {
            $nameErr = "Только буквы и пробелы";
            $err_m++;
        }
    }
 
    if (empty($_POST["email"])) {
        $emailErr = "Email обязательно";
        $err_m++;
    } else {
        $email = test_input($_POST["email"]);
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Некорректный формат Email";
            $err_m++;
        }
    }
 
    if (empty($_POST["tem"])) {
        $tem = "";
    } else {
        $tem = test_input($_POST["tem"]);
        if (!preg_match("/^[0-9a-zA-Zа-яА-ЯёЁ\s]+$/ui",$tem)) {
            $temErr = "Только буквы и пробелы";
            $err_m++;
        }
    }
 
    if (empty($_POST["comment"])) {
        $comment = "";
    } else {
        $comment = test_input($_POST["comment"]);
    }
    if ($err_m == 0){
        // выведем сообщение об успехе
        $msg_box = "<span id='msg' style='display:block; color: #4f8a10; background: #dff2bf; '>Сообщение отправлено!</span>";
    }
}
 
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
 
// собираем данные из формы
$message  = "Имя пользователя: ".$_POST['name']."\r\n";
$message .= "E-mail пользователя: ".$_POST['email']."\r\n";
$message .= "Тема сообщения: ".$_POST['tem']."\r\n";
$message .= "Текст письма: ".$_POST['comment'];
send_mail($message); // отправим письмо
 
// функция отправки письма
function send_mail($message){
    $mail_to  = "comp@comp.ru"; // кому
    $subject  = "Письмо с обратной связью: ".$tem; // тема письма // не работает
    $subject  = '=?utf-8?B?'.base64_encode($subject).'?='."\r\n";
    $headers  = "Content-type:text/html; charset=utf-8\r\n"; // кодировка письма
    $headers .= 'MIME-Version: 1.0'."\r\n"; 
    $headers .= 'From: <'.$email.'>'."\r\n"; // не работает
 
    mail($mail_to, $subject, $message, $headers);
}
?>
Код
X-Sendmail-Cmdline: sendmail.pl -t -i
To: comp@comp.ru
Subject: =?utf-8?B?0J/QuNGB0YzQvNC+INGBINC+0LHRgNCw0YLQvdC+0Lkg0YHQstGP0LfRjNGO?= //[B]пусто[/B]
X-PHP-Originating-Script: 0:feedback.php
Content-type:text/html; charset=utf-8
MIME-Version: 1.0
From: <> //[B]пусто[/B]

Имя пользователя: ропоарва
E-mail пользователя: 12@34.sdfg
Тема сообщения: олрнеку
Текст письма: укернгншнегкн5у
Добавлено через 3 минуты
как я выше сказал - я в этом ничего не понимаю, даже "присвойте значение" я не могу сделать поскольку не знаю чем можно инициализировать, если бы это было си/си++ или даже винапи, то мне было бы всё понятно, а это я ни в зуб ногой
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
13.03.2020, 20:13 12
вот ваш первый файл у меня
(index.php)
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<? session_start(); error_reporting(1); 
$_SESSION['na'] = true;
if (!isset($_SESSION['send'])) {
    $_SESSION['send'] = false;
}
$msg_box = '';
$name = '';
$tem = '';
$email = '';
$comment = '';
?><!DOCTYPE html>
<html><head>
    <?php $title = 'Отправить на email';
    //include ("head.php"); 
    include ("tester.php"); ?>
</head><body>
    <div class="one">
        <?php //include ("header.php"); ?>
        <div class="content">
            <?php //include ("nav.php"); ?>
            <section>
<?php
    if (count($errors)) {
        foreach ($errors as $sender => $error) {
            echo '<p><strong>'.$sender.'</strong>: '.$error.'</p>';
        }
    }
    if ($_SESSION['send']) {
        $msg_box = 'Сообщение успешно отправлено';
        $_SESSION['send'] = false;
    }
?>
<? if (isset($_SESSION['na'])) { ?>
    <div>
        <table class="hh2">
            <tr>
                <td><h2>Отправить на email</h2></td>
                <td><div id="msgbox"><span id="msg"><?php echo $msg_box;?></span></div></td>
            </tr>
        </table>
        <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
            <table class="frm">
                <tbody>
                    <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" >
                        <tr>
                            <td><label>Представьтесь: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="name" value="<?php echo $name;?>"></td>
                        </tr><tr>
                            <td><label>Ваш E-mail: <span>*</span> </label></td>
                            <td><input class="input_group" type="text" name="email" value="<?php echo $email;?>"></td>
                        </tr><tr>
                            <td><label>Тема сообщения: </label></td>
                            <td><input class="input_group" type="text" name="tem" value="<?php echo $tem;?>"></td>
                        </tr><tr>
                            <td><label>Текст сообщения: </label></td>
                            <td><textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea></td>
                        </tr><tr>
                            <td align="right" colspan="3"><input id="btn" type="submit" name="submit" value="Отправить"></td>
                        </tr>
                    </form>
                </tbody>
            </table>
        </form>
    </div>
    <div><p><br><br></div>
<? } else { ?>
    <p><br><a id="a_a" href="log.php">Авторизуйтесь</a>, чтобы связаться с нами
<?}?>
 
            </section>
        </div>
    </div>
    <?php //include ("footer.php"); ?>
</body></html>
вот feedback.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
header("Content-Type: text/html; charset=utf-8");
$errors = [];
if (isset($_POST['email'])) {
    $fields = ['name' => true, 'email' => true, 'tem' => false, 'comment' => false];
    foreach ($fields as $key => $required) {
        if ($key == 'email') {
            $$key = filter_input(INPUT_POST, $key, FILTER_VALIDATE_EMAIL);
            if (!$$key) {
                $errors[$key] = 'Неправильный email';
            }
        } else {
            $$key = htmlentities(
                filter_input(INPUT_POST, $key), ENT_QUOTES, 'utf-8');
            if (!preg_match("/[a-zA-Zа-яА-ЯёЁ\s]/", $$key)) {
                $errors[$key] = 'Недопустимые символы, разрешены только буквы, цифры и пробелы';
            } elseif (trim($$key) == '' && $required) {
                $errors[$key] = 'Не заполнено поле ';
            } 
        }
    }
    if (!count($errors)) {
        $mail_to  = 'comp@comp.ru';
        $subject = 'Письмо с обратной связи: '.$tem;
        $subject = '=?utf-8?B?' . base64_encode($subject) . '?=';
        $message  = "Имя пользователя: ".$name."<br/>";
        $message .= "E-mail пользователя: ".$email."<br/>";
        $message .= "<p>Тема сообщения: <strong>".$tem."</strong></p>";
        $message .= "<p>Текст письма: ".nl2br($comment)."</p>";
        $headers  = 'Content-type: text/html; charset=utf-8'."\r\n";
        $headers .= 'MIME-Version: 1.0'."\r\n"; 
        $headers .= 'From: <'.$email.'>'."\r\n"; 
        $headers .= 'Reply-To: <'.$email.'>'."\r\n";
        if (!mail($mail_to, $subject, $message, $headers)) {
            $errors['mail'] = 'сообщение отправить не удалось';
        } else {
            $_SESSION['send'] = true;
            $qs = mysql_query("INSERT `sms`(`sms_na`, `sms_email`, `sms_tem`, `sms_comment`) VALUES ('$name','$email','$tem', '$comment')");
            header('location: index.php');
            exit;
        }
    }
}
1
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
14.03.2020, 17:29 13
просмотрел - там форма в форме. надо одну эту строчку удалить <form id="new_form" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> и соответствующий закрывающий тег </form>
0
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
14.03.2020, 19:44  [ТС] 14
Форма в форме там не просто так, оно конфликтует с подвалом и из-за этого пришлось сделать так, если сделать без костылей - на странице получается пушной северный зверёк. Наверно не тратьте больше на это своё время поскольку я в этом ничерта не понимаю и только напрягаю вас.
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
16.03.2020, 10:12 15
особо вы меня не напрягаете. мне нужна практика - поэтому я и здесь. простые (для меня) вопросы пытаюсь сразу на форуме выложить. со сложными ковыряюсь у себя на локалке. проблема у вас не в том, что ничего не понимаете (я тоже еще много чего не понимаю), а в том, что не хотите разобраться. впрочем это ваше дело. если что, пишите.
0
25 / 25 / 9
Регистрация: 21.04.2015
Сообщений: 679
17.03.2020, 11:42  [ТС] 16
Ага. Как вообще можно разбираться в этом, если видешь эту ересь первый раз, где начало тега в одном файле, файле, Карл, а конец этого же тега в другом и тебе втирают, что так НАДО делать. В си за выделение и освобождение памяти в разных функциях принято больно убивать, а тут такое, типов данных и то нет. Создаёшь переменную, присваиваешь значение, передаёшь в функцию, а там вообще не то и как так непонятно, вон мой пост 5.
0
337 / 162 / 87
Регистрация: 16.01.2020
Сообщений: 771
17.03.2020, 12:06 17
никто вам ничего не втирает. я пытался отладить ваши же скрипты, чтобы они работали. по большому счету ваши скрипты ересью и являются (как может быть форма в форме и прочее). я без обид это - просто мне интересно разобраться - что у вас там не работает. а сравнивать php и c - это все равно, что сравнивать теплое с мягким. с существует с 70-х годов и предназначен для десктопных программ - которые в реальном времени у вас на компе. php - скрипта нет у вас - этот скрипт отработал на сервере и выдал эту страницу. разные задачи, разная реализация. кроме того, в 7 появилась типизация - хотите используйте типы -хотите нет.
Цитата Сообщение от Ваю Посмотреть сообщение
Создаёшь переменную, присваиваешь значение, передаёшь в функцию, а там вообще не то и как так непонятно
в начале и мне было непонятно, если разобраться, то все логично и все работает. тут вся проблема наверное в том, что как вы сами написали
Цитата Сообщение от Ваю Посмотреть сообщение
у нас никто ничё не объясняет, вся программа выглядит как "Оказывается есть интернет. Слышали? Там есть сайты. А заданием на сдачу будет: <<Написать сайт на php
тут уж претензии к преподам.
я помогу вам настроить скрипты, чтобы нормально email отправлялся и форма выводилась, ну и сообщения там как надо отображались. для этого надо немного исправить ваши файлы. только и всего. а нужно вам это или нет - вам решать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2020, 12:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

Отправка письма
Всем привет! есть файл с кодом: &lt;?php function selfurl() { $s =...

отправка письма
создал на сайте форму для отправки почты на мыло...письмо приходит, но вот не корректные данные :...

Отправка письма с сайта
Всем здравствуйте. Пока только изучаю PHP (по урокам всеми нелюбимого Евгения Попова), и мой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.