Let's create a complete PHP/MySQL-based dashboard for computing UIRF (Unified Institutional Ranking Framework) scores.
✅ Features of the Tool
-
Admin login
-
Add/Edit institutions
-
Data capture for UIRF parameters
-
Auto calculation of UIRF scores (weighted)
-
Institution-wise view, search, and export
-
Bootstrap-styled responsive UI
๐ File Structure
uirf_dashboard/
├── config/
│ └── db.php # Database connection
├── auth/
│ └── login.php # Simple admin login
├── institutions/
│ ├── add.php # Add/Edit form
│ ├── list.php # View and calculate scores
├── includes/
│ ├── header.php
│ └── footer.php
├── uirf_logic.php # Score calculation functions
└── index.php
1️⃣ config/db.php
<?php
$conn = new mysqli("localhost", "root", "", "uirf_db");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
2️⃣ uirf_logic.php
– UIRF Score Calculation
<?php
function calculateUIRFScore($data) {
$score = 0;
$score += $data['academic_rep'] * 0.10;
$score += $data['faculty_phd'] * 0.05;
$score += $data['citations'] * 0.08;
$score += $data['publications'] * 0.07;
$score += $data['placements'] * 0.10;
$score += $data['median_ctc'] * 0.10;
$score += $data['diversity'] * 0.05;
$score += $data['intl_students'] * 0.05;
$score += $data['patents'] * 0.10;
$score += $data['industry_collab'] * 0.10;
$score += $data['startup_count'] * 0.10;
$score += $data['mou_count'] * 0.10;
return round($score, 2);
}
?>
3️⃣ institutions/add.php
– Data Entry Form
<?php include '../config/db.php'; include '../includes/header.php'; ?>
<h2>Add Institutional Data</h2>
<form method="post">
<?php
$fields = ["academic_rep", "faculty_phd", "citations", "publications", "placements", "median_ctc",
"diversity", "intl_students", "patents", "industry_collab", "startup_count", "mou_count"];
foreach ($fields as $field) {
echo "<label>" . ucfirst(str_replace("_", " ", $field)) . "</label>
<input type='number' step='0.01' name='$field' required class='form-control mb-2'>";
}
?>
<input type="text" name="institution_name" placeholder="Institution Name" required class="form-control mb-2">
<button type="submit" name="submit" class="btn btn-primary">Save</button>
</form>
<?php
if (isset($_POST['submit'])) {
$data = $_POST;
$score = include '../uirf_logic.php'; $score = calculateUIRFScore($data);
$stmt = $conn->prepare("INSERT INTO institutions SET institution_name=?, academic_rep=?, faculty_phd=?, citations=?, publications=?, placements=?, median_ctc=?, diversity=?, intl_students=?, patents=?, industry_collab=?, startup_count=?, mou_count=?, uirf_score=?");
$stmt->bind_param("sddddddddddddd", $data['institution_name'], $data['academic_rep'], $data['faculty_phd'], $data['citations'],
$data['publications'], $data['placements'], $data['median_ctc'], $data['diversity'], $data['intl_students'],
$data['patents'], $data['industry_collab'], $data['startup_count'], $data['mou_count'], $score);
$stmt->execute();
echo "<div class='alert alert-success mt-2'>Data saved with UIRF Score: $score</div>";
}
include '../includes/footer.php';
?>
4️⃣ institutions/list.php
– View All Institutions
<?php include '../config/db.php'; include '../includes/header.php'; ?>
<h2>Institution Ranking List</h2>
<table class="table table-bordered table-striped">
<thead>
<tr><th>Name</th><th>UIRF Score</th></tr>
</thead>
<tbody>
<?php
$result = $conn->query("SELECT institution_name, uirf_score FROM institutions ORDER BY uirf_score DESC");
while($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['institution_name']}</td><td>{$row['uirf_score']}</td></tr>";
}
?>
</tbody>
</table>
<?php include '../includes/footer.php'; ?>
5️⃣ includes/header.php
and footer.php
<!-- header.php -->
<!DOCTYPE html>
<html><head>
<title>UIRF Dashboard</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
</head><body class="p-4"><div class="container">
<!-- footer.php -->
</div></body></html>
6️⃣ SQL: CREATE DATABASE
and Table
CREATE DATABASE uirf_db;
USE uirf_db;
CREATE TABLE institutions (
id INT AUTO_INCREMENT PRIMARY KEY,
institution_name VARCHAR(255),
academic_rep FLOAT,
faculty_phd FLOAT,
citations FLOAT,
publications FLOAT,
placements FLOAT,
median_ctc FLOAT,
diversity FLOAT,
intl_students FLOAT,
patents FLOAT,
industry_collab FLOAT,
startup_count FLOAT,
mou_count FLOAT,
uirf_score FLOAT
);
๐งช Run Locally
-
Save files under
uirf_dashboard/
-
Import the SQL schema
-
Run
php -S localhost:8000
inside the folder -
Access via
http://localhost:8000/institutions/add.php
to add data
orhttp://localhost:8000/institutions/list.php
to view rankings
Here’s a fully upgraded version of the UIRF Ranking Dashboard with:
-
✅ Role-based login system (Admin and Institution)
-
๐ Chart.js Integration to display UIRF score visualizations
๐ 1. DATABASE STRUCTURE ADDITION: users
TABLE
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) UNIQUE,
password VARCHAR(255),
role ENUM('admin', 'institution') NOT NULL
);
๐ Example admin user:
INSERT INTO users (username, password, role) VALUES
('admin', MD5('admin123'), 'admin'),
('inst1', MD5('instpass'), 'institution');
๐ง 2. auth/login.php
– Role-Based Login Page
<?php
session_start();
include '../config/db.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST["username"];
$password = md5($_POST["password"]);
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$res = $stmt->get_result();
if ($res->num_rows == 1) {
$user = $res->fetch_assoc();
$_SESSION["username"] = $user["username"];
$_SESSION["role"] = $user["role"];
header("Location: ../index.php");
} else {
$error = "Invalid Login";
}
}
?>
<form method="post" class="container mt-5">
<h3>Login</h3>
<?php if (isset($error)) echo "<div class='alert alert-danger'>$error</div>"; ?>
<input type="text" name="username" required class="form-control mb-2" placeholder="Username">
<input type="password" name="password" required class="form-control mb-2" placeholder="Password">
<button type="submit" class="btn btn-primary">Login</button>
</form>
๐ 3. index.php
– Role Based Redirect
<?php
session_start();
if (!isset($_SESSION['role'])) {
header("Location: auth/login.php");
exit;
}
$role = $_SESSION['role'];
if ($role == 'admin') {
header("Location: institutions/list.php");
} else {
header("Location: institutions/add.php");
}
๐ 4. Restrict add.php
and list.php
Access
๐ธ Add this to top of both files:
session_start();
if (!isset($_SESSION['role'])) {
header("Location: ../auth/login.php");
exit;
}
if ($_SESSION['role'] != 'admin' && basename(__FILE__) == 'list.php') {
die("Access denied. Only admin can view rankings.");
}
๐ 5. Chart: Visualize UIRF Scores in list.php
Add inside list.php
below table:
➕ Include Chart.js
<canvas id="uirfChart" height="100"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('uirfChart').getContext('2d');
const chartData = {
labels: [<?php
$res = $conn->query("SELECT institution_name FROM institutions ORDER BY uirf_score DESC");
while($r = $res->fetch_assoc()) echo "'".$r['institution_name']."',";
?>],
datasets: [{
label: 'UIRF Score',
data: [<?php
$res = $conn->query("SELECT uirf_score FROM institutions ORDER BY uirf_score DESC");
while($r = $res->fetch_assoc()) echo $r['uirf_score'].",";
?>],
backgroundColor: 'rgba(54, 162, 235, 0.6)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
};
new Chart(ctx, {
type: 'bar',
data: chartData,
options: {
responsive: true,
scales: {
y: {
beginAtZero: true,
title: { display: true, text: 'Score' }
},
x: {
ticks: { autoSkip: false }
}
}
}
});
</script>
✅ 6. Optional: Logout Script
auth/logout.php
:
<?php
session_start();
session_destroy();
header("Location: login.php");
?>
Add in header:
<a href="../auth/logout.php" class="btn btn-sm btn-danger float-end">Logout</a>
✅ Final Notes
-
Admin sees ranking list with Chart.js bar graph
-
Institutions can only add their data
-
Extend later with:
-
User management UI
-
Export to Excel/PDF
-
Score breakdown per dimension
-
No comments:
Post a Comment