Ошибки при формировании формы PHP - Примечание: неопределенный индекс

0

Я пытаюсь реализовать 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'];
  • 0
    Можете ли вы определить, какие строки в «say-hello.php» - это 35, 36 и 37?
  • 0
    Я добавил его как правку @Helpful
Теги:
forms

6 ответов

1
Лучший ответ

$ _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>'; 
        }
    }

?>
  • 0
    конечно, вы также можете проверить каждый вход самостоятельно, чтобы обеспечить лучшее сообщение об ошибке ;-)
  • 0
    Строка появляется только в том случае, если вы не отправили все поля. Если вы не хотите отображать ошибку, просто удалите строку. Необязательно, вы также можете отменить утверждение ...
Показать ещё 1 комментарий
2

Сначала вы должны проверить переменную. Попробуй это:

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>';
  }
}
  • 0
    Он отправил часть сообщения и выдал эту ошибку: Примечание: неопределенная переменная: body в C: \ xampp \ htdocs \ sandbox \ say-hello.php в строке 42 Ваше сообщение было отправлено!
  • 0
    В чем ошибка? Пожалуйста, дайте мне сообщение об ошибке.
Показать ещё 3 комментария
1

Ваша почтовая функция неверна, в ней нет аргумента "from", если вы хотите, чтобы аргумент от вашей почтовой функции был следующим:

Сначала определите переменную заголовков:

$headers = "From: $from";

И ваша функция почты:

mail($to,$subject,$body,$headers)
1

Чтобы избавиться от уведомлений, вы должны изменить свой 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>'; 
}
0

Вот код, попробуйте

$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>'; 
        }
    }
0

Вы должны вставить эти строки в оператор 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, скрипт будет читать переменные только после того, как будет отправлена кнопка отправки.

В любом случае, для вашего будущего рассмотрения, это не ошибки, предупреждения, сценарий все еще работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню