表单未发送,不推荐使用函数 eregi() [重复]

Posted

技术标签:

【中文标题】表单未发送,不推荐使用函数 eregi() [重复]【英文标题】:Form not sending, function eregi() is deprecated [duplicate] 【发布时间】:2012-12-03 02:35:28 【问题描述】:

可能重复:How can I convert ereg expressions to preg in php?Escape string to use in mail()

我正在尝试发送我的表单,但我收到此错误...

不推荐使用:不推荐使用函数eregi()

我尝试用 preg_match() 替换它,但没有成功。这是我的代码:

$all_valid = $name_valid = $email_valid = $comments_valid = true;

if (isset($_POST['submit']))   

    if ($_POST['name'] == '') 
        $all_valid = $name_valid = false;
    

    if ($_POST['comments'] == '') 
        $all_valid = $comments_valid = false;
    

    if (!$validator->check_email_address($_POST['email'])) 
        $all_valid = $email_valid = false;
    

    if ($all_valid) 
        //  ####    NO PROBLEMS FOUND - PROCESS THE FORM DATA HERE
        $mail_to = 'cat30@hotmail.com'; //  recipient address
        $subject = "Email from website";    //  email message subject line
        $name = mysql_real_escape_string(trim($_POST['name'])); //  sanitize the name
        if (eregi("\r",$name) || eregi("\n",$name))    //  avoid email header injection
            die();
        
        $mail_from = mysql_real_escape_string(trim($_POST['email']));   //  sanitize their email address
        if (eregi("\r",$mail_from) || eregi("\n",$mail_from))  //  avoid email header injection
            die();
        
        $comments = htmlspecialchars(trim($_POST['comments'])); //  convert HTML characters into entities

        $headers = 'From: '. $mail_from. "\r\n";
        mail($mail_to, $subject, $comments, $headers);

        $response = '<h2>Thanks for contacting us, will get back to you soon</h2>';
    


【问题讨论】:

你为什么使用mysql_real_escape_string()来发送邮件? 我只会使用 urlencode() 或其他东西,它也会处理换行符。 【参考方案1】:

它返回的值与 eregi 略有不同,但如果我正确阅读了您的代码,您应该能够使用 strpos() 函数来确定字符串中是否存在子字符串。 Eregi 会忽略大小写,因此您可能还必须将其与 strtolower($string) 调用结合使用。

类似这样的: if (strpos("\r",strtolower($name)) || strpos("\n",strtolower($name)))

【讨论】:

好的,我用 $name 和 $mail_from 尝试了你所说的。我在发送表单时没有收到任何错误,并且在发送表单后我得到了验证。但是当我检查我的电子邮件时,我没有收到邮件。 您是否确认 PHP mail() 函数通常可以在您的服务器上运行? 本地发不行吗?还是我必须连接到服务器?我不确定这部分。

以上是关于表单未发送,不推荐使用函数 eregi() [重复]的主要内容,如果未能解决你的问题,请参考以下文章

某些表单输入未通过 GET / POST 发送 [重复]

PHP 函数 eregi()

将项目从PC迁移到其他PC后,错误在codeigniter中不推荐使用each()函数[重复]

简单表单不通过_POST发送数据[重复]

实验吧-PHP大法-eregi()函数

可以打印出值,但在 setState 中它的“未定义”[重复]