PHP отправить данные формы и отправить по электронной почте [дубликат]

Вопрос был:

Как вернуть ответ от асинхронного вызова?

blockquote>

, который может быть интерпретирован как:

Как сделать синхронный асинхронный код синхронным?

blockquote>

Решение будет состоять в том, чтобы избежать обратных вызовов и использовать комбинацию Promises и async / await.

Я хотел бы привести пример для запроса Ajax.

(Хотя он может быть записан в Javascript, я предпочитаю писать его на Python и компилировать его в Javascript, используя Transcrypt . Это будет достаточно ясно.)

Позволяет сначала включить использование JQuery, чтобы $ был доступен как S:

__pragma__ ('alias', 'S', '$')

Определить функцию, которая возвращает Promise, в этом случае вызов Ajax:

def read(url: str):
    deferred = S.Deferred()
    S.ajax({'type': "POST", 'url': url, 'data': { },
        'success': lambda d: deferred.resolve(d),
        'error': lambda e: deferred.reject(e)
    })
    return deferred.promise()

Использовать асинхронный код, как если бы он был синхронным:

async def readALot():
    try:
        result1 = await read("url_1")
        result2 = await read("url_2")
    except Exception:
        console.warn("Reading a lot failed")

2
задан Ninjakannon 5 April 2015 в 00:49
поделиться

2 ответа

Как уже упоминалось выше, ваша кнопка отправки ДОЛЖНА иметь атрибут name="submit", иначе ваш if (isset($_POST['submit'])){... не будет работать. Тем не менее, у меня была эта точная проблема в последнее время и почему-то наткнулся на упоминание о том, что <input name="name"> виноват. В вашем случае <input name="Name">. Как только я обновил атрибут name до «username», форма функционировала отлично. Хотя я не смог найти точных аргументов в пользу этой причуды, он определенно поднял понимание того, что я назвал моими атрибутами, селекторами, переменными и т. Д. ...

0
ответ дан Cody 27 August 2018 в 07:23
поделиться

Здесь кое-что не так.

Давайте начнем с вершины и с вашим условным утверждением ( и проделаем свой путь вниз ).

if (isset($_POST['submit'])){...}

Ваша кнопка отправки <input type="submit" value="submit" id="submit"> не имеет для нее атрибута имени.

  • Вы можете полагаться только на «id», который не будет работать, ему нужно «имя» ".

Измените его так, чтобы он читался как:

<input type="submit" name="submit" value="submit" id="submit">
  • Поскольку он не назван, что-либо внутри этого условного оператора не будет выполняться.

Затем вы используете mysqli_real_escape_string() , которые теоретически требуют, чтобы соединение было передано этой функции.

Ie:

$Name = mysqli_real_escape_string($connection,$Name);

и сделать то же самое для остальных; предполагая, что вы взаимодействуете с базой данных.

Однако неясно, действительно ли вы взаимодействуете с вашей базой данных или нет, поэтому, если вы не взаимодействуете с ней, удалите все из них mysqli_real_escape_string из вашего POST массивы.

Т.е.:

$Name = $_POST['Name'];

и сделайте то же самое для остальных.

Вы также пропускаете POST в качестве метода в вашей форме:

<form action="action_page.php" name="myform">

, который по умолчанию GET при пропуске. Поэтому измените его на:

<form action="action_page.php" name="myform" method="post">

Чтобы затем проверить, была ли отправлена ​​почта, измените

mail($webEmail,$email_subject,$email_body,$headers);

на

if(mail($webEmail,$email_subject,$email_body,$headers)){
echo "Sent";
}

Если вы видите «Отправлено», тогда почта выполнила бы свою работу. Если почта не получена, проверьте свой спам. Или ваш сервер может быть внесен в черный список.

Убедитесь, что у вас есть доступ к использованию mail().

Вы также должны убедиться, что все входы были заполнены с помощью условного empty().

Ie:

if(!empty($_POST['Name'])){
// $Name = mysqli_real_escape_string($Name);
   $Name = $_POST['Name'];
   }

Добавьте сообщение об ошибке в начало вашего файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

Sidenote: Сообщение об ошибках должно выполняться только в стадии постановки и никогда не производить.


Сноски:

Я не знаю, что они используются для onfocus="this.value='';", поэтому, если у вас где-то есть JS / Ajax, вам нужно проверить их.

  • Если они не используются ни для чего, вы можете их удалить.

Вы также должны попробовать удалить value="Name" и для других также на всякий случай.

Sidenote:

Если вы все еще получаете ошибку 404, попробуйте поместить ваш PHP сверху и вашу HTML-форму ниже этого и внутри того же файла с расширением .php и выполните:

<form action="" name="myform" method="post">

с использованием action="" в качестве действия, которое должно выполняться на на этой же странице.


Дополнительная сноска:

Я заметил в комментарии, который вы разместили в другом ответе:

"I добавленный заголовок ('Местоположение: lizbethmcgee.com/pages/Contact.php'; );

Сначала убедитесь, что вы не выводите его перед заголовком.

Кроме того, вы должны также включить полный вызов http:// и exit;:

header("Location: http://www.lizbethmcgee.com/pages/Contact.php");
exit;

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


Как AdamT заявил в комментарии:

Отправка почты с помощью команды php mail , нет гарантии, что почта будет отправлена ​​во входящую папку, в которую вы ее отправили. Как уже упоминалось, есть партии спамеров и, к сожалению, тяжелой степени фильтрации спама.Если вы действительно хотите иметь больше шансов получить почту, вам следует связаться с GoDaddy и спросить их, как вы можете настроить SMTP-электронную почту для своей учетной записи.

5
ответ дан Funk Forty Niner 27 August 2018 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: