Необходимо сделать один php-документ для четырех форм. Подобных примеров не нашел, а поэтому, обладая минимальными знаниями PHP, создал нижеуказанный код. При нажатии кнопки submit (каждой из которых дан уникальный name) должно срабатывать одно из выражений. К сожалению, обрабатывает только первое if-выражение. В остальных случаях поля приходят на почту незаполненными. Помогите! PHP: <?php header('Refresh: 5; URL=http://localhost/index.html'); $name = htmlspecialchars($_POST["name"]); $email = htmlspecialchars($_POST["email"]); $tel = htmlspecialchars($_POST["tel"]); $message = htmlspecialchars($_POST["message"]); $date = htmlspecialchars($_POST["date"]); $time = htmlspecialchars($_POST["time"]); $services = htmlspecialchars($_POST["services"]); $better = htmlspecialchars($_POST["better"]); $bs = htmlspecialchars($_POST["bs"]); $submitfeedback = htmlspecialchars($_POST["submitfeedback"]); $submitcallback = htmlspecialchars($_POST["submitcallback"]); $submitquestion = htmlspecialchars($_POST["submitquestion"]); $submitqueue = htmlspecialchars($_POST["submitqueue"]); $address = "1@gmail.com"; $subfeedback = "обратная связь"; $subcallback = "заказать звонок"; $subquestion = "задать вопрос"; $subqueue = "запись на прием"; $mesfeedback = "ФИО: $name Email: $email Телефон: $tel Сообщение: $message"; $mescallback = "ФИО: $name Телефон: $tel Удобное время звонка: $better Комментарий: $message"; $mesquestion = "ФИО: $name Email: $email Телефон: $tel Сообщение: $message"; $mesqueue = "ФИО: $name Email: $email Телефон: $tel Дата: $date Время: $time Услуга: $services Комментарий: $message"; if (isset($submitqueue)) { if (mail($address, $subqueue, $mesqueue)) { echo 'Заявка отправлена';} else { echo 'Заявка не отправлена';} } else if (isset($submitfeedback)) { if (mail($address, $subfeedback, $mesfeedback)) { echo 'Сообщение отправлено';} else { echo 'Сообщение не отправлено';} } else if (isset($submitcallback)) { if (mail($address, $subcallback, $mescallback)) { echo 'Заявка отправлена';} else { echo 'Заявка не отправлена';} } else if (isset($submitquestion)) { if (mail($address, $subquestion, $mesquestion)) { echo 'Сообщение отправлено';} else { echo 'Сообщение не отправлено';} } ?>
эм... ты объявляешь переменные а потом проверяешь объявлены ли они у тебя. ну как бы да, объявлены. вместо этой гармошки элс-ифов можно использовать свич. и вообще сделать в каждой форме по скрытому полю, по значению которого выбирать рутину отправки.
жесть наверно потому что у тебя синтаксическая ошибка! PHP: else if // ??????????????????????? elseif // Правильное использование А вообще в чём ты пишешь, хрен даже с ним с дебагером, любой нормальный IDE должен подсвечивать, если ты вдруг допускаешь синтаксическую ошибку... Во первых саму строку в которой ошибка, а во вторых сам документ и над ним воскл значёчек красненький. скачай phpstorm, очень удобно для разработки. А вообще конечно как и написал выше @Ganzal, слишком много условий.
Надо не isset($submitfeedback) делать, а isset($_POST["submitfeedback"]). Потому что $submitfeedback ты 100% объявляешь присвоением, а $_POST["submitfeedback"] объявляться только если на ту кнопку нажмут, на 4 сразу не могут же нажать, а ты 4 присвоения делаешь. Хотя, лучше бы их проверить, и если в $_POST есть нужный ключ, то только тогда объявлять.
м? https://php.ru/manual/control-structures.elseif.html И раз уж тут все ворчат, то тоже добавлю: закрывающий тег ?> в конце файла не нужен и даже вреден.
Спасибо за советы! Применил switch - все работает. А можно как-то еще сократить (например, 'Заявка отправлена')? PHP: <?php header('Refresh: 5; URL=http://localhost/index.html'); if(isset($_POST['token']) && $_POST['token']==='1') $name = htmlspecialchars($_POST["name"]); $email = htmlspecialchars($_POST["email"]); $tel = htmlspecialchars($_POST["tel"]); $message = htmlspecialchars($_POST["message"]); $date = (int)$_POST["date"]; $time = (int)$_POST["time"]; $services = htmlspecialchars($_POST["services"]); $better = (int)$_POST["better"]; $submitfeedback = htmlspecialchars($_POST["submitfeedback"]); $submitcallback = htmlspecialchars($_POST["submitcallback"]); $submitquestion = htmlspecialchars($_POST["submitquestion"]); $submitqueue = htmlspecialchars($_POST["submitqueue"]); $address = ""; $subfeedback = "Обратная связь"; $subcallback = "Заказать звонок"; $subquestion = "Задать вопрос"; $subqueue = "Запись на прием"; $mesfeedback = "ФИО: $name Email: $email Телефон: $tel Сообщение: $message"; $mescallback = "ФИО: $name Телефон: $tel Удобное время звонка: $better Комментарий: $message"; $mesquestion = "ФИО: $name Email: $email Телефон: $tel Сообщение: $message"; $mesqueue = "ФИО: $name Email: $email Телефон: $tel Дата: $date Время: $time Услуга: $services Комментарий: $message"; $action = htmlentities($_POST['action'], ENT_QUOTES); switch( $action ) { case 'queue': mail($address, $subqueue, $mesqueue); echo 'Заявка отправлена'; break; case 'feedback': mail($address, $subfeedback, $mesfeedback); echo 'Заявка отправлена'; break; case 'callback': mail($address, $subcallback, $mescallback); echo 'Заявка отправлена'; break; case 'question': mail($address, $subquestion, $mesquestion); echo 'Заявка отправлена'; break; default: die( 'Заявка не отправлена' ); }
Ох, не программист ты совсем))))) Зачем ты объявляешь десяток переменных, если используешь только три-четыре из них? Выхватил адрес, выхватил экшн, ушел по нему в свич, для каждого конкретного кейса создал тему-тело письма и отправил. Это раз. Два - по свичу делаешь тему-тело, но саму отправку можно выполнять "общим" алгоритмом. И три - ты тупо пишешь "заявка отправлена". А с чего ты это взял? Откуда ты знаешь, что отправлена?
А я и не программист))) Спасибо! Вот так? PHP: <?php header('Refresh: 5; URL=http://localhost/index.html'); if(isset($_POST['token']) && $_POST['token']==='1') $name = htmlspecialchars($_POST["name"]); $email = htmlspecialchars($_POST["email"]); $tel = htmlspecialchars($_POST["tel"]); $message = htmlspecialchars($_POST["message"]); $date = (int)$_POST["date"]; $time = (int)$_POST["time"]; $services = htmlspecialchars($_POST["services"]); $better = (int)$_POST["better"]; $action = htmlentities($_POST['action'], ENT_QUOTES); switch( $action ) { case 'feedback': $theme = "обратная связь"; $message = " ФИО: $name Email: $email Телефон: $tel Сообщение: $message"; break; case 'callback': $theme = "заказать звонок"; $message = "ФИО: $name Телефон: $tel Удобное время звонка: $better Комментарий: $message"; break; case 'question': $theme = "задать вопрос"; $message = "ФИО: $name Email: $email Телефон: $tel Сообщение: $message"; break; case 'queue': $theme = "запись на прием"; $message = "ФИО: $name Email: $email Телефон: $tel Дата: $date Время: $time Услуга: $services Комментарий: $message"; break; } if(mail($address, $theme, $message)) { echo "Сообщение отправлено"; } else { echo "Сообщение не отправлено"; }
Ну только не $theme а $subject. Логическая разница таки между этими терминами есть. В остальном нормуль. (За исключением каста в число переменных "время" и "дата", но мне-то отсюда не видно значений и назначений)