繁体   English   中英

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

[英]Why can't I get the visitor's data, from my form, in my email using php?

我使用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" />

请查阅我的脚注。

考虑到您的问题中可能缺少</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";

错误报告会发现这一点。


脚注:

编辑:如Riggs所述。

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

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

这是一篇关于堆栈的文章:

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

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

@ Fred-ii-也有很多好处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM