我正在查看php显示某些内容的问题

时间:2019-02-26 14:09:34

标签: php

我刚刚为我的网站做了一个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代码。 我之所以将“包含”部分标记出来的原因是,因为有些密码和其他内容我不想泄漏。

4 个答案:

答案 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(),如果邮件已被成功接受传递,否则返回TRUEdocs

所以我想您在传递给函数的参数方面遇到了一些问题。 考虑第一个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

PHP error_log