我正在学习php,现在我正在尝试制作简单的表单,提交时会将电子邮件发送到我的邮箱。我在本地PC上使用Vamp服务器。当我按下提交按钮时,它只是从PHP文件中打开下面的代码并将其显示在屏幕上。 没有其他行动,有人可以向我解释发生了什么,我做错了什么我只是想提交并查看我的gmail帐户上的邮件,所以我知道它的工作原理。 目录包括:form-page.html,form-to-mail-php和thank_you html。 在表单页面中,您有输入和提交,在下面的PHP代码中,它会将您重定向到感谢页面。
<?php
if(!isset($_POST['submit']))
{
//This page should not be accessed directly. Need to submit the form.
echo "error; you need to submit the form!";
}
$name = $_POST['name'];
$visitor_email = $_POST['email'];
$message = $_POST['message'];
//Validate first
if(empty($name)||empty($visitor_email))
{
echo "Name and email are mandatory!";
exit;
}
if(IsInjected($visitor_email))
{
echo "Bad email value!";
exit;
}
$email_from = 'l.lawliet46@gmail.com';//
$email_subject = "New Form submission";
$email_body = "You have received a new message from the user $name.\n".
"Here is the message:\n $message".
$to = "l.lawliet46@gmail.com";
$headers = "From: $email_from \r\n";
$headers .= "Reply-To: $visitor_email \r\n";
//Send the email!
mail($to,$email_subject,$email_body,$headers);
//done. redirect to thank-you page.
header('Location: thank-you.html');
// Function to validate against any email injection attempts
function IsInjected($str)
{
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str))
{
return true;
}
else
{
return false;
}
}
?>
<form method="post" name="myemailform" action="form-to-email.php">
<p>
<label for='name'>Enter Name: </label><br>
<input type="text" name="name">
</p>
<p>
<label for='email'>Enter Email Address:</label><br>
<input type="text" name="email">
</p>
<p>
<label for='message'>Enter Message:</label> <br>
<textarea name="message"></textarea>
</p>
<input type="submit" name='submit' value="submit">
</form>
答案 0 :(得分:1)
首先,显示的代码而不是服务器执行的操作表示缺少PHP模块。尝试在新文件中运行简单的phpinfo()
脚本并查看返回的内容。例如,
<?php
phpinfo(INFO_MODULES);
?>
将输出您机器上安装的模块。使用WAMP,可以使用更简单的选项来修改php.ini文件。见下文,
您应该注意,其中包含PHP脚本的.html文件需要为PHP脚本修改PHP处理程序。见下文,
Wamp Server isn't executing php code
您可以使用$.ajax
将表单值从form-page.html传递到form-to-mail.php,以避免在上一步中修改PHP处理程序文件。
接下来,请考虑以下事项:
这是关于如何配置WAMP发送邮件的非常基础的教程。
http://roshanbh.com.np/2007/12/sending-e-mail-from-localhost-in-php-in-windows-environment.html
此外,您的Google帐户(我认为)不允许您在未经身份验证的情况下发送邮件。如果不是这样,请纠正我。
How to configure WAMP (localhost) to send email using Gmail?
在结账时,最好在输入中使用mysqli_real_escape_string()
。