为什么我无法从我的表单中使用php在我的电子邮件中获取访问者的数据?

时间:2016-01-15 14:46:08

标签: php forms email post

我使用Dreamweaver CS6和我正在使用的php代码将表单发送到我的电子邮件,但不是填写它的人的数据。我在php上的代码是(实际的电子邮件替换为" email@email.com":

    <?php
$to= "email@email.com";
$subject= "Endorsement Form";
$message= "Endorser name: " . $_POST['name'] . "\r\n" . 
"Email:             " . $_POST['email'] . "\r\n" . 
"Address:           " . $_POST['address'] . "\r\n" . 
"City:              " . $_POST['city'] . "\r\n" . 
"State:             " . $_POST['state'] . "\r\n" . 
"Zip Code:          " . $_POST['zipcode'] . "\r\n" . 
"Phone Number:      " . $_POST['phonenumber'] . "\r\n" . 
"Endorsement Type   " . $_POST['endorsementtype'] . "\r\n" . "\r\n" . 
"Endorsement Quote  " . $_POST['endorsementquote'] . "\r\n" ."\r\n" .
$from= $_POST['email'];
$headers= "From: $from" . "\r\n";
$headers .= "Bcc: email@email.com" . "\r\n";
mail($to,$subject,$message,$headers);  
?>

我的HTML表单:

    <form id="endorsementForm" name="endorsementForm" method="post"     action="email_form.php" enctype="text/plain">
        <span id="sprytextfield1">
          <label for="name">Name:</label>
          <br />
          <input type="text" name="name" id="name" />
          <span class="textfieldRequiredMsg">*</span></span>
            <p><span id="sprytextfield2">
          <label for="email">Email:<br />
          </label>
          <input type="text" name="email" id="email" />
          <span class="textfieldRequiredMsg">*</span><span     class="textfieldInvalidFormatMsg">*</span></span></p>
        <p><span id="sprytextfield3">
          <label for="address">Address:</label>
          <br />
          <input type="text" name="address" id="address" />
          <span class="textfieldRequiredMsg">*</span></span></p>
        <p><span id="sprytextfield4">
          <label for="city">City:</label>
          <br />
          <input type="text" name="city" id="city" />
          <span class="textfieldRequiredMsg">*</span></span></p>
        <p><span id="sprytextfield5">
          <label for="state">State:<br />
          </label>
          <input type="text" name="state" id="state" />
          <span class="textfieldRequiredMsg">*</span></span></p>
        <p><span id="sprytextfield6">
          <label for="zipcode">Zip Code:<br />
          </label>
          <input type="text" name="zipcode" id="zipcode" />
          <span class="textfieldRequiredMsg">*</span><span     class="textfieldInvalidFormatMsg">*</span></span></p>
        <p><span id="sprytextfield7">
          <label for="phonenumber">Phone Number:</label>
          <br />
          <input type="text" name="phonenumber" id="phonenumber" />
          <span class="textfieldRequiredMsg">*</span></span></p>
        <p>Endorsment Type:</p>
        <p><span id="spryradio1">
          <label>
            <input type="radio" name="endorsementtype" value="type1"     id="endorsementtype_0" />
            Personal</label>
          <br />
          <label>
            <input type="radio" name="endorsementtype" value="type2"     id="endorsementtype_1" />
            Professional</label>
          <br />
          <label>
            <input type="radio" name="endorsementtype" value="type3"     id="endorsementtype_2" />
            Organization</label>
          <br />
          <span class="radioRequiredMsg">Please make a selection.</span>    </span></p>
        <p>Endorsment Quote:</p>
        <p><span id="sprytextarea1">
          <textarea name="endorsementquote" id="endorsementquote" cols="45"  rows="5"></textarea>
          <span class="textareaRequiredMsg">*</span></span></p>
        <p>
          <input type="submit" name="submit" id="submit" value="Submit" />
          <input type="reset" name="reset" id="reset" value="Clear Form" />

2 个答案:

答案 0 :(得分:2)

查阅我的脚注。

鉴于您的问题中可能缺少</form>标记(我在您的问题中评论过的内容),您不会检查您的输入是否为空,从而导致邮件中没有数据发送

您需要对输入使用条件!empty()

旁注: &&逻辑运算符表示AND。您还可以使用||作为逻辑OR运算符,具体取决于您要检查的内容。

即:

 if(!empty($_POST['var1']) && !empty($_POST['var2']) ) 
 {

 // run your code

 }

您可以将其添加到其他POST阵列中。

参考:

另外,如果您的HTML表单和PHP在同一个文件中(虽然未知但很可能),那么它也会发送空数据。

因此,请在提交按钮中使用条件isset(),然后在其中使用条件empty()

您还可以使用$message变量中的POST数组打开XSS注入。

将变量分配给POST数组,并使用验证过滤器。

此处还有语法错误:

"Endorsement Quote  " . $_POST['endorsementquote'] . "\r\n" ."\r\n" .

如果这是您的实际代码,那么您没有正确关闭它。

如果应该包含一个结束分号并丢失最后一个点:

"Endorsement Quote  " . $_POST['endorsementquote'] . "\r\n" ."\r\n";

错误报告会抓住这个。

<强>脚注:

编辑:正如里格斯所说。

您需要删除enctype="text/plain"

我没有看到通过显示的内容。但我上面的答案仍然适用,你应该这样做,因为你仍然会得到可能的空数据。

这是关于Stack的文章:

答案 1 :(得分:2)

enctype=标记移除<form>属性,将其默认为application/x-www-form-urlencoded或将encytpe更改为

enctype="application/x-www-form-urlencoded"

同样@ Fred-ii-提出了很多好处