【发布时间】:2012-06-07 18:59:51
【问题描述】:
我是 PHP 初学者,刚开始创建自己的网站。我遇到了一个问题,mail() 无缘无故返回 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 = "auto@alemc.org";
$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 发送邮件更好的方法?
【问题讨论】:
-
你是在本地主机上运行它吗?即 WAMP 还是 XAMP?
-
当服务器的后端邮件发送服务未运行或未正确配置时,我通常会收到 mail() 错误。因为看起来你已经正确设置了 PHP,所以我相信是这样的。
-
你真的应该在你的代码中对 SQL 注入做一些事情,否则你有时会在宇宙中炸出一个洞......
-
我在本地主机上运行它。我是这方面的初学者。有没有关于设置 SMTP 的教程可以参考?
标签: php