Как отправить форму отзывов на почту?

187
12 ноября 2021, 08:10

Как отправить форму отзывов на почту + ошибку "Неверно введен e-mail!"?

<?php
            require "db.php";
            if(isset($_POST['submit'])){ 
            if(trim($_POST['name']) == "" || trim($_POST['email']) == "" || trim($_POST['otziv']) == "")
            {   
                $err = "Заполните все поля!";
            }else{
            $comments = R::dispense('comments');
            $comments->name = $_POST['name'];
            $comments->otziv = $_POST['otziv'];
            $comments->email = $_POST['email']; 
            $comments->date = date("d M Y");
            $comments->time = date("d.m.Y - H:i");
            R::store($comments);
            header('location: forma.php');
            }
            }
        ?>

Почему не работает?

<?php
    require "db.php";
    if(isset($_POST['submit'])){
    $to = '*******@gmail.com';
    $subject = 'Форма с сайта';
    $message = "Текст отзыва: " . $_POST['otziv'] . "\nОт: " . $_POST['email'] . " " . $_POST['email'] . "\nВремя: " . date("d.m.Y - H:i");
    $headers = array(
    'From' => '*******@gmail.com',
    'Reply-To' => '*********@gmail.com',
    'X-Mailer' => 'PHP/' . phpversion()
    );
    mail($to, $subject, $message, $headers);
    if(trim($_POST['name']) == "" || trim($_POST['email']) == "" || trim($_POST['otziv']) == "")
    {
        $err = "Заполните все поля!";
    }else{
    $comments = R::dispense('comments');
    $comments->name = $_POST['name'];
    $comments->otziv = $_POST['otziv'];
    $comments->email = $_POST['email']; 
    $comments->date = date("d M Y");
    $comments->time = date("d.m.Y - H:i");
    R::store($comments);
    header('location: forma.php');          
    }
    }
?>

Вот форма:

    <div class=tab>
    <table width=2500px>
    <form name="f_add_otziv" action="" method="post">
            <tr><td><font face=Helvetica><font size=4px>Ваше ім'я:</font><br></td>
            <td><input name="name" type="text" value="" size="60" id="name"></td></tr>
            <tr><td height=20px><font size=4px>Ваш e-mail:</font></td>
            <td><input name="email" type="text" value="" size="60"></td></tr>
            <tr><td height=20px><font size=4px>Повідомлення:</font></td>
            <td>
            <textarea name="otziv" cols="55" rows="3" wrap="off"></textarea>
            </td></tr>
            <tr><td height=15px></td></tr>
            <tr><td><input type="submit" name="submit" value="Відправити"></td></tr>        
            <tr><td height=15px><?= '<div style="color:red">'.$err.'</div>' ?></td></tr>        
            <tr><td height=2px></td></tr>           
       </form>
        </table>
    </div>
<?php $commen = mysqli_query($con, "SELECT * FROM `comments` ORDER BY `id` DESC") ?>
<?php while ($com = mysqli_fetch_assoc($commen)){   
?>
<hr>
    <div class="comment">
        <div class="date" title="Опубліковано: <?= $com['time'] ?>"><?= $com['date']?></div>        
        <br>
        <div class="name"><b><?= $com['name'] ?>:</b></div>
        Комментарий:<br>
        <div class="otziv"><p class="m_bot2"><?= $com['otziv'] ?></p></div>
        </div>
    <hr>
<?php } ?>
Answer 1

Нужно выяснить какая настройка sendmail на вашем хостинге. Если работаете из локальной среды разработки - отправить не получится.

Для хостинга отправить можно так:


<?php
$to      = 'АДРЕС_КУДА_ОТПРАВЛЯТЬ';
$subject = 'Форма с сайта';
$message = "Текст отзыва: " . $_POST['otziv'] . "\nОт: " . $_POST['email'] . " " . $_POST['email'] . "\nВремя: " . date("d.m.Y - H:i");
$headers = array(
    'From' => 'ЯЩИК НА СЕРВЕРЕ',
    'Reply-To' => 'ЯЩИК НА СЕРВЕРЕ',
    'X-Mailer' => 'PHP/' . phpversion()
);
mail($to, $subject, $message, $headers);
?>

Основано на документации к php

Ошибка по поводу почты - вопрос отдельный. Нужно продумать как осуществить возврат проверки email по регулярному выражению. Я бы сделал на основе ajax, но чтобы ответить точно - нужен остальной код и front-части.

Код и регулярное выражение для проверки email:

if (preg_match('/[a-zA-z0-9]+\@[a-zA-z0-9]+\.[a-zA-z0-9]+/is', $_POST['email'])) {
// Почта верна
} else {
// Почта с ошибкой
}
READ ALSO
Ошибка с mysqli_query()

Ошибка с mysqli_query()

Цель выслать данные в БД Код :

264
Заменить буквы слова на зеркальные

Заменить буквы слова на зеркальные

Например дано слово appleНужно заменить буквы данного слова на зеркальные:

162
Как узнать имя вызывающего метода через рефлексию в Java

Как узнать имя вызывающего метода через рефлексию в Java

Нужно написать функцию, которая бы вернула полное имя класса и имя вызывающей функции в процессе выполненияПолное имя класса я получаю, а как...

206
Не делается дамп памяти Java, хотя все указано правильно

Не делается дамп памяти Java, хотя все указано правильно

У меня случается утечка памяти и сервер падает с Out of Memory Error

117