Моя контактная форма PHP не работает

118
15

У меня возникла проблема с моей контактной формой, и я не знаю, является ли это контактной формой, которая является проблемой или PHP, может ли кто-нибудь взглянуть на нее и сказать мне, что случилось? Как я уже сказал, я просмотрел ее и чтобы он увидел, что проблема

<form>
<div class="row">
<div class="col-md-6">
<div class="group">
<input id="name" type="text"><span class="highlight"></span><span class="bar"></span>
<label>Name</label>
</div>
</div>
<div class="col-md-6">
<div class="group">
<input id="email" type="email"><span class="highlight"></span><span class="bar"></span>
<label>Email</label>
</div>
</div>
</div>
<div class="group">
<textarea class="form-control" rows="5" id="messege"></textarea>
<span class="highlight"></span><span class="bar"></span>
<label>Your Messege</label>
</div>
<button class="ripple">Send</button>
</form>

Вот часть PHP;

<?php
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['subject']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

// detect & prevent header injections
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}

$headers = 'From: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
'Reply-To: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
'Return-Path: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
'MIME-Version: 1.0' . "\r\n" .
'Content-Type: text/html; charset=utf-8' . "\r\n" .
'X-Priority: 1' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

// Replace with your email
mail( "email@example.com", $_POST['subject'], $_POST['message'], $headers );

}
?>

спросил(а) 2021-01-26T11:18:39+03:00 4 месяца, 4 недели назад
1
Решение
63

Вы добавили 'id' в форму, но вы не можете получить доступ к входному значению с помощью id, вместо этого вы должны использовать атрибут name. Вы также должны указать атрибут action и method в теге формы. так что входные значения будут отправляться выбранному пути или файлу с помощью метода, который вы выбрали. Я обновил ваш код с помощью решения. Вы должны попробовать это.

<form method="post" action="filename or path">
<div class="row">
<div class="col-md-6">
<div class="group">
<input id="name" name="name" type="text"><span class="highlight"></span><span class="bar"></span>
<label>Name</label>
</div>
</div>
<div class="col-md-6">
<div class="group">
<input id="email" name="email" type="email"><span class="highlight"></span><span class="bar"></span>
<label>Email</label>
</div>
</div>
</div>
<div class="group">
<textarea class="form-control" rows="5" name="message" id="messege"></textarea>
<span class="highlight"></span><span class="bar"></span>
<label>Your Messege</label>
</div>
<input type="button" name="button" class="ripple" value="send">
</form>

Но если вы указали свой PHP-код в том же файле, вам не нужно добавлять атрибут метода и действия в <form>. и вы должны добавить атрибут name в <button>, чтобы вы могли убедиться, что PHP-код будет выполнен, если нажать кнопку.

<button name="submit" class="ripple">Send</button>

и обновите свой PHP-код следующим образом:

<?php
if(isset($_POST['submit']))
{
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['subject']) && isset($_POST['message']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {

// detect & prevent header injections
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}

$headers = 'From: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
'Reply-To: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
'Return-Path: ' . $_POST["name"] . '<' . $_POST["email"] . '>' . "\r\n" .
'MIME-Version: 1.0' . "\r\n" .
'Content-Type: text/html; charset=utf-8' . "\r\n" .
'X-Priority: 1' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

// Replace with your email
mail( "email@example.com", $_POST['subject'], $_POST['message'], $headers );
}
else
{
//echo error
}
?>

ответил(а) 2021-01-26T11:18:39+03:00 4 месяца, 4 недели назад
63

У вас нет атрибутов name в ваших полях формы:

<input id="name" type="text"><span class="hi [..snip..]

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

Даже некоторая отладка BASIC, например var_dump($_POST), показала бы вам проблему.

ответил(а) 2021-01-26T11:18:39+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема