2012-06-07 70 views
1

我是一名PHP初學者,我剛開始創建自己的網站。我遇到了一個問題,即mail()無理由返回FALSE。PHP郵件返回false

我的想法是實現密碼重置機制。當用戶輸入他的電子郵件時,HTML表單會將信息傳遞給php腳本,並且php腳本將執行驗證並通過隨機生成的密碼重置密碼,隨後將此臨時密碼發送給用戶電子郵件。以下是我的代碼:

<?php 
    session_start(); 
    $email = $_POST['email']; 

    function random_string_generator ($character_options, $length_of_generated_string) 
    { 
     $random_string = ""; 

     //count the number of characters available for picking 
     $num_valid_charactor = strlen($character_options); 

     for ($i = 0 ; $i < $length_of_generated_string; $i++){ 
      $random_pick = mt_rand(1, $num_valid_charactor); 
      $random_char = $character_options[$random_pick-1]; 
      $random_string .= $random_char; 
     } 

     return $random_string; 
    } 

    function createSalt() 
    { 
     $string = md5(uniqid(rand(), true)); 
     return substr($string, 0, 3); 
    } 

    $dbhost = 'localhost'; 
    $dbname = 'my_db'; 
    $dbuser = 'root'; 
    $dbpass = ''; 
    $conn = mysql_connect($dbhost, $dbuser, $dbpass); 

    mysql_select_db($dbname, $conn); 

    $query = "SELECT password, salt FROM users WHERE email = '$email';"; 
    $result = mysql_query($query); 

    if(mysql_num_rows($result) < 1) 
    { //no such user exists 
     $_SESSION['error'] = '1'; 
     $_SESSION['message'] = 'user does not exist'; 
     header("Location: Forgot_password.php"); 
    } 
    else 
    { 
     $random_pick_options = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
     $temporary_password = random_string_generator($random_pick_options, 12); 

     $hash = hash('sha256', $temporary_password); 

     $salt = createSalt(); 
     $hash = hash('sha256', $salt . $hash);  

     $query = "UPDATE users set password=$hash, salt=$salt where email=$email;"; 
     mysql_query($query); 

     //Email user the temporary password 
     $email_from = "[email protected]"; 
     $email_to = $email; 
     $message = "Dear user,\n\n your temporary passowrd is: " . $temporary_password . "\n This is an auto-generated email. Please do not reply to this email address.\n\n ALEMC\n"; 

     mail($email_to, "ALEMC: Password Reset", $message, "From: $email_from"); 

     $_SESSION['message'] = "password reset"; 
     header("Location: Login_form.php"); 
    }    
?> 

任何想法是什麼錯?或者有沒有更好的方式來發送郵件然後使用PHP?

+0

你在localhost上運行這個嗎?即WAMP或XAMP? –

+3

當服務器的後端郵件發送服務未運行或未正確配置時,我主要收到有關郵件()的錯誤。因爲看起來你已經正確設置了PHP,所以我相信是這樣。 – SamT

+1

你應該真的對SQL注入一些東西,或者你會在宇宙中打一個洞...... – Polygnome

回答

2

你的php設置肯定有問題。我個人喜歡使用PHPMailer從PHP發送電子郵件時,你有更多的選擇。

+0

PHPMailer的+1 –

0

我個人建議你使用像swiftmailer(http://swiftmailer.org/),它只是工作。看看你的PHP郵件/服務器配置是如何設置的。並且做一些事情來保護自己免受SQL注入。