【问题标题】:HTML Form Submission via PHP通过 PHP 提交 HTML 表单
【发布时间】:2014-02-19 18:41:46
【问题描述】:

尝试通过 PHP 将 HTML5 表单提交到电子邮件,并重定向到“谢谢!”提交成功后的页面。问题是,表单没有发送并且重定向没有发生。

这是我的 HTML:

<form id="vendorInfo" action="process_form_vendor.php" method="post">
        <label for="vendorName">Vendor Name:</label>
        <br />              
    <input id="vendorName" name="vendorName" type="text" maxlength="30" required>
    <br />  
        <label for="contactName">Contact Name:</label>                  <br />
    <input id="contactName" name="contactName" type="text" maxlength="35" required>
    <br />
        <label for="vendorType">Organization Type:</label>
        <br />
    <select id="vendorType" name="vendorType">
        <option value="carrier">
            Insurance Carrier
        </option>
        <option value="tech_crm">
            Technology/CRM Management
        </option>
        <option value="leadProvider">
            Lead Provider   
        </option>
        <option value="info_comm">
            Information/Communication
        </option>
        <option value="other">
            Other (please describe below)
        </option>
    </select>
    <br />
        <label for="other1">Other Organization Type:</label>
        <br />
    <input id="other1" name="other1" type="text" maxlength="25">
    <br />
        <label for="email">Email:</label>
        <br />
    <input id="email" name="email" type="email" maxlength="30" required>
    <br />
        <label for="phone">Phone:</label>   
        <br />  
    <input id="phone" name="phone" type="tel" maxlength="12" required placeholder="xxx-xxx-xxxx">
    <br />
        <label for="questions">Any questions or comments? Leave them here:</label>
        <br />
    <textarea id="questions" name="questions" rows="10" maxlength="300"></textarea>
    <br />
    <br />
    <fieldset id="selectionBox">
        <legend id="packageSelect">
            The following sponsorship packages are available for the Sales Summit; contact          <ahref="mailto:email@domain.com”>Amanda</a> for pricing and details: 
        </legend>
            <input type="radio" name="packageSelect" value="Bronze Package" checked>&nbsp;Bronze
            <br />
            <br />
            <input type="radio" name="packageSelect" value="Silver Package">&nbsp;Silver
            <br />
            <br />
            <input type="radio" name="packageSelect" value="Gold Lunch Package">&nbsp;Gold&nbsp;(breakfast; exclusive sponsorship)
            <br />
            <br />
            <input type="radio" name="packageSelect" value="Gold Breakfast Package">&nbsp;Gold&nbsp;(lunch; exclusive sponsorship)
            <br />
            <br />
            <input type="radio" name="packageSelect" value="Gold Trade Show Package">&nbsp;Gold&nbsp;(trade&nbsp;show; exclusive sponsorship)
        </fieldset>
        <br />
    <button type="submit" name="submit">Submit</button>&nbsp;<button type="reset" name="reset">Reset</button>
    <br />
</form>

这是我的 PHP:

<?php

if(!isset($_POST['submit']))
{
    echo "error; you need to submit the form!";
}

$vendorName = $_POST['vendorName'];
$contactName = $_POST['contactName'];
$vendorType = $_POST['vendorType'];
$other1 = $_POST['other1'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$questions = $_POST['questions'];
$packageSelect = $_POST['packageSelect'];

if (empty($vendorName)||(empty($contactName)||(empty($vendorType)||(empty($email)||(empty($phone)||(empty($packageSelect)) {
    echo "Vendor Name, Contact Name, Vendor Type, Email, Phone, and Package Selection are mandatory!";
    exit;   
}

$email_from = 'email@domain.net';
$email_subject = '2014 SMS Sales Summit - New Vendor Reservation Request';
$email_body = "You have received a new vendor reservation request for the 2014 SMS Sales Summit from $contactName at $vendorName.\n".
              "Vendor Type: $vendorType\n".
            "Other Vendor Type: $other1\n".
            "Email Address: $email\n".
            "Phone Number: $phone\n".
            "Additional Questions: $questions\n".
            "Sponsorship Level: $packageSelect\n".

$to = 'email@domain.net';
$headers = "$email_from \r\n";
$headers .= "Reply-To: $email \r\n";

mail($to,$email_subject,$email_body,$headers);
header('Location: thank-you.html');

?>

我不知道发生了什么或为什么这不起作用。有什么想法吗?

【问题讨论】:

  • 错误日志?为什么源代码中有智能引号?
  • 发现了反引号! 虽然我已经看到了一些确实以某种方式起作用的情况,但请尝试使用单引号 (') 或双引号 (")。
  • 我已经修复了 PHP 中的所有反引号(我认为这只是我提交问题时的一个错误;我在文本编辑器中打开代码以修复选项卡等,并且它们在某些地方进行了转换)并返回到我的原始代码以验证它们实际上是刻度而不是智能引号。尽管如此,当我尝试提交表单时,仍然没有任何结果。
  • 这一行if (empty($vendorName)||(empty($contactName)||(empty($vendorType)||(empty($email)||(empty($phone)||(empty($packageSelect)) 应该读作if (empty($vendorName)|| empty($contactName)|| empty($vendorType)|| empty($email)|| empty($phone)|| empty($packageSelect))

标签: php html forms post


【解决方案1】:

(已测试)试试这个,它对我有用。

另外,您可能会收到“标头已发送”的错误消息,这对我来说确实如此,因此我在最后使用了 echo 并评论了您的 header(".... 以进行测试。如果您在&lt;?php 之前有一个空格,这可能会导致出现错误消息。您可以尝试在 PHP 开始标签下方使用ob_start();。

您的 empty 条件句 ) 有一些太多,有些缺失/不在正确的位置。

另外,"Sponsorship Level: $packageSelect\n". 末尾缺少一个结束分号,那里有一个点。加上一个缺失的From: 已添加。

<?php
// uncomment line below to use with header redirect
// ob_start();
if(!isset($_POST['submit']))
{
    echo "error you need to submit the form!";
}


$vendorName = $_POST['vendorName'];
$contactName = $_POST['contactName'];
$vendorType = $_POST['vendorType'];
$other1 = $_POST['other1'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$questions = $_POST['questions'];
$packageSelect = $_POST['packageSelect'];


if (empty($vendorName)|| empty($contactName)|| empty($vendorType)|| empty($email)|| empty($phone)|| empty($packageSelect)){
    echo "Vendor Name, Contact Name, Vendor Type, Email, Phone, and Package Selection are mandatory!";
    exit;   
}

 $email_from = 'email@domain.net';

$email_subject = '2014 SMS Sales Summit - New Vendor Reservation Request';
$email_body = "You have received a new vendor reservation request for the 2014 SMS Sales Summit from $contactName at $vendorName.\n".
              "Vendor Type: $vendorType\n".
            "Other Vendor Type: $other1\n".
            "Email Address: $email\n".
            "Phone Number: $phone\n".
            "Additional Questions: $questions\n".
            "Sponsorship Level: $packageSelect\n";

$to = "email@domain.net";

$headers = 'From: ' . $email_from . "\r\n";

$headers .= "Reply-To: $email \r\n";

mail($to,$email_subject,$email_body,$headers);
// header('Location: thank-you.html');

 echo "thanks";

?>

脚注:

如果仍然没有“发送”,则更改:

<button type="submit" name="submit">Submit</button>

到:

<input type="submit" name="submit" value="Submit">

如果您将header("... 与ob_start(); 一起使用,则不得使用其下方的echo。只需将其注释掉即可。

【讨论】:

  • @KrishR 谢谢 Krish,非常感谢 :)
  • @Fred-ii- 做到了!邮件提交成功。现在,对于重定向...我需要在最后一行更改什么以使其显示我指定的“thank-you.html”页面?
  • 您可以尝试在&lt;?php 下添加ob_start();,然后使用我注释掉的重定向,然后注释掉我刚刚测试并有效的echo "thanks"; @andrewdcato。
  • 查看我的编辑/重新加载它。我把它放在&lt;?php 下作为评论// ob_start(); @andrewdcato - 只需删除评论//
  • @Fred-ii- 非常感谢。你让我更容易理解这些 PHP 东西 :)
【解决方案2】:

$email_from 和 $to 中有语法错误。需要使用'(单引号)或"(双引号)而不是‘。试试这个,

$email_from = 'email@domain.net';
           ...^                ^....

而不是

$email_from = ‘email@domain.net’;

另外,在您的if 条件下,您错过了添加大量)

if (empty($vendorName)||
      empty($contactName)||
         empty($vendorType)||
            empty($email)||
                empty($phone)||
                    empty($packageSelect) ) {
echo "Vendor Name, Contact Name, Vendor Type, Email, Phone, and Package Selection are mandatory!";
exit;   
}

【讨论】:

  • 啊,是的,那些可怕的聪明/卷曲引号。 “美丽却致命。”
  • 我已经完成并更正了所有的反引号,但是当我尝试提交表单时仍然没有任何结果。
  • “没有任何东西通过”是指邮件已“发送”但没有变量吗?还是“什么都没有”发生? @andrewdcato
  • 这一行"Sponsorship Level: $packageSelect\n". 应该是"Sponsorship Level: $packageSelect\n"; 在它的末尾有一个点,它应该是一个结束的分号。 @andrewdcato
  • @Fred-ii- 很抱歉造成混乱 - 没有发送电子邮件,并且仍然没有重定向到“谢谢”页面。
【解决方案3】:
<button type="submit&" name="submit">Submit</button>&nbsp;<button type="reset" name="reset">Reset</button>

到

<button type="submit" name="submit">Submit</button>&nbsp;<button type="reset" name="reset">Reset</button>

表单是从前端提交的吗?

同样在 php 代码中,$email_from:

$email_from = ‘email@domain.net’;

改成:

$email_from = 'email@domain.net';

注意单引号的区别。 $to 也是如此:

$to = ‘email@domain.net';

改成:

$to = 'email@domain.net';

【讨论】:

  • 我已经更正了您指出的所有错误(PHP 中的与号和智能引号),但仍然没有。表单根本没有提交。
  • 我看到了必填属性,您是否正确填写了所有字段?
【解决方案4】:

你能把&lt;button type ="submit&amp;"&gt;?中的"&amp;"去掉吗

您还需要在最后一行之后使用&lt;/form&gt; 关闭表单

【讨论】:

  • 我已经从按钮类型声明中删除了与号,但是当我尝试提交时仍然没有得到任何东西。当我在原始问题中输入 HTML 时,缺少的表单标签是我的一个错误。
  • 您是否在 PHP 上启用了 OpenSSL 扩展?
【解决方案5】:

为什么type="submit&amp;" 中有&amp;?此外,没有关闭 &lt;/form&gt; 标记。

【讨论】:

  • 我已经从按钮类型声明中删除了与号,但是当我尝试提交时仍然没有得到任何东西。当我在原始问题中输入 HTML 时,缺少的表单标签是我的一个错误。
  • 您是否拥有所有需要的html、head、body 标签和结束标签?
  • 是的;我的 HTML 验证没有问题。
【解决方案6】:

你忘了在 $email_body 后面加分号

请放一个

$email_body = "";

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 2016-06-24
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多