Я создал контактную форму на своем веб-сайте, которая работала с использованием сервера xampp, но не работает на Heroku.
это HTML:
<form action = "../php/contact.php" method = "post">
<div class = "form-group">
<label>Name</label>
<input type = "text" name = "name" class = "form-control frame" required>
</div>
<div class = "form-group">
<label>email</label>
<input type = "email" name = "email" class = "form-control frame" required>
</div>
<br>
<div class = "form-group">
<label>Message</label>
<textarea name = "message" id = "message" cols = "" rows = "" class = "form-control frame"></textarea>
</div>
<br>
<button class = "btn btn-outline-secondary" type = "submit" name = "submit">Send</button>
</form>
А это PHP:
<?php
$name = $_POST['name'];
$visitorEmail = $_POST['email'];
$message = $_POST['message'];
$emailFrom = 'haizler.co.il';
$emailSubject = "New Form Submission";
$emailBody = "User Name: $name.\n".
"User Email: $visitorEmail.\n".
"User Message: $message.\n";
$to = "[email protected]";
$headers = "From: $emailFrom \r\n";
$headers .= "Replay-To: $visitorEmail \r\n";
mail($to,$emailSubject,$emailBody,$headers);
header("Location: contact.html");
?>
При заполнении детали и нажатии кнопки «Отправить» я получаю сообщение «Не удается выполнить POST /php/contact.php». Я попытался изменить адрес php в действии формы, а также попытался поместить файл php в ту же папку, где есть файл html, но это не сработало.
Этот код работал с использованием xampp (после изменения определений в файле xampp php.ini).
Заранее спасибо!
снова относительные ссылки. всегда плохая идея. позвольте угадаю, ваш адрес XAMPP похож на http://localhost/some-folder/index.php? Где у героку только http://example.com/index.php?
При отправке формы проверьте URL-адрес в браузере, он должен выдать 404, если путь неправильный.
@ delboy1978uk в XAMPP Я не дохожу до части php, потому что, когда я нажимаю «отправить», он просто отправляет сообщение и обновляет страницу. Адрес контактной формы в основном локальный / некоторая папка1 / некоторая папка2 / contact.html, тогда как адрес в Heroku - example.com/view/contact.html. При нажатии на «отправить» в Heroku я получаю «Cannot POST /php/contact.php» и адрес example.com/php/contact.php
@mattfryercom я проверил, а также как это может быть неправильно, если он работает с XAMPP?
попробуйте добавить PHP в начало файла и добавить action = "". Это отправит файл самому себе, и вам не придется беспокоиться о пути. Если это не сработает, мы знаем, что проблема не в пути. Вам нужно будет добавить условие в начале PHP, например if ($_POST['submit']) { /* add the rest of the PHP here */ }
@mattfryercom сделал то, что вы сказали, но все еще не работает
состояние рабочее? просто проверьте инструкцию if, повторив что-нибудь, если форма отправляется. Если это сработает, поместите свой PHP в этот условный оператор. Упростите проблему, просто посмотрите, сможете ли вы получить форму для отправки на ту же страницу и повторить что-то внутри условного оператора, если форма отправляется. Может попробовать if (!empty($_POST['submit'])) { echo 'form submitted'; }. Также попробуйте добавить значение button, например <button value = "submit">submit</button>, очевидно, сохраните и другие атрибуты.
Чтобы уточнить, я говорю, что если вы отправляете форму на ту же страницу, вам нужно изменить расширение файла .html на .php и добавить PHP в верхнюю часть файла HTML.
Что произойдет, если у вас есть HTML-код, отправляемый на ту же страницу с action = "", и в файле нет PHP? так что просто проверьте, отправляется ли HTML-форма.
Когда action = "" я по-прежнему получаю сообщение "Невозможно выполнить POST /view/contact.html"
@YardenA Попробуйте просто это, и ничего больше на странице, чтобы максимально упростить проблему, если это не сработает, вам, вероятно, придется что-то обновить в php.ini: <form action = "" method = "post"><button type = "submit">Submit</button></form> - Надеюсь, это поможет, дайте мне знать результат .
@mattfryercom спасибо за помощь, но я думаю, что буду искать альтернативу этой конкретной форме ... Я не думаю, что у меня есть доступ к файлу php.ini на Heroku, и я не могу найти ничего об этой проблеме в целом в гугле.
@YardenA Нет проблем, это может помочь: devcenter.heroku.com/articles/…
Исправьте свой XAMPP, а не heroku. Настройте виртуальный хост в дополнительной папке apache conf. затем настройте код, чтобы он снова работал локально, и когда вы его развернете, он должен быть dfine






Вы проверили правильность пути, по которому вы публикуете сообщение?