@13chel

Форма обратной связи на php работает не корректно. В чем может быть проблема?

Приходит все кроме номера телефона. Знающие люди, подскажите в чем дело.
<form action="send1.php" method="post" name="form1" enctype="multipart/form-data">
    <div class="form-group">
        <label for="txtFormName">Введите ваше имя </label><br />
        <input name="txtFormName" type="text" class="form-control" required placeholder="Петр Иванов" title='Петр Иванов'> </div><br />
    <div class="form-group">
        <label for="txtDescription">Введите Ваш номер телефона</label><br />
        <input name="txtDescription" id="txtDescription" class="form-control" placeholder="89651572788" required  title="89651572788" /> </div><br />
    <div class="form-group">
        <label for="txtFormEmail">Введите ваш e-mail</label><br />
        <input name="txtFormEmail" type="email" class="form-control" title="primer@gmail.com" placeholder="primer@gmail.com" required> </div><br />
    <div class="form-group-mail">
        <textarea name="txtDescription" id="txtDescription"  placeholder="Ваше сообщение"  maxlength="500"></textarea>
                                     </div><br />

<label for="fileAttach">Прикрепите файл </label><br />
    <input name="fileAttach" type="file" required>
    <br>
    <br>
    <input type="submit" name="Submit" value="ОТПРАВИТЬ " class="btn btn-danger btn-block">
</form>


<?  
$strTo = "nash@mail.ru";
$strSubject = "Загружен новый проект!";
$strMessage = nl2br($_POST["txtDescription"]);  
  
//*** Uniqid Session ***//  
$strSid = md5(uniqid(time()));  
  
$strHeader = "";  
$strHeader .= "From: ".$_POST["txtFormName"]."<".$_POST["txtFormEmail"].">\nReply-To: ".$_POST["txtFormEmail"]."";  
  
$strHeader .= "MIME-Version: 1.0\n";  
$strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"\n\n";  
$strHeader .= "This is a multi-part message in MIME format.\n";  
  
$strHeader .= "--".$strSid."\n";  
$strHeader .= "Content-type: text/html; charset=utf-8\n";  
$strHeader .= "Content-Transfer-Encoding: 7bit\n\n";  
$strHeader .= $strMessage."\n\n";  
  
//*** Attachment ***//  
if($_FILES["fileAttach"]["name"] != "")  
{  
$strFilesName = $_FILES["fileAttach"]["name"];
$strContent = chunk_split(base64_encode(file_get_contents($_FILES["fileAttach"]["tmp_name"])));  
$strHeader .= "--".$strSid."\n";  
$strHeader .= "Content-Type: application/octet-stream; name=\"".$strFilesName."\"\n";  
$strHeader .= "Content-Transfer-Encoding: base64\n";  
$strHeader .= "Content-Disposition: attachment; filename=\"".$strFilesName."\"\n\n";  
$strHeader .= $strContent."\n\n";  
}
  
$flgSend = @mail($strTo,$strSubject,null,$strHeader);  // @ = No Show Error //  
  
if($flgSend)  
{  
echo "";  
}  
else  
{  
echo "Возникла ошибка! Файл не загружен";  
}  
ini_set('short_open_tag', 'On');
header('Refresh: 3; URL=index.php');
?>
    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <title>Файл загружен</title>
        <link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
        <link rel="stylesheet" href="css/style.less" type="text/less">

    </head>

    <body>
        <div class="container">
            <div class="row">
                <div class="col-sm-12">
                    <h1>Ваш файл загружен</h1>
                    <h2 class="text-center">В ближайшее время с Вами свяжется инженер</h2>
                </div>
            </div>
        </div>
        <script src="assets/less/less.min.js"></script>
        <script type="text/javascript">
            setTimeout('location.replace("/index.php")', 3000);
            миллисекунд)
        </script>

    </body>

    </html>
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
Decadal
@Decadal
собственно, я не нашел даже где используется номер телефона при обработке запроса. Как будто он там никогда не был нужен, но вот понадобился, и его добавили на клиент-сайд, а про сервер забыли.
Либо вы пытались передать телефон слитно с сообщением? для этого стоит писать разные имена для элементов форм, иначе $_POST["txtDescription"] будет содержать значение только того элемента с именем "txtDescription", который встретился самый крайний раз.

upd:
собственно, что делать:
в первую очередь, исправляем
<input name="txtDescription" id="txtDescription" class="form-control" placeholder="89651572788" required  title="89651572788" />

вот эту штуку, а конкретнее: name="txtDescription"
мы заменяем на name="phone"
все, теперь клиент будет кидать на сервер данные с телефоном.
В серверной части:

$strMessage = nl2br($_POST["txtDescription"]);  
//после этой строки добавляем следующее:
$phone = $_POST["phone"]; 
// тут желательно пихнуть регулярку для проверки телефона, но если вы не поняли, что это значит, не обращайте внимания.


Все, на сервере теперь есть информация о телефоне. Главный вопрос: что с ней делать?

можно прикрепить к письму, после текста:
$strMessage.= "<br /> Обращаться по телефону: ". $phone; 
//это добавлять сразу после $phone = $_POST["phone"];


можно прикрепить к теме:

$strSubject.= " связь: ".$phone;
и тому подобные действия, смотря что вам нужно
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
hedint
@hedint
Senior front-end developer
У вас два раза используется name и id txtDescription - у телефона и у сообщения.
Уверен, так не должно быть
Ответ написан
Комментировать
@13chel Автор вопроса
<div class="form-group-mail">
        <textarea name="txtDescription" id="txtDescription"  placeholder="Ваше сообщение"  maxlength="500"></textarea>
                                     </div>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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