How to develop Projects (BMS)
Using PHP and Mysql Part 11
✅ Module 3: Blood Request and Donation Management
🎯 Purpose:
Allow requesters to request blood and match available donors; allow donors to view and respond to requests.
✅ Functionalities to Implement:
For Requesters:
- 🩸 Submit a blood request (blood group, quantity, urgency, location, etc.)
- 📋 View status of blood requests (Pending, Approved, Fulfilled, Cancelled)
- ❌ Cancel a blood request (if no longer needed)
For Donors:
- 👀 View nearby blood requests (based on blood group and location)
- ✅ Accept a blood request (mark themselves available)
- 🛑 Decline or ignore requests
📁 Suggested File/Folder Structure:
/blood_requests/
├── request_form.php # Blood request form
├── request_list.php # List of all requests (admin/requester view)
├── my_requests.php # View own requests (requester)
├── available_requests.php # View requests (for matching donors)
├── respond_request.php # Donor responds to a request
🧮 Suggested Database Tables:
1. blood_requests
CREATE TABLE blood_requests (
id INT AUTO_INCREMENT PRIMARY KEY,
requester_id INT NOT NULL,
blood_group VARCHAR(10) NOT NULL,
quantity INT NOT NULL,
urgency ENUM('Low', 'Medium', 'High') DEFAULT 'Medium',
location VARCHAR(255) NOT NULL,
status ENUM('Pending', 'Approved', 'Fulfilled', 'Cancelled') DEFAULT 'Pending',
requested_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (requester_id) REFERENCES users(id)
);
2. donor_responses
CREATE TABLE donor_responses (
id INT AUTO_INCREMENT PRIMARY KEY,
request_id INT NOT NULL,
donor_id INT NOT NULL,
response ENUM('Accepted', 'Declined') DEFAULT 'Accepted',
response_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (request_id) REFERENCES blood_requests(id),
FOREIGN KEY (donor_id) REFERENCES users(id)
);
💾 request_form.php
(Requesters submit blood requests)
<?php
include '../db_connect.php';
// database connection
if (isset($_POST['submit']))
{
$requester_id = 1; // Example user ID, replace with
$_SESSION['user_id']
$blood_group = $_POST['blood_group'];
$quantity = $_POST['quantity'];
$urgency = $_POST['urgency'];
$location = $_POST['location'];
$sql = "INSERT INTO blood_requests
(requester_id, blood_group, quantity, urgency, location)
VALUES ('$requester_id', '$blood_group',
'$quantity', '$urgency', '$location')";
if ($conn->query($sql) === TRUE) {
echo "Blood request submitted
successfully!";
} else {
echo "Error: " . $conn->error;
}
}
?>
<form method="POST">
Blood Group: <input type="text"
name="blood_group" required><br>
Quantity: <input type="number"
name="quantity" required><br>
Urgency:
<select name="urgency">
<option value="Low">Low</option>
<option value="Medium">Medium</option>
<option value="High">High</option>
</select><br>
Location: <input type="text"
name="location" required><br>
<button type="submit" name="submit">Submit
Request</button>
</form>
📋 request_list.php
(Admin/Requester view all requests)
<?php
include '../db_connect.php';
$result = $conn->query("SELECT
* FROM blood_requests");
echo "<h3>All
Blood Requests</h3>";
echo "<table border='1'><tr><th>ID</th><th>Blood Group</th><th>Quantity</th><th>Urgency</th><th>Status</th></tr>";
while ($row = $result->fetch_assoc())
{
echo "<tr>
<td>{$row['id']}</td>
<td>{$row['blood_group']}</td>
<td>{$row['quantity']}</td>
<td>{$row['urgency']}</td>
<td>{$row['status']}</td>
</tr>";
}
echo "</table>";
?>
👤 my_requests.php
(Requester views their requests)
<?php
include '../db_connect.php';
$requester_id = 1; // Replace with logged-in user id
$result = $conn->query("SELECT * FROM blood_requests WHERE requester_id = '$requester_id'");
echo "<h3>My
Blood Requests</h3>";
echo "<table border='1'><tr><th>ID</th><th>Blood Group</th><th>Status</th><th>Action</th></tr>";
while ($row = $result->fetch_assoc())
{
echo "<tr>
<td>{$row['id']}</td>
<td>{$row['blood_group']}</td>
<td>{$row['status']}</td>
<td>
<a
href='cancel_request.php?id={$row['id']}'>Cancel</a>
</td>
</tr>";
}
echo "</table>";
?>
💡 available_requests.php
(Donors view available requests)
<?php
include '../db_connect.php';
$donor_blood_group = 'A+';
// Replace with actual donor's blood group
$location = 'CityName'; // Replace with actual donor's location
$result = $conn->query("SELECT
* FROM blood_requests
WHERE blood_group = '$donor_blood_group'
AND location = '$location'
AND status = 'Pending'");
echo "<h3>Available
Blood Requests</h3>";
echo "<table border='1'><tr><th>ID</th><th>Quantity</th><th>Urgency</th><th>Action</th></tr>";
while ($row = $result->fetch_assoc())
{
echo "<tr>
<td>{$row['id']}</td>
<td>{$row['quantity']}</td>
<td>{$row['urgency']}</td>
<td>
<a
href='respond_request.php?id={$row['id']}&response=Accepted'>Accept</a>
|
<a
href='respond_request.php?id={$row['id']}&response=Declined'>Decline</a>
</td>
</tr>";
}
echo "</table>";
?>
🔁 respond_request.php
(Donor responds to a request)
<?php
include '../db_connect.php';
if (isset($_GET['id'])
&& isset($_GET['response'])) {
$request_id = $_GET['id'];
$donor_id = 2; // Replace with actual logged-in donor ID
$response = $_GET['response'];
$sql = "INSERT INTO donor_responses
(request_id, donor_id, response)
VALUES ('$request_id', '$donor_id', '$response')";
if ($conn->query($sql) === TRUE) {
if ($response == 'Accepted') {
$conn->query("UPDATE
blood_requests SET status='Approved' WHERE id='$request_id'");
}
echo "Response recorded!";
} else {
echo "Error: " . $conn->error;
}
}
?>
⚙️ Extra: cancel_request.php (Cancel
blood request)
<?php
include '../db_connect.php';
if (isset($_GET['id'])) {
$request_id = $_GET['id'];
$conn->query("UPDATE blood_requests
SET status='Cancelled' WHERE id='$request_id'");
echo "Request cancelled!";
}
?>