Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忘记密码表单-PHP_Php_Mysql_Database_Email - Fatal编程技术网

忘记密码表单-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)
。这并不能回答这个问题。要评论或要求作者澄清,请在他们的帖子下方留下评论。实际上,他说“它出现了一个空白屏幕,什么也不做”,还有“有人能看到错误吗?”空白屏幕的原因是一个语法错误,我想这是我在这里指出的一个。杰姆斯的答案显然比我的好,但我不明白你批评的意思。