我的问题: 我有一个联系表格,可以发送到一个电子邮件地址。它通常可以正常工作,但如果“电子邮件”中包含空格,则不会发送表单。文本字段(发送邮件的人将输入其电子邮件)。如果任何其他表格有空格,表格仍会发送。
我知道电子邮件地址中不允许使用空格,但如果邮件在电子邮件字段中以空格发送,则用户仍会被带到另一个页面,说明邮件已经发送,当它实际上没有&#39时;吨。因此,如果有人在输入电子邮件时意外放入空间,网站将不会发送表格,但会说它确实存在。
以下是我设置的方式:
在表单上,电子邮件字段由用户存储为其用户帐户电子邮件的内容自动填充。然后使用POST
将此变量传递到另一个页面' wl_process.php'将字段发送到电子邮件地址的位置。但是,即使它自动填写用户的电子邮件字段,他们也可能希望将其响应发送回不同的电子邮件。
我尝试做什么,而不是做什么: 我不确定为什么包含空格会阻止发送邮件。即使包含空格,我希望它发送表单。我正在寻找一个PHP标记或方法,其中所有空格都从文本字段中删除。我不确定是否存在。我认为另一种解决方案可能是检查电子邮件中的空格,如果空格中有弹出的内容并说“#34;输入的电子邮件无效,请再试一次。”#34;但理想情况下,我只是希望它发送电子邮件。而且,如果有人知道它为什么这样做,那将对未来的使用非常有益。
其他信息
请记住,在将空格输入“电子邮件”字段之前,表单才能正常运行。如果在任何其他字段中输入空格,表单仍将发送!
另外:$ var_email是从位于页面顶部的<? include?>
中提取的。 include包含一些$_SESSION
信息,以及从数据库中抓取电子邮件并转换为PHP变量的MYSQLI
调用。我怀疑这与这个问题有什么关系。我的问题是空格将阻止邮件发送。
什么不重要
我的命名约定。不要被抛弃,认为我的名为$email
的变量以任何方式被视为电子邮件地址。它可以重命名为任何东西。它只是一个变量和文本字段,然后发布,然后通过电子邮件发送。
我的代码
Page 1 (表格在哪里)
<div class="form_box">
...
<div class="field clearfix">
<label>Email <span>*</span></label>
<input id="element_1_email" name="element_1_email" value="<? echo $var_email;?>" size="30" class="validate[optional]" type="text" onClick="(this).value=''"/>
</div>
Page 2 (数据发送和邮寄的地方)
<?
$name = $_POST['element_0_name'];
$email = $_POST['element_1_email'];
$company = $_POST['element_2_company'];
$date = $_POST['element_3_date'];
$comment = $_POST['element_4_comment'];
$list = $_POST['element_5_list'];
$email_to = "contact@website.com";
$email_subject = "Online Form";
$email_message = "\n\n";
function clean_string($string) {
$bad = array ("content-type", "bcc:", "to:", "cc:", "href");
return str_replace($bad, "",$string);
}
$email_message .= '<div style="font-family:Arial, Helvetica, sans-serif;padding-left: 90px;font-weight: 100;font-size: 14px;color: #2a2a2a;"><table width="1070px" height="685px;"border="0" cellspacing="0" background="http://www.website/image.jpg">
<tr>
<td style="vertical-align:top;padding-left:88px;">
<h2 style="padding-top:150px;padding-left:90px;">Form Information:</h2>';
$email_message .= "Name: ".clean_string($name)."<br>";
$email_message .= "Email: " .clean_string($email). "<br>";
$email_message .= "Company: " .clean_string($company). "<br>";
$email_message .= "Date Required: " .clean_string($date). "<br>";
$email_message .= "Comment: " .clean_string($comment). "<br>";
$email_message .= '<u>List Of Things:<style> tr:nth-child(2n) {background-color:#d6d6d6;}</style> </u><br><table cellspacing="0" style="margin-top:10px;min-width:390px;border:1px solid #cccccc;">' .clean_string($list). '</table>';
$email_message .= "</div>";
$headers = 'From: '.$email."\r\n".
'Reply-To: '. $email."\r\n" .
'X-Mailer: PHP/' .phpversion();
$headers .= "MIME-Version:1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
@mail($email_to, $email_subject, $email_message, $headers);
//
?>
答案 0 :(得分:2)
为什么不从第2页的$_POST
变量中删除空格?
更改此
$email = $_POST['element_1_email'];
到这个
$email = str_replace(' ','',$_POST['element_1_email']);
----------- 更新 -----------
由于$headers
变量中的代码
$headers = 'From: '.$email."\r\n".'Reply-To: '. $email."\r\n" .
您在$email
处使用的clean_string
未通过space
功能(您也可以通过向$bad
数组添加$_POST['element_1_email']
删除空格),所以基本上你试图将电子邮件发送到{{1}}收到的任何内容,而不进行任何清理或电子邮件验证。