How to develop Projects(BDMS) Using PHP and Mysql Part 10

Rashmi Mishra
0

 



How to develop Projects Using PHP and Mysql 

Part 10

2️ Blood Donation Management System

Module 2: Requester Management

Purpose:
Handles registration and management of blood requesters, including their personal details and blood request information.


Functionalities:

 Register blood requesters with name, email, contact, blood group needed, and reason
 View list of all blood requesters
 Edit or update requester details
 Delete requester records if required


Project Structure:

/requesters/

── register.php           # Register a new requester

── edit_requester.php     # Edit existing requester details

── delete_requester.php   # Delete a requester

── requester_list.php     # Display list of all requesters


Database Table:

CREATE TABLE requesters (

    id INT AUTO_INCREMENT PRIMARY KEY,

    name VARCHAR(255) NOT NULL,

    email VARCHAR(255) UNIQUE NOT NULL,

    blood_group ENUM('A+', 'A-', 'B+', 'B-', 'O+', 'O-', 'AB+', 'AB-') NOT NULL,

    contact VARCHAR(15),

    reason TEXT,

    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);


register.php – Register a New Blood Requester

<?php

// Start session if needed

session_start();

 

// Include your DB connection file

include '../config/db_connect.php';

 

// Initialize variables

$name = $email = $contact = $blood_group = $reason = "";

$errors = [];

$success_message = "";

 

// Handle form submission

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // Sanitize inputs

    $name = trim(mysqli_real_escape_string($conn, $_POST['name']));

    $email = trim(mysqli_real_escape_string($conn, $_POST['email']));

    $contact = trim(mysqli_real_escape_string($conn, $_POST['contact']));

    $blood_group = $_POST['blood_group'];

    $reason = trim(mysqli_real_escape_string($conn, $_POST['reason']));

 

    // Validate fields

    if (empty($name)) $errors[] = "Name is required.";

    if (empty($email)) $errors[] = "Email is required.";

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = "Invalid email format.";

    if (empty($blood_group)) $errors[] = "Blood group is required.";

 

    // If no errors, insert into database

    if (empty($errors)) {

        $sql = "INSERT INTO requesters (name, email, contact, blood_group, reason)

                VALUES ('$name', '$email', '$contact', '$blood_group', '$reason')";

 

        if (mysqli_query($conn, $sql)) {

            $success_message = "Requester registered successfully!";

            // Clear form fields

            $name = $email = $contact = $blood_group = $reason = "";

        } else {

            $errors[] = "Error: " . mysqli_error($conn);

        }

    }

}

?>

 

<!DOCTYPE html>

<html>

<head>

    <title>Register Blood Requester</title>

    <style>

        body { font-family: Arial; background-color: #f8f8f8; padding: 20px; }

        .container {

            max-width: 600px;

            margin: auto;

            background: white;

            padding: 30px;

            border-radius: 10px;

            box-shadow: 0px 0px 10px #ccc;

        }

        input, select, textarea {

            width: 100%; padding: 10px; margin-bottom: 15px;

            border: 1px solid #ccc; border-radius: 5px;

        }

        button {

            background-color: #007bff; color: white;

            border: none; padding: 10px 20px;

            border-radius: 5px; cursor: pointer;

        }

        .success { color: green; margin-bottom: 10px; }

        .error { color: red; margin-bottom: 10px; }

    </style>

</head>

<body>

 

<div class="container">

    <h2>Register New Blood Requester</h2>

 

    <?php if (!empty($success_message)) echo "<p class='success'>$success_message</p>"; ?>

    <?php if (!empty($errors)) {

        foreach ($errors as $error) {

            echo "<p class='error'>⚠️ $error</p>";

        }

    } ?>

 

    <form method="post" action="">

        <label>Name:</label>

        <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" required>

 

        <label>Email:</label>

        <input type="email" name="email" value="<?php echo htmlspecialchars($email); ?>" required>

 

        <label>Contact:</label>

        <input type="text" name="contact" value="<?php echo htmlspecialchars($contact); ?>">

 

        <label>Blood Group:</label>

        <select name="blood_group" required>

            <option value="">--Select Blood Group--</option>

            <?php

                $groups = ['A+', 'A-', 'B+', 'B-', 'O+', 'O-', 'AB+', 'AB-'];

                foreach ($groups as $group) {

                    $selected = ($blood_group == $group) ? "selected" : "";

                    echo "<option value='$group' $selected>$group</option>";

                }

            ?>

        </select>

 

        <label>Reason for Request:</label>

        <textarea name="reason"><?php echo htmlspecialchars($reason); ?></textarea>

 

        <button type="submit">Register Requester</button>

    </form>

</div>

 

</body>

</html>


🧾 Features:

  • Clean input validation
  • Displays error or success messages
  • Inserts the requester into the requesters table
  • Uses dropdown for blood group
  • Responsive and styled with basic CSS


edit_requester.php – Edit Existing Requester Details

Note: This file assumes the requester's ID is passed via a query string like edit_requester.php?id=3


<?php

// Start session

session_start();

 

// Include DB connection

include '../config/db_connect.php';

 

// Initialize variables

$id = $_GET['id'] ?? null;

$name = $email = $contact = $blood_group = $reason = "";

$errors = [];

$success_message = "";

 

// Check if ID is valid

if (!$id || !is_numeric($id)) {

    die("Invalid requester ID.");

}

 

// Fetch existing requester details

$sql = "SELECT * FROM requesters WHERE id = $id";

$result = mysqli_query($conn, $sql);

 

if (mysqli_num_rows($result) == 1) {

    $requester = mysqli_fetch_assoc($result);

    $name = $requester['name'];

    $email = $requester['email'];

    $contact = $requester['contact'];

    $blood_group = $requester['blood_group'];

    $reason = $requester['reason'];

} else {

    die("Requester not found.");

}

 

// Handle update form submission

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    // Sanitize inputs

    $name = trim(mysqli_real_escape_string($conn, $_POST['name']));

    $email = trim(mysqli_real_escape_string($conn, $_POST['email']));

    $contact = trim(mysqli_real_escape_string($conn, $_POST['contact']));

    $blood_group = $_POST['blood_group'];

    $reason = trim(mysqli_real_escape_string($conn, $_POST['reason']));

 

    // Validation

    if (empty($name)) $errors[] = "Name is required.";

    if (empty($email)) $errors[] = "Email is required.";

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) $errors[] = "Invalid email format.";

    if (empty($blood_group)) $errors[] = "Blood group is required.";

 

    // Update if no errors

    if (empty($errors)) {

        $sql_update = "UPDATE requesters

                       SET name='$name', email='$email', contact='$contact', blood_group='$blood_group', reason='$reason'

                       WHERE id = $id";

 

        if (mysqli_query($conn, $sql_update)) {

            $success_message = "Requester details updated successfully!";

        } else {

            $errors[] = "Update failed: " . mysqli_error($conn);

        }

    }

}

?>

 

<!DOCTYPE html>

<html>

<head>

    <title>Edit Requester</title>

    <style>

        body { font-family: Arial; background-color: #f4f4f4; padding: 20px; }

        .container {

            max-width: 600px;

            margin: auto;

            background: white;

            padding: 30px;

            border-radius: 10px;

            box-shadow: 0px 0px 10px #ccc;

        }

        input, select, textarea {

            width: 100%; padding: 10px; margin-bottom: 15px;

            border: 1px solid #ccc; border-radius: 5px;

        }

        button {

            background-color: #28a745; color: white;

            border: none; padding: 10px 20px;

            border-radius: 5px; cursor: pointer;

        }

        .success { color: green; margin-bottom: 10px; }

        .error { color: red; margin-bottom: 10px; }

    </style>

</head>

<body>

 

<div class="container">

    <h2>Edit Blood Requester</h2>

 

    <?php if (!empty($success_message)) echo "<p class='success'>$success_message</p>"; ?>

    <?php foreach ($errors as $error) echo "<p class='error'>⚠️ $error</p>"; ?>

 

    <form method="post" action="">

        <label>Name:</label>

        <input type="text" name="name" value="<?php echo htmlspecialchars($name); ?>" required>

 

        <label>Email:</label>

        <input type="email" name="email" value="<?php echo htmlspecialchars($email); ?>" required>

 

        <label>Contact:</label>

        <input type="text" name="contact" value="<?php echo htmlspecialchars($contact); ?>">

 

        <label>Blood Group:</label>

        <select name="blood_group" required>

            <option value="">--Select Blood Group--</option>

            <?php

                $groups = ['A+', 'A-', 'B+', 'B-', 'O+', 'O-', 'AB+', 'AB-'];

                foreach ($groups as $group) {

                    $selected = ($blood_group == $group) ? "selected" : "";

                    echo "<option value='$group' $selected>$group</option>";

                }

            ?>

        </select>

 

        <label>Reason for Request:</label>

        <textarea name="reason"><?php echo htmlspecialchars($reason); ?></textarea>

 

        <button type="submit">Update Requester</button>

    </form>

</div>

 

</body>

</html>


Features:

  • Loads existing requester info using the ID.
  • Displays the pre-filled form for editing.
  • Validates and updates data in the database.
  • Provides user-friendly feedback (success/error messages).


delete_requester.php – Delete a Requester

Assumption: The requester ID is passed via query string like:
delete_requester.php?id=3


<?php

// Start session

session_start();

 

// Include database connection

include '../config/db_connect.php';

 

// Get the requester ID from query parameter

$id = $_GET['id'] ?? null;

 

// Validate the ID

if (!$id || !is_numeric($id)) {

    die("Invalid requester ID.");

}

 

// First, check if the requester exists

$check_sql = "SELECT * FROM requesters WHERE id = $id";

$result = mysqli_query($conn, $check_sql);

 

if (mysqli_num_rows($result) === 0) {

    die("Requester not found.");

}

 

// Perform delete query

$delete_sql = "DELETE FROM requesters WHERE id = $id";

 

if (mysqli_query($conn, $delete_sql)) {

    // Redirect back to requester list with success message

    header("Location: requester_list.php?msg=deleted");

    exit;

} else {

    echo "Error deleting requester: " . mysqli_error($conn);

}

?>


How it Works:

  • Checks if the id is passed and valid.
  • Confirms that the requester exists before deletion.
  • Deletes the record from the requesters table.
  • Redirects the user to requester_list.php with a query parameter ?msg=deleted which can be used to show a confirmation message.

🔄 Optional: Show a success message in requester_list.php:

You can add this at the top of your requester_list.php:

<?php if (isset($_GET['msg']) && $_GET['msg'] == 'deleted'): ?>

    <p class="success"> Requester deleted successfully.</p>

<?php endif; ?>



requester_list.php – Display All Requesters

<?php

// Start session

session_start();

// Include database connection

include '../config/db_connect.php';

 

// Fetch all requesters from the database

$sql = "SELECT * FROM requesters ORDER BY created_at DESC";

$result = mysqli_query($conn, $sql);

?>

 

<!DOCTYPE html>

<html>

<head>

    <title>Requester List</title>

    <style>

        body { font-family: Arial; background: #f4f4f4; padding: 20px; }

        .container {

            max-width: 900px;

            margin: auto;

            background: white;

            padding: 30px;

            border-radius: 10px;

            box-shadow: 0 0 10px #ccc;

        }

        h2 {

            text-align: center;

            color: #333;

        }

        table {

            width: 100%;

            border-collapse: collapse;

            margin-top: 20px;

        }

        table th, table td {

            padding: 12px;

            border: 1px solid #ccc;

            text-align: center;

        }

        th {

            background-color: #007bff;

            color: white;

        }

        a.button {

            padding: 6px 12px;

            background-color: #28a745;

            color: white;

            text-decoration: none;

            border-radius: 4px;

            margin: 0 5px;

        }

        a.delete-btn {

            background-color: #dc3545;

        }

        .message {

            color: green;

            margin-bottom: 15px;

            text-align: center;

        }

    </style>

</head>

<body>

 

<div class="container">

    <h2>Blood Requesters List</h2>

 

    <!-- Success Message -->

    <?php if (isset($_GET['msg']) && $_GET['msg'] == 'deleted'): ?>

        <p class="message"> Requester deleted successfully.</p>

    <?php endif; ?>

 

    <table>

        <thead>

            <tr>

                <th>#</th>

                <th>Name</th>

                <th>Email</th>

                <th>Contact</th>

                <th>Blood Group</th>

                <th>Reason</th>

                <th>Registered At</th>

                <th>Actions</th>

            </tr>

        </thead>

        <tbody>

            <?php if (mysqli_num_rows($result) > 0): ?>

                <?php $i = 1; while ($row = mysqli_fetch_assoc($result)): ?>

                    <tr>

                        <td><?php echo $i++; ?></td>

                        <td><?php echo htmlspecialchars($row['name']); ?></td>

                        <td><?php echo htmlspecialchars($row['email']); ?></td>

                        <td><?php echo htmlspecialchars($row['contact']); ?></td>

                        <td><?php echo htmlspecialchars($row['blood_group']); ?></td>

                        <td><?php echo htmlspecialchars($row['reason']); ?></td>

                        <td><?php echo date("d M Y, h:i A", strtotime($row['created_at'])); ?></td>

                        <td>

                            <a class="button" href="edit_requester.php?id=<?php echo $row['id']; ?>">Edit</a>

                            <a class="button delete-btn" href="delete_requester.php?id=<?php echo $row['id']; ?>" onclick="return confirm('Are you sure you want to delete this requester?');">Delete</a>

                        </td>

                    </tr>

                <?php endwhile; ?>

            <?php else: ?>

                <tr><td colspan="8">No requesters found.</td></tr>

            <?php endif; ?>

        </tbody>

    </table>

</div>

 

</body>

</html>


🔍 Features:

  • Lists all requester data: name, email, contact, blood group, reason, registration date.
  • Includes Edit and Delete buttons.
  • Shows a confirmation dialog before deletion.
  • Displays a success message if a requester was deleted.

Post a Comment

0Comments

Post a Comment (0)