我刚刚为我的网站做了一个php联系表格,但是我得到的是:
https://gyazo.com/2f3c4faa5bc253a6e3ff94d78214867d
我正在使用的代码是这样:
<?php
include('***Contains private stuff***.php');
//Send mail function
function send_mail($to,$subject,$message,$headers){
return @mail($to,$subject,$message,$headers);
}
if($_POST) {
$to = "***PRIVATE MAIL***"; // Your email here
$subject = 'Message from my website'; // Subject message here
//MySQL
$query = "INSERT INTO contact (name, email, subject, message) VALUES ('$name', '$email', '$subject', '$message')";
$result = mysqli_query($connection, $query);
//Sanitize input data, remove all illegal characters
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
$email = filter_var($_POST['mail'], FILTER_SANITIZE_EMAIL);
$subject = filter_var($_POST['subject'], FILTER_SANITIZE_STRING);
$message = filter_var($_POST['message'], FILTER_SANITIZE_STRING);
//Send Mail
$headers = 'From: ' . $email .''. "\r\n".
'Reply-To: '.$email.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$sent = send_mail($to, $subject, $message . "\r\n\n" .'Name: '.$name. "\r\n" .'Email: '.$email, $headers);
if (! $sent) {
// log the error
error_log('Mail Error: Message to ' . $to . ' wasn\'t sent');
}
}
?>
我只想删除它,但无法真正解决问题。 链接到我用于测试和实时查看的朋友网站。
http://thomasmaneschijn.com/lukas/
您也应该能够在网站上看到我的html代码。 我之所以将“包含”部分标记出来的原因是,因为有些密码和其他内容我不想泄漏。
答案 0 :(得分:2)
您的$to
不是有效的电子邮件。
编辑
为了更好地理解您的错误,至少在开发过程中,我将执行以下操作:
if(@mail($to,$subject,$message,$headers)){
echo json_encode(array('info' => 'success', 'msg' => "Your message has been sent. Thank you!"));
} else {
echo json_encode(array('info' => 'error', 'msg' => "Error, your message hasn't been sent", 'error_info' => error_get_last()['message']));
}
看看是否可行。
您还可以使用它来更好地了解您的错误-
$sendMail = mail($to,$subject,$message,$headers);
if(!$sendMail) { $errorMessage = error_get_last()['message']; }
答案 1 :(得分:2)
service providers
返回@mail()
,如果邮件已被成功接受传递,否则返回TRUE
。 docs
所以我想您在传递给函数的参数方面遇到了一些问题。
考虑第一个FALSE
,如果没有if
,则实际上您将不会定义这两个变量。
另外,由于$_POST
函数只是在文件末尾调用,因此将在访问页面时触发它。
因此,我的猜测是,当您访问页面时send_mail()
变量中没有任何内容时,您将错过$_POST
所需的参数。进入send_email
答案 2 :(得分:2)
您的代码中几乎没有问题:
问题1, 您的代码已经可以进行SQL注入了,您必须使用SQL Injection来阻止代码。
问题2, 您在呼叫send_mail()
时不使用任何检查,需要将其移至if($_POST)
检查中,否则,它将将在每次刷新页面时执行。
问题3, 您的INSERT查询位置错误,您在此查询之前在哪里定义了这些变量VALUES ('$name', '$email', '$subject', '$message')
?
根据您的屏幕截图,如果将代码移动如下,您将仅由于send_mail()
方法而得到json响应
// Move `send_mail()` method here
if($_POST) {
// Your Variables
// Your Query / MYSQL / suggest you to use PDO here.
// Your method calling
}
一些有用的链接:
How can I prevent SQL injection in PHP?
Are PDO prepared statements sufficient to prevent SQL injection?
始终在本地环境上使用error_reporting()
。
答案 3 :(得分:1)
cd /etc/init.d
chmod +x example
update-rc.d example defaults
update-rc.d example enable