2012-12-15 25 views
0

可能重複:
How can I convert ereg expressions to preg in PHP?
Escape string to use in mail()形式不發送,函數eregi()已過時

我想送我的形式,但我得到這個錯誤...

棄用:函數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 = '[email protected]'; // 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>'; 
    } 

} 
+0

你爲什麼要使用(strpos( 「\ r」,用strtolower($名))|| strpos( 「\ n」,用strtolower($名)))'mysql_real_escape_string( )'發送郵件的東西? –

+0

我只會使用'urlencode()'或其他東西,這也會照顧換行符。 –

回答

1

它返回比eregi略有不同的值,但如果我在讀你的代碼正確,您應該能夠使用對strpos()函數來確定是否在字符串中存在串。 Eregi忽略大小寫,因此您可能必須將它與strtolower($ string)調用結合使用。

事情是這樣的:如果

+0

好吧,我試過你說的$ name和$ mail_from。發送表單時我不會收到任何錯誤,並且在發送表單後我會進行驗證。但是當我查看我的電子郵件時,我沒有收到郵件。 –

+0

你確定PHP的'mail()'函數一般可以在你的服務器上運行嗎? – Barmar

+0

如果我在本地發送它,它不會工作嗎?或者我必須連接到服務器?我不確定這部分。 –