Форма Php Mail отправляет пустые письма?

  • Автор темы obaranovsk
  • 111
  • Обновлено
  • 13, May 2024
  • #1
Здравствуйте, недавно я разработал веб-сайт, и у меня есть страница контактов, где они могут отправить мне электронное письмо, указав свое имя, адрес электронной почты, номер телефона и сообщение.

Если не заполнят все поля, письмо не отправится.

Однако я получил несколько писем, в которых все поля пусты.

Как они отправляются? Вот ссылка, не бойтесь присылать мне несколько писем, чтобы попробовать.

Bugbytecomputers.com/contact.php

А вот код страницы контактов:

Имя:

Электронная почта:

Номер телефона:

Предпочтительный способ связи:

Телефон

Текст

Электронная почта

Предмет:

Сообщение:

Отправить

И код формы электронной почты:

$name = $_POST['имя'];

$email = $_POST['электронная почта'];

$phonenumber = $_POST['phonenumber'];

$contact = $_POST['контакт'];

$message = $_POST['сообщение'];

$subject = $_POST['subject'];

$content = "

Имя: $name
Электронная почта: $email
Номер телефона: $phonenumber
Предпочитаемый контакт : $contact $сообщение
"; $headers = "Тип контента:текст/html;кодировка=UTF-8" . "\r\n"; $headers .= 'От: Байт ошибки:' . $имя. "<" . $электронная почта. ">\r\n"; $headers .= 'Ответить:' . $электронная почта. "\r\n"; почта("", $subject, $content, $headers); ?>

obaranovsk


Рег
08 May, 2011

Тем
1

Постов
3

Баллов
13
  • 18, May 2024
  • #2
Ух, с чего начать... Как уже упоминалось, вы не доверяете проверке на стороне клиента, особенно сценариям. Его можно заблокировать, сделать недоступным, обойти и вообще игнорировать. ДАЖЕ если у вас есть лучшие проверки HTML 5 или JavaScript, вы ДОЛЖЕН проверьте еще раз на сервере.

ПЕРИОД. Ваша форма - неполный мусор без изящной деградации.



Где ваши наборы полей? Ваши лейблы? Почему ты зря тратишь столько времени на занятия? Почему вы встраиваете только абзацы со сценариями/состояниями ошибок? (это то, что должно быть добавлено сценарием или сервером). что вы делаете с этим бессмысленным DIV, который вы не можете сделать непосредственно с FORM? Гораздо меньше onsubmit в разметке с нулевым резервным планом — когда хороший сценарий должен подключаться к разметке, а не от нее.



Конечно, вы используете крушение поезда тупоголового разработчика, известного как jQuery, так что я даже не буду тратить время, пытаясь понять смысл этой катастрофы сценаризма.

Даже ваши атрибуты максимальной длины являются мусором, поскольку длина действительных электронных писем может достигать 320 символов!



На стороне сервера дела обстоят еще хуже; вы НИКОГДА слепо не доверяете значениям в $_POST, глупо тратить время на создание копий значений в «переменных просто так», а электронные письма в формате HTML без правильно сформированного заголовка (которого у вас явно НЕТ) могут быть полностью заблокированы.



или игнорируются почтовыми клиентами.

и это еще до того, как мы поговорим о статическом CSS в разметке, который большинство почтовых агентов все равно игнорируют. По сути, у вас есть подробный список того, как НЕ писать HTML, использовать JavaScript или даже обрабатывать формы. Первым шагом будет исправление формы.

Внутри формы есть больше тегов, чем просто input, textarea и select... что-то вроде этого:
 

<form method="post" action="email.php" class="contactUsForm">

<h2>Contact Us</h2>

<p>

Call (435) 720-0420, or fill out the form below to schedule an appointment or find out more about our services.

</p>

<fieldset>

<label for="contactName">Name:</label>

<input type="text" name="name" id="contactName">

<br>

<label for="contactMail">Email:</label>

<input type="text" name="email" id="contactMail">

<br>

<label for="contactPhone">Phone Number:</label>

<input type="text" name="phone" id="contactPhone">

<br>

<fieldset class="contactBy">

<h3>Prefered Method of Contact:</h3>

<input type="radio" name="contact" id="contactByPhone" value="Phone">

<label for="contactByPhone">Phone</label>

<br>

<input type="radio" name="contact" id="contactByText" value="Text">

<label for="contactByText">Text</label>

<br>

<input type="radio" name="contact" id="contactByMail" value="Email">

<label for="contactByMail">Email</label>

</fieldset>

<label for="contactSubject">Subject:</label>

<input type="text" name="subject" id="contactSubject">

<br>

<label for="contactMessage">Message:</label>

<textarea name="message" id="contactMessage"></textarea>

</fieldset>

<div class="submitsAndHiddens">

<input type="submit" value="send">

</div>

</form>
Код (разметка): Хотя я бы, вероятно, использовал случайный хеш в качестве скрытого ввода, привязанного к сеансу, чтобы предотвратить повторную отправку и/или злоупотребление.

Также обратите внимание, что я удалил электронное письмо; Причина использования контактной формы заключается в том, чтобы избежать спама на вашу электронную почту.

Если вы собираетесь просто вслепую перечислить это на странице, зачем вам эта форма? На стороне сервера вам придется проверить эту форму, как будто скриптов не существует, так что это следующий шаг.

Обычно я создаю свои формы, используя массив PHP, который можно использовать для хранения как типа проверки, так и меток, поэтому проверку значений можно автоматизировать на сервере.

Я бы поместил форму в отдельный PHP-файл под названием email.php, который будет обрабатывать ОБА вывод страницы и формы, а также отправку почты.

Это называется конструкцией «один индекс, чтобы управлять всеми» и представляет собой очень плавный и удобный способ обработки почты и минимизации накладных расходов.



Я выхожу на ужин, но постараюсь вернуться сюда позже и опубликовать пример кода того, о чем я говорю - возможно, используя гибридную «многочастную» версию электронного письма, чтобы вы могли отправить оба как текст и HTML, чтобы почтовые серверы и клиенты не считали вашу почту в формате HTML просто спамом.
 

LBulavkina


Рег
01 Jan, 2011

Тем
0

Постов
1

Баллов
1
  • 22, May 2024
  • #3
Это не ваш сценарий. Кажется, это работает довольно хорошо, по крайней мере, для меня. Но... есть способы отключить JavaScript. И когда он выключен, check() больше не будет работать. Я знаю только два способа сделать это в Firefox:
  • Через адресную строку браузера и about:config...
  • Через инспектор и панель инструментов...
 

Galyuha


Рег
02 Nov, 2010

Тем
0

Постов
4

Баллов
4
  • 01, Jun 2024
  • #4
Спасибо за вашу помощь.

Меня не особо беспокоят правильные этикетки и все такое, я знаю, что мне следует беспокоиться, но этот веб-сайт предназначен только для небольшого местного бизнеса, поэтому, пока он предоставляет информацию, которая работает для меня, я не планирую становиться веб-разработчик.

Однако я реализую некоторые вещи, которые вы упомянули.
 

ametist1


Рег
07 Jun, 2011

Тем
0

Постов
2

Баллов
2
  • 06, Jun 2024
  • #5
Привет, Бреннен. Сегодня их может быть всего несколько, но вскоре вы получите гораздо больше спам-сообщений. Не доверяйте onsubmit="return check()" для проверки электронной почты/санации/что бы то ни было.

Вместо этого используйте свой PHP.

Уже забыл где, но много обсуждений функции mail() вы найдете в следующем подфоруме: https://forums.digitalpoint.com/forums/php.37/
 

Dexterus


Рег
16 Jul, 2014

Тем
3

Постов
11

Баллов
41
  • 07, Jun 2024
  • #6
Когда вы только начинаете разбираться в том, что работает на клиенте (браузере), и что работает на сервере, это немного сбивает с толку.

JavaScript (обычно) является клиентским языком и запускается в браузере.

Вот почему ему нельзя доверять, поскольку все, что работает в браузере, может быть заблокировано, отключено или даже нарушено.

Последнее из них может вызывать особое беспокойство, поскольку оно открывает возможные дыры в безопасности.

Вот почему вам действительно следует проверять все на стороне сервера (в вашем случае в PHP). Проверка на стороне клиента — будь то атрибуты HTML 5 или JavaScript — в значительной степени предназначена для удобства, позволяющего сэкономить время и пропускную способность.

Однако на его реальную функциональность просто нельзя положиться.

Отсюда надоедливое «неписаное правило JavaScript»: если вы не можете создать полностью рабочую страницу без JavaScript, вам, скорее всего, нечего добавлять к ней скрипты.

Только недавно вошел в дверь, не думаю, что доберусь до этого примера PHP сегодня вечером, но, поскольку сейчас выходные, я посмотрю, смогу ли я втиснуть его.

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

payy


Рег
29 Oct, 2013

Тем
1

Постов
3

Баллов
13
  • 14, Jun 2024
  • #7
Я программирую на html целый месяц, знаю, что мой код не идеален, поэтому и разместил здесь.

Классы и элементы div нужны потому, что у меня есть две таблицы стилей: одна для мобильных устройств и одна для обычных браузеров, поэтому у всего должен быть класс.

Я уверен, что есть более эффективные способы, но я обнаружил, что этот способ работает.

Когда я разрабатывал форму, я думал, что это проверка на стороне сервера, но, похоже, нет, я поработаю над ее изменением.
 

NekoVampy


Рег
01 Jan, 2011

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно