忘记密码表单-PHP
我有这个密码用于忘记密码表单,但它不起作用,有人能看到错误吗?它只是出现一个空白屏幕,什么也不做。我什么都试过了,但都不能成功。谢谢忘记密码表单-PHP,php,mysql,database,email,Php,Mysql,Database,Email,我有这个密码用于忘记密码表单,但它不起作用,有人能看到错误吗?它只是出现一个空白屏幕,什么也不做。我什么都试过了,但都不能成功。谢谢 <?php $host="localhost"; // Host name $username="admin"; // Mysql username $password=""; // Mysql password $db_name="members"; // Database name $tbl_name="members"; // Tabl
<?php
$host="localhost"; // Host name
$username="admin"; // Mysql username
$password=""; // Mysql password
$db_name="members"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Define $myusername and $mypassword
$myemail=$_POST['myemail'];
$sql="SELECT * FROM $tbl_name WHERE email='$myemail'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
$email = $_P0ST['email'];
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
if($count==1){
$newpassword=createRandomPassword();
$encrypted_mypassword=md5($newpassword);
$sql="UPDATE members SET password= ('$encrypted_mypassword') WHERE email = ('$myemail')";
$run=mysqli_query($sql);
$to = "$myemail";
$subject = "Your Password";
$messages="Your password for accessing to our website \r\n";
$messages="Your password is $encrypted_mypassword \r\n";
$messages="Please change this password for security reasons. Thank you. \r\n";
$from = "info@.co.uk";
$headers = "From:" . $from;
mail($to,$subject,$messages,$headers);
echo "Mail Sent.";
除了应该使用预先准备好的语句,并且应该使用安全的方式来存储密码[即不是md5],$\u P0ST
应该是$\u POST
你能试试这个吗,$sql=“更新成员设置密码='$encrypted\u mypassword'其中email='myemail';
$run=mysql\u查询($sql)代码>。您使用了mysqli\u query
,这就是原因
$host="localhost"; // Host name
$username="admin"; // Mysql username
$password=""; // Mysql password
$db_name="members"; // Database name
$tbl_name="members"; // Table name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
// Define $myusername and $mypassword
$myemail=$_POST['myemail'];
$sql="SELECT * FROM $tbl_name WHERE email='$myemail'";
$result=mysql_query($sql);
// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
$email = $_POST['email'];
function createRandomPassword() {
$chars = "abcdefghijkmnopqrstuvwxyz023456789";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= 7) {
$num = rand() % 33;
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
if($count>0){
$newpassword=createRandomPassword();
$encrypted_mypassword=md5($newpassword);
$sql="UPDATE members SET password='$encrypted_mypassword' WHERE email = '$myemail' ";
$run=mysql_query($sql);
$to = "$myemail";
$subject = "Your Password";
$messages="Your password for accessing to our website \r\n";
$messages="Your password is $encrypted_mypassword \r\n";
$messages="Please change this password for security reasons. Thank you. \r\n";
$from = "info@.co.uk";
$headers = "From:" . $from;
mail($to,$subject,$messages,$headers);
echo "Mail Sent.";
}
$host=“localhost”//主机名
$username=“admin”//Mysql用户名
$password=“”;//Mysql密码
$db_name=“成员”;//数据库名称
$tbl_name=“成员”;//表名
//连接到服务器并选择数据库。
mysql_connect(“$host”、“$username”、“$password”)或die(“无法连接”);
mysql_select_db($db_name)或die(“无法选择db”);
//定义$myusername和$mypassword
$myemail=$_POST['myemail'];
$sql=“从$tbl\U名称中选择*,其中电子邮件='$myemail';
$result=mysql\u查询($sql);
//Mysql\u num\u行是计数表行
$count=mysql\u num\u行($result);
$email=$_POST['email'];
函数createRandomPassword(){
$chars=“abcdefghijkmnopqrstuvxyzo23456789”;
srand((双)微时间()*1000000);
$i=0;
$pass='';
而(i)(0元){
$newpassword=createRandomPassword();
$encrypted_mypassword=md5($newpassword);
$sql=“更新成员设置密码='$encrypted\u mypassword',其中电子邮件='$myemail';
$run=mysql\u查询($sql);
$to=“$myemail”;
$subject=“您的密码”;
$messages=“您访问我们网站的密码\r\n”;
$messages=“您的密码是$encrypted\u mypassword\r\n”;
$messages=“出于安全原因,请更改此密码。谢谢。\r\n”;
$from=”info@.co.uk";
$headers=“From:”.$From;
邮件($to、$subject、$messages、$headers);
回显“已发送邮件”;
}
这个大括号
if($count==1){
这家店从不关门
它只会出现一个空白屏幕,什么也不做
由于脚本末尾有一个回音,但是得到的是一个空白屏幕,没有消息,这很可能指向一个PHP错误(这将停止脚本,并且为什么会得到一个空白页面)
您需要访问错误日志文件,通常位于/var/log/apache2/error.log中。
在开发PHP时,您应该定期访问该文件,以检查PHP警告和通知中的错误、错误和问题
我怀疑这个错误只是缺少了这一点:
如果($count==1){
您可以用{
打开它,但不能用}
关闭它
将}
放在您的回显“已发送邮件”之后;
该问题将消失。只留下剩余问题:
在脚本末尾回显“echo”Mail Sent.;
”并不意味着该电子邮件已发送。某些地方可能出了问题,因此请检查电子邮件是否已发送,并回显与结果相关的声明
例如:
if (mail($to,$subject,$messages,$headers))
{
echo "Mail Sent.";
}
else
{
echo "Something went wrong";
}
你可以做得更好一点,但它给了你一个想法,因为仅仅回显“发送的电子邮件”是误导性的,你会相信脚本是有效的,即使有些东西失败了
您还需要阅读有关用户输入验证和Mysql清理的内容。因为在数据库中插入、选择或删除(任何内容)之前信任变量会带来非常真实的安全问题。
可以在此处找到起始阅读:
md5()
不再是加密密码的安全方法。有关主要原因以及当前最佳实践的想法,请参见此处,例如“crypt()
”:
警告您的代码易受sql注入攻击。–另外,将$email=$\u P0ST['email'];
更改为$email=$\u POST['email'];
它与“OMG!”中的O
相同,而不是zero
(仅举几个例子)。将其添加到页面顶部:ini\u集('display\u errors',1);错误报告(-1)
。这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论。实际上,他说“它出现了一个空白屏幕,什么也不做”,还有“有人能看到错误吗?”空白屏幕的原因是一个语法错误,我想这是我在这里指出的一个。杰姆斯的答案显然比我的好,但我不明白你批评的意思。