我有这样的表格:
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<div>
<span><label>Name</label></span>
<span><input name="userName" type="text" class="textbox"></span>
</div>
<div>
<span><label>Email</label></span>
<span><input name="userEmail" type="text" class="textbox"></span>
</div>
<div>
<span><label>Phone</label></span>
<span><input name="userPhone" type="text" class="textbox"></span>
</div>
<div>
<span><label>Subject</label></span>
<span><textarea name="userMsg"> </textarea></span>
</div>
<div>
<span><input type="submit" value="Send!"></span>
</div>
</form>
以下PHP代码位于同一页面上,因为action
为<?php echo $_SERVER['PHP_SELF']; ?>
:
<?php
if(isset($_POST)) {
$name = htmlspecialchars($_POST['userName']);
$email = htmlspecialchars($_POST['userEmail']);
$phone = htmlspecialchars($_POST['userPhone']);
$message = htmlspecialchars($_POST['userMsg'] . $phone);
$message = wordwrap($message, 70, "\r\n");
$to = 'myEmail';
$subject = 'subject';
$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}
?>
但是,当用户没有提交表单并只访问联系表单页面时,我会收到一封空白电子邮件。
我该如何解决这个问题?
答案 0 :(得分:2)
将您的if语句更改为
if(isset($_POST['userEmail'])
每当您访问该网站时,都会设置$ _POST,请参阅PHP doc for isset
另见empty(),您也可以这样做:
if(!empty($_POST))
您可以在文档中看到:
[empty()]如果var存在并且具有非空非零,则返回FALSE 值。否则返回TRUE。
以下内容被认为是空的:
- &#34;&#34; (空字符串)
- 0(0为整数)
- 0.0(0作为浮动)
- &#34; 0&#34; (0作为字符串)
- NULL
- FALSE
- array()(空数组)
- $变种; (声明的变量,但没有值)
或在this question,Nemoden的回答建议使用$_SERVER['REQUEST_METHOD'] == 'POST'
- 这是非常不言自明的:如果页面是{{1}请求的请求方法,此语句将为true,但是如果您在同一页面上有多个表单,我建议命名每个提交按钮并检查它。
答案 1 :(得分:1)
如果没有发送表单数据,请不要发送表单。
如果该变量中存在某些内容,则条件if(isset($_POST))
会检查是否存在变量$_POST
。 $_POST
数组是PHP自动创建的超级全局之一,并且始终存在。
您需要检查该数组中是否有一些后置变量; e.g。
if( !empty( $_POST ) )
或更好
if( !empty( $_POST['userEmail'] ) )
...因为post数组可能有成员(即表单字段),但那些可能是空的。
答案 2 :(得分:0)
$_POST
只是一个空的预定义数组,因此当他们加载页面时,会定义$_POST
。您需要做的是isset($_POST['name'])
<?php
if(isset($_POST['name'])) {
$name = htmlspecialchars($_POST['userName']);
$email = htmlspecialchars($_POST['userEmail']);
$phone = htmlspecialchars($_POST['userPhone']);
$message = htmlspecialchars($_POST['userMsg'] . $phone);
$message = wordwrap($message, 70, "\r\n");
$to = 'myEmail';
$subject = 'subject';
$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}
?>
答案 3 :(得分:0)
<?php
if(isset($_POST['userName']) && isset($_POST['userEmail']) && isset($_POST['userPhone']) && isset($_POST['userMsg'])) {
$name = htmlspecialchars($_POST['userName']);
$email = htmlspecialchars($_POST['userEmail']);
$phone = htmlspecialchars($_POST['userPhone']);
$message = htmlspecialchars($_POST['userMsg'] . $phone);
$message = wordwrap($message, 70, "\r\n");
$to = 'myEmail';
$subject = 'subject';
$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}
?>
但你可以添加
if(!empty($_POST['userMsg'])
测试变量是否为空......
答案 4 :(得分:0)
您可以为提交按钮指定一个名称,并检查是否单击了该按钮。这将阻止在加载页面时发送电子邮件。
if (isset($_POST["submit"])) {
// your code
}
编辑提交按钮的HTML,如下所示:
<input type="submit" value="Send!" name="submit">
答案 5 :(得分:0)
提供提交按钮的名称,如
<span><input type="submit" value="Send!" name="submit"></span>
并在php中检查它
if(isset($_POST['submit']))
{
// your code
}
答案 6 :(得分:0)
这不是一个好习惯。 我强烈建议您开始使用PHP框架。
...尽管如此
$ _POST将始终存在,因此您无法像if(isset($_POST))
那样对其进行测试。
要测试您的表单是否已提交,您必须检查是否存在某些预期的POST变量。
在您的情况下,if(isset($_POST['userEmail']))
之类的内容可以解决问题,或者您可以在提交按钮中添加name
属性并对其进行测试if(isset($_POST['mySubmitButtonName']))
答案 7 :(得分:0)
您需要添加提交按钮的名称
<input type="submit" value="Send!" name="send">
然后你可以在按下按钮时编写条件,邮件将像
一样发送if(isset($_REQUEST['send'])){
$name = htmlspecialchars($_POST['userName']);
$email = htmlspecialchars($_POST['userEmail']);
$phone = htmlspecialchars($_POST['userPhone']);
$message = htmlspecialchars($_POST['userMsg'] . $phone);
$message = wordwrap($message, 70, "\r\n");
$to = 'myEmail';
$subject = 'subject';
$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
}
答案 8 :(得分:0)
这可能是针对表单上的$_SERVER['PHP_SELF'];
,尝试添加实际页面目录或更好的解决方案,我会尝试检查特定必填字段是否为空
if (!empty($_POST['userMsg'])){}