Complaint Page
<?php
// DB CONNECTION (adjust to your setup)
require_once 'db.php';
// -----------------------------
// HANDLE COMPLAINT SUBMISSION
// -----------------------------
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['cp_name'])) {
$ref = 'STA-' . date('Y') . '-' . strtoupper(substr(md5(uniqid()), 0, 6));
$stmt = $pdo->prepare("
INSERT INTO complaints
(ref_number, name, phone, email, category, location, subject, description, status, created_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, 'Pending', NOW())
");
$stmt->execute([
$_POST['cp_name'],
$_POST['cp_phone'],
$_POST['cp_email'],
$_POST['cp_category'],
$_POST['cp_location'],
$_POST['cp_subject'],
$_POST['cp_description']
]);
$success_msg = "β
Complaint submitted! Reference: $ref";
}
// -----------------------------
// ADMIN ACTIONS
// -----------------------------
if (isset($_POST['update_complaint_status'])) {
$allowed = ['Pending', 'In Progress', 'Resolved'];
if (in_array($_POST['new_status'], $allowed)) {
$stmt = $pdo->prepare("UPDATE complaints SET status=? WHERE id=?");
$stmt->execute([$_POST['new_status'], intval($_POST['cid'])]);
}
header("Location: ?page=complaint&msg=Status updated");
exit;
}
if (isset($_POST['delete_complaint'])) {
$stmt = $pdo->prepare("DELETE FROM complaints WHERE id=?");
$stmt->execute([intval($_POST['cid'])]);
header("Location: ?page=complaint&msg=Deleted");
exit;
}
?>
<!-- ========================= -->
<!-- COMPLAINT PAGE UI -->
<!-- ========================= -->
<section class="page">
<div class="wrap">
<h2>π’ File a Complaint</h2>
<?php if (!empty($success_msg)) echo "<p style='color:green'>$success_msg</p>"; ?>
<!-- TRACKING -->
<div>
<h3>π Track Complaint</h3>
<input type="text" id="track-input" placeholder="Enter Ref Number">
<button onclick="trackComplaint()">Track</button>
<div id="track-result"></div>
</div>
<hr>
<!-- FORM -->
<form method="POST">
<h3>Submit Complaint</h3>
<input required type="text" name="cp_name" placeholder="Full Name"><br><br>
<input required type="text" name="cp_phone" placeholder="Phone"><br><br>
<input type="email" name="cp_email" placeholder="Email"><br><br>
<select required name="cp_category">
<option value="">Select Category</option>
<option>Vehicle Violation</option>
<option>Tester Misconduct</option>
<option>Center Issue</option>
<option>Corruption</option>
</select><br><br>
<input type="text" name="cp_location" placeholder="Location"><br><br>
<input required type="text" name="cp_subject" placeholder="Subject"><br><br>
<textarea required name="cp_description" placeholder="Description"></textarea><br><br>
<button type="submit">Submit</button>
</form>
<hr>
<!-- ADMIN LIST -->
<h3>Admin: Manage Complaints</h3>
<table border="1" cellpadding="10">
<tr>
<th>Ref</th>
<th>Name</th>
<th>Category</th>
<th>Status</th>
<th>Action</th>
</tr>
<?php
$rows = $pdo->query("SELECT * FROM complaints ORDER BY id DESC")->fetchAll();
foreach ($rows as $r):
?>
<tr>
<td><?= $r['ref_number'] ?></td>
<td><?= $r['name'] ?></td>
<td><?= $r['category'] ?></td>
<td><?= $r['status'] ?></td>
<td>
<!-- UPDATE -->
<form method="POST" style="display:inline">
<input type="hidden" name="cid" value="<?= $r['id'] ?>">
<select name="new_status">
<option>Pending</option>
<option>In Progress</option>
<option>Resolved</option>
</select>
<button name="update_complaint_status">Update</button>
</form>
<!-- DELETE -->
<form method="POST" style="display:inline">
<input type="hidden" name="cid" value="<?= $r['id'] ?>">
<button name="delete_complaint" onclick="return confirm('Delete?')">Delete</button>
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
</section>
<!-- ========================= -->
<!-- TRACKING SCRIPT -->
<!-- ========================= -->
<script>
function trackComplaint() {
let ref = document.getElementById('track-input').value;
fetch('track.php?ref=' + ref)
.then(res => res.json())
.then(data => {
if(data.status){
document.getElementById('track-result').innerHTML =
"Status: <b>" + data.status + "</b><br>" +
"Subject: " + data.subject;
} else {
document.getElementById('track-result').innerHTML = "Not found";
}
});
}
</script>