2012-09-28 31 views
1

我想製作一個表格,從垃圾郵件安全,併發送一個簡單的電子郵件給註冊人。PHP安全電子郵件阻止虛假的電子郵件,但讓註冊通過

我對PHP相當陌生,im面臨的問題是,當表單在電子郵件字段中提交了一個錯誤的電子郵件地址時,它會顯示錯誤消息,指出電子郵件無效,但仍允許註冊通過將其添加到數據庫。

這裏是代碼

function spamcheck($field) { 
    // filter_var() sanitizes the e-mail 
    // address using FILTER_SANITIZE_EMAIL 
    $field = filter_var($field, FILTER_SANITIZE_EMAIL); 

    // filter_var() validates the e-mail 
    // address using FILTER_VALIDATE_EMAIL 
    if(filter_var($field, FILTER_VALIDATE_EMAIL)) { 
     return TRUE; 
    } 
    else { 
     return FALSE; 
    } 
} 

if(isset($_REQUEST['email'])) { 
    // if "email" is filled out, proceed 
    // check if the email address is invalid 
    $mailcheck = spamcheck($_REQUEST['email']); 
    if ($mailcheck==FALSE) { 
     die("<font color='red'>Your email address is invalid, please try again.</font><br/><br/><form><INPUT TYPE='button' VALUE='Back' onClick='history.go(-1);return true;'></form>"); 
    } 
    else {//send email 
     $to = "$email"; 
     $from = "[email protected]"; 
     $message = "Just a message"; 
     $subject = "Subject"; 

     mail($to, $message, $subject, "From: $from", "-f$from"); 
    } 
} 

任何幫助將不勝感激。

+1

將其添加到數據庫的代碼未顯示,但它不會發送郵件 - 在這種情況下,請確保將註冊保存到數據庫的調用位於您發送郵件的部分。 – BugFinder

+0

嗨,感謝,電子郵件正在通過,代碼正好在它下面將它添加到數據庫中,我移動它(只是低於值)和相同的問題。 –

+0

它不能顯示「你的電子郵件地址是無效的」消息,併發送郵件 - 不遵循發佈的代碼 - 如果數據庫插入的代碼與郵件命令不同,那麼它會這樣做與垃圾郵件狀態無關。 – BugFinder

回答

0

也許這裏的問題,您的支票功能首先進行消毒電子郵件地址,然後驗證已清理的電子郵件。這意味着,檢查功能會檢查已清理過的電子郵件,但在該功能之外,您仍在使用無效的電子郵件。

所以要麼在檢查功能之外進行消毒,要麼在我看來更好,只驗證沒有消毒的輸入(更好地讓用戶知道他輸入的不正確,而不是嘗試修復它)。

function checkEmail($input) 
{ 
    return filter_var($input, FILTER_VALIDATE_EMAIL); 
} 

編輯:

實際上必須有另外一個問題,因爲在代碼執行die(...Your email address is invalid...)時,頁面的處理停止。我們需要看到寫入數據庫的代碼部分。

+0

$ insert = mysql_query(「INSERT INTO users(title,username,password,email,姓名,secondname,年齡, 國籍,town_city,language_to_study,how_to_study,language_level, 週一,週二,週三,週四,週五,週六,週日,電話, )VALUES( '$標題', '$用戶名' ,'$ password','$ email','$ firstname','$ secondname','$ age', '$ nationality','$ town_city','$ language_to_study','$ how_to_study','$ language_level ', '$ monday','$ tuesday','$ wednesday','$ thursday','$ friday','$星期六','$ sunday','$ telephone',)「 ); 功能spamcheck($字段) –

+0

希望它可讀,對不起 –

+0

@Paul Meadows - 所以你插入新的用戶,然後再測試電子郵件地址?該查詢只能在**驗證郵件成功後執行**。查詢應該在同一個地方,你可以調用'mail()'函數。 – martinstoeckli

0

首先,打印Mailcheck看看它的說法。

die('Mail Check:'。$ mailcheck);

如果其分毫將其設置爲===

如果($ MAILCHECK ===假){

}

+0

感謝您的回覆,對不起,我是一個完整的新手,我應該把這個代碼的前面if($ mailcheck == FALSE){ die( –