我使用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" />
答案 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-提出了很多好处