Я пытаюсь реализовать php для простой формы.
<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Hola';
$to = '[email protected]';
$subject = 'Hola';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
?>
<form class="form" method="post" action="say-hello.php">
<label>Name</label>
<input name="name" placeholder="Spongebob" required data-errormessage-value-missing="Whoa, you can't leave this blank!">
<label>Email</label>
<input name="email" type="email" placeholder="[email protected]" required data-errormessage-value-missing="Whoa, you can't leave this blank!" data-errormessage-type-mismatch="Something isn't right...">
<label>Message</label>
<textarea name="message" placeholder="Well Hello!" required data-errormessage-value-missing="Whoa, you can't leave this blank!"></textarea>
<div class="bttnholder">
<input class="submit" name="submit" type="submit" value="Submit" placeholder="Send">
</div>
</form>
Я не могу понять, почему часть моего PHP отображается как HTML и почему я получаю следующие ошибки на странице:
Примечание. Неопределенный индекс: имя в C:\xampp\htdocs\sandbox\say-hello.php в строке 35
Примечание. Неопределенный индекс: электронная почта в C:\xampp\htdocs\sandbox\say-hello.php в строке 36
Примечание. Неопределенный индекс: сообщение в C:\xampp\htdocs\sandbox\say-hello.php в строке 37
Любая помощь, чтобы заставить этот код работать?
Ниже приведены строки 35,36,37.
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$ _POST ['submit'] устарел, так как вы должны проверить правильные входные данные формы. Я проверяю, чтобы каждый ввод формы был установлен и не был пустым. Если один из них пуст или не установлен → ошибка. Если указаны все поля → отправьте почту.
<?php
$from = 'From: Hola';
$to = '[email protected]';
$subject = 'Hola';
if(
!isset($_POST['name']) || empty($_POST['name']) ||
!isset($_POST['email']) || empty($_POST['email']) ||
!isset($_POST['message']) || empty($_POST['message'])
){
echo '<p>Please fill in all fields</p>';
}else{
$body = "From: " . $_POST['name'] . "\n E-Mail: " . $_POST['email'] . "\n Message:\n " . $_POST['message'] . "";
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
?>
Сначала вы должны проверить переменную. Попробуй это:
if (isset($_POST['submit'])) {
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Hola';
$to = '[email protected]';
$subject = 'Hola';
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
Ваша почтовая функция неверна, в ней нет аргумента "from", если вы хотите, чтобы аргумент от вашей почтовой функции был следующим:
Сначала определите переменную заголовков:
$headers = "From: $from";
И ваша функция почты:
mail($to,$subject,$body,$headers)
Чтобы избавиться от уведомлений, вы должны изменить свой php на:
<?php
if(isset($_POST['name'])) {
$name = $_POST['name'];
}
if(isset($_POST['email'])) {
$email = $_POST['email'];
}
if(isset($_POST['message'])) {
$message = $_POST['message'];
}
$from = 'From: Hola';
$to = '[email protected]';
$subject = 'Hola';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
if (isset($_SERVER['CONTENT_LENGTH'])) {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
Вот код, попробуйте
$from = 'From: owais';
$to = '[email protected]';
$subject = 'Testing';
$name=$_POST['name'];
$email=$_POST['email'];
$message=$_POST['message'];
if(!empty($name) && !empty($email) && !empty($message) )
{
$body = "From: " . $_POST['name'] . "\n E-Mail: " . $_POST['email'] . "\n Message:\n " . $_POST['message'] . "";
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
}
Вы должны вставить эти строки в оператор if.
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Hola';
$to = '[email protected]';
$subject = 'Hola';
$body = "From: $name\n E-Mail: $email\n Message:\n $message";
Когда загружается страница html, имя, например, не существует. Он был установлен после нажатия кнопки отправки. Поэтому, если вы поместите его внутри оператора if, скрипт будет читать переменные только после того, как будет отправлена кнопка отправки.
В любом случае, для вашего будущего рассмотрения, это не ошибки, предупреждения, сценарий все еще работает.