重置PbootCMS使用者密碼

黄文Rex發表於2024-09-06
<?php
/**
 * @copyright (C)2016-2099 Hnaoyun Inc.
 *  重置PbootCMS使用者密碼
 */
// 設定字符集編碼、IE文件模式
header('Content-Type:text/html; charset=utf-8');
header('X-UA-Compatible:IE=edge,chrome=1');

// 設定中國時區
date_default_timezone_set('Asia/Shanghai');

// 引入配置檔案
$db = require __DIR__.'/config/database.php';


//執行修改	
if ($_POST) {
    
    // 資料庫配置檔案
    $db_path = __DIR__ . @$_POST['config'];
	
	//糾正路徑
	$db = require $db_path;
    
    // 檢查配置檔案是否存在
    if (! file_exists($db_path)) {
        die('資料庫配置檔案不存在,請檢查路徑是否填寫正常!');
    }
    
    // 要重置的使用者名稱
    $username = @$_POST['username'];
    
    // 要設定的密碼
    $password = @$_POST['password'];
    
    if (! $username) {
        exit('需要重置密碼的使用者名稱不能為空!');
    }
    
    if (! $password) {
        exit('請輸入需要設定的新密碼!');
    }
    
    // 修改密碼
    $sql = "UPDATE ay_user SET password='" . md5(md5($password)) . "' where username='$username'";
    if ($db['database']['type'] == 'sqlite' || $db['database']['type'] == 'pdo_sqlite') {
        $conn = get_sqlite(__DIR__ . $db['database']['dbname']);
        $result = $conn->exec($sql) or $conn->lastErrorMsg();
        if ($conn->changes()) {
            echo '恭喜您,重置成功!';
        } else {
            echo '不好意思,重置失敗,請核對使用者名稱!(sqlite)';
        }
    } else {
        $conn = get_mysql($db['database']);
        $result = $conn->query($sql) or mysqli_error($conn);
        if ($conn->affected_rows > 0) {
            echo '恭喜您,重置成功!';
        } else {
            echo '不好意思,重置失敗,請核對使用者名稱!(mysql)';
        }
    }
}

// 連線資料庫,接受資料庫連線引數,返回資料庫連線物件
function get_sqlite($dbfile)
{
    if (extension_loaded('SQLite3')) {
        try {
            $conn = new SQLite3($dbfile);
            $conn->busyTimeout(15 * 1000); // 設定繁忙延遲時間
        } catch (Exception $e) {
            die("讀取資料庫檔案失敗:" . iconv('gbk', 'utf-8', $e->getMessage()));
        }
    } else {
        error('未檢測到您伺服器環境的SQLite3資料庫擴充套件,請檢查php.ini中是否已經開啟該擴充套件!');
    }
    return $conn;
}

// 連線資料庫,接受資料庫連線引數,返回資料庫連線物件
function get_mysql($cfg)
{
    if (! extension_loaded('mysqli')) {
        die('未檢測到您伺服器環境的mysqli資料庫擴充套件,請檢查php.ini中是否已經開啟該擴充套件!');
    }
    // 最佳化>php5.3版本 在win2008以上伺服器連線
    if ($cfg['host'] == 'localhost') {
        $cfg['host'] = '127.0.0.1';
    }
    
    $conn = @new Mysqli($cfg['host'], $cfg['user'], $cfg['passwd'], $cfg['dbname'], $cfg['dbport']);
    if (mysqli_connect_errno()) {
        die("連線資料庫伺服器失敗:" . iconv('gbk', 'utf-8', mysqli_connect_error()));
    }
    $conn->set_charset('utf8'); // 設定編碼
    return $conn;
}

// 獲取使用者名稱
$sql = 'select username from ay_user';
if ($db['database']['type'] == 'sqlite' || $db['database']['type'] == 'pdo_sqlite') {
	$conn = get_sqlite(__DIR__ . $db['database']['dbname']);
	$result = $conn->query($sql) or $conn->lastErrorMsg();
	$rows = array();
	while (! ! $row = $result->fetchArray(1)) {
		if ($row) {
			$out = new \stdClass();
			foreach ($row as $key => $value) {
				$out->$key = $value;
			}
			$row = $out;
		}
		$rows[] = $row;
	}
} else {
	$conn = get_mysql($db['database']);
	$result = $conn->query($sql) or mysqli_error($conn);
	$rows = array();
	if ($conn->affected_rows > 0) {
		 while (! ! $objects = $result->fetch_object()) {
			$rows[] = $objects;
		}
	} 
}
?>

<!doctype html>
<html lang="zh">
<head>
	<meta charset="utf-8">
	<title>PbootCMS-密碼重置工具</title>
</head>
<body>

<form class="mb-5" action=""  method="post">
 <p>配置檔案:<input type="text" name="config" value="/config/database.php"  placeholder="請填寫資料庫配置檔案路徑"></p>
 <p>用 戶 名 :
 <select name="username">
 <?php
	foreach($rows as $k=>$v){
		echo "<option value='".$v->username."'>".$v->username."</option>";
	}
 ?>
 </select>
 </p>
 <p>新 密 碼 :<input type="text" name="password" placeholder="請輸入新密碼"> </p>
 <p><button type="submit" class="btn btn-info mb-2">提交</button></p>
</form>

</body>
</html>

相關文章