سیستم نوبت دهی دکتر با PHP

سیستم نوبت دهی دکتر با PHP

نوبت دهی دکتر با PHP – با کمک PHP و Javascript و Mysql می توانیم یک سیستم رزرو وقت دکتر مناسب برای بیمارستان ها بگیریم .

این پروژه شامل 4 قسمت PHP:

  1. index.php شامل فرم دریافت اطلاعات بیمار
  2. process.php اطلاعات بیمار را پردازش و ثبت می کند در دیتابیس
  3. db.php توابع مورد نیاز برای ثبت و دریافت اطلاعات بیمار
  4. list.patients.php لیست بیمارانی که نوبت گرفته اند را با جزئیات لیست می کند

همچنین از تقویم فارسی در این پروژه استفاده می کنیم که نیازمند :

  1. jQuery
  2. persian-datepicker
  3. persian-date

دموی برنامه

1- اسکریپت index.php

<?php 
require_once 'db.php';
$doctors = getData("SELECT * FROM DOCTORS");
?>
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>Rapidcode.iR - سورس کد</title>
    <link rel="stylesheet" href="static/css/lib/persian-datepicker.min.css">
    <link rel="stylesheet" href="static/css/main.css">
    <script type="text/javascript">var doctors = <?php echo json_encode($doctors) ?></script>
</head>
<body>


    <div class="container">
        <a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>

        <?php if(@$_GET['msg']): ?>
            <div class="message"><?php echo $_GET['msg']; ?></div>
        <?php endif; ?>

       <form action="process.php" method="post">
           
        <input required type="text" name="patient[name]" placeholder="نام و نام خانوادگی"><br><br>
        <input required type="number" name="patient[insurancecode]" placeholder="شماره بیمه"><br><br>

        <select required id="expert" name="patient[expert]">
            <option>تخصص</option>
            <?php 
            $tmp_doctors = [];
            foreach($doctors as $doctor):
                if(in_array($doctor['expert'], $tmp_doctors)) continue;
                $tmp_doctors[] = $doctor['expert'];

            ?>
                <option value="<?php echo $doctor['expert'] ?>"><?php echo $doctor['expert'] ?></option>
            <?php endforeach; ?>
        </select><br><br>
        <select required id="doctor" name="patient[doctor]"></select><br><br>
        <input type="text" id="doctor_day" name="patient[doctor_day]" readonly="true">
        <select required id="doctor_time" name="patient[doctor_time]"></select><br><br>
        

        <input type="submit" id="submit" value="گرفتن نوبت">

       </form>

       
    </div>


    <script src="static/js/lib/jquery-3.2.1.min.js"></script>
    <script src="static/js/lib/persian-date.min.js"></script>
    <script src="static/js/lib/persian-datepicker.min.js"></script>
    <script src="static/js/app.js"></script>
</body>
</html>


2- اسکریپت process.php

<?php 
require_once "db.php";
$patient = $_POST['patient'];

$reserved = getData("SELECT * FROM `reservations` WHERE insurance_code=?" , [$patient['insurancecode']]);

if($reserved) die("شما از قبل نوبت گرفته اید.");

$is_inserted = setData("INSERT INTO `reservations` (name , insurance_code , doctor , doctor_date , doctor_time) VALUES (?,?,?,?,?)" , [$patient['name'] , $patient['insurancecode'] , $patient['doctor'] , $patient['doctor_day'] , $patient['doctor_time']]);

if(!$is_inserted) die("خطایی در ارسال اطلاعات به پایگاه داده رخ داده");

$message = "$patient[name] برای دکتر $patient[doctor] در تاریخ $patient[doctor_day] و در ساعت $patient[doctor_time] نوبت گرفته و باید در همان موعد مقرر حاضر گردد !";

header("Location: index.php?msg=" . $message);

?>


3- اسکریپت db.php

<?php 

$mysqli = new mysqli("localhost", "root", "", "cms");
if ($mysqli->connect_error) {
    die("MYSQL ISSUE : " . $mysqli->connect_error);
}
 
$mysqli->set_charset("utf8");
$stmt = $mysqli->stmt_init();


function getData($uquery,$data=[]){
    global $mysqli;
    global $stmt;
    $query = $uquery;
    $rows = [];
   
    $stmt->prepare($query);

    if(sizeof($data))
        $stmt->bind_param(str_repeat("s",count($data)), ...$data);
  
    if ($stmt->execute() && $res = $stmt->get_result()) {
        if ($stmt->affected_rows || $res->num_rows) {
            while ($row = $res->fetch_assoc()) {
                $rows[] = $row;
            }
        }
    }
    return $rows;
}

function setData($uquery , $data){
    global $mysqli;
    global $stmt;
      
    $query = $uquery;
    $stmt->prepare($query);
    $type = str_repeat("s",count($data));
    $stmt->bind_param($type, ...$data);
    $inserted_id=0;
    if ($stmt->execute()) {
        $inserted_id = $stmt->affected_rows ? $stmt->insert_id : 0;
    }
    return $inserted_id;
}

?>


4- اسکریپت list.patients.php

<?php 
require_once 'db.php';
$doctors = getData("SELECT * FROM DOCTORS");
?>
<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <title>Rapidcode.iR - سورس کد</title>
    <link rel="stylesheet" href="static/css/main.css">
</head>
<body>


    <div class="container">
        <a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>

        <table>
            <thead>
                <tr>
                    <th>نام بیمار</th>
                    <th>شماره بیمه بیمار</th>
                    <th>دکتر معالج</th>
                    <th>تاریخ نوبت</th>
                    <th>زمان نوبت</th>
                </tr>
            </thead>

            <tbody>

            <?php
                require_once "db.php";
                $rows = getData("SELECT * FROM reservations WHERE 1=?" , [1]);
                foreach($rows as $row):
            ?>

                <tr>
                    <td><?php echo $row['name'] ?></td>
                    <td><?php echo $row['insurance_code'] ?></td>
                    <td><?php echo $row['doctor'] ?></td>
                    <td><?php echo $row['doctor_date'] ?></td>
                    <td><?php echo $row['doctor_time'] ?></td>
                </tr>

            <?php endforeach; ?>
            </tbody>

        </table>

       
    </div>


  
</body>
</html>


5- اسکریپت جاوا اسکریپت app.js

const expertDOM = document.getElementById('expert');
const doctorDOM = document.getElementById('doctor');
const doctorTimeDOM = document.getElementById('doctor_time');

window.activeWeekDay = ["سه شنبه" , "پنجشنبه"];

const calendar = $("#doctor_day");
var dateObject = false;

loadDatePicker();


expertDOM.onchange = function() {
    const expert = this.value;
    resetDoctorsFields();
    doctors.forEach(function(doctor) {
        if (doctor['expert'] == expert) {
            doctorDOM.innerHTML += `<option value="${doctor['name']}">${doctor['name']}</option>`;
            updateDayAndTime(doctor);
            doctorDOM.onchange();
        }
    })
}

doctorDOM.onchange = function() {
    const doctor = this.value;
    resetDoctorsFields(this);
    doctors.forEach(function(doc) {
        if (doc['name'] == doctor) {
        	updateDayAndTime(doc);
        }
    });
}

function loadDatePicker(){
	
	dateObject = calendar.persianDatepicker({
	navigator:{
            enabled: false,
            scroll:{
            	enabled: false,
            }
    },
    timePicker: {enabled: false},
    format: 'YYYY/MM/DD',
    minDate: new persianDate().subtract('day', 0).valueOf(),
    checkDate: function(unix){
    	const date = new persianDate(unix).date();
    	const month = new persianDate(unix).month();
    	const day = new persianDate(unix).day();
    	const currentMonth = this.model.state.selected.month;
    	const currentDate = this.model.state.selected.date;
		
    	let show = false;
    	activeWeekDay.forEach(function(dayi){
    		if(month == currentMonth){
    			if(day == getWeekdayByNum(dayi)){
    				show = true;
    				return true;
    			}
    		}
    	});

        return show;
    },
    onSelect : function(selectedDayUnix){
    	dateObject.hide()
    }
});

	
}

function resetDoctorsFields(exception){
	const domList = [doctorDOM , doctorTimeDOM];
	
	domList.forEach(function(dom){
		if(exception != dom){
			dom.innerHTML = "";
		}
		
	});
}

function updateDayAndTime(doctor) {
    const days = doctor['weekdays'].split(",");
    const time = doctor['time'].split(",");

    days.forEach(function(day,key) {
        days[key] = day.toString().trim();
    });

    activeWeekDay = days;
    loadDatePicker();

    time.forEach(function(tme) {
        doctorTimeDOM.innerHTML += `<option value="${tme}">${tme}</option>`;
    });
}

function getWeekdayByNum(dayLetter){
	const days = {1: "شنبه" , 2: "یکشنبه" , 3: "دوشنبه" , 4: "سه شنبه" , 5: "چهارشنبه" , 6: "پنجشنبه" , 7: "جمعه"}

	const keys = Object.keys(days);
	for (var i = 0; i < keys.length; i++) {
		const key = keys[i];
		if(days[key] == dayLetter){
			return key;
		}
	}

	return false;
}


استایل main.css

.datepicker-day-view .table-days td:not(.disabled) span {
    color: #4caf50 !important;
    font-weight: bold;
}

.datepicker-day-view .table-days td.selected span,
.datepicker-day-view .table-days td span:hover {
    background-color: #4caf50 !important;
    color: #fff !important;
}

.message{
    width: 100%;
    padding: 10px 15px;
    background-color: #ff9800;
    color: #000;
    margin-bottom: 15px;
}

table{
    border-collapse: collapse;
}

table tr td , table tr th{
    border: 1px solid;
    padding: 5px 15px;
}

قبل از اجرای برنامه وارد پوشه DATABASE TO IMPORT شده cms را import کنید

دانلود برنامه رزرو دکتر با PHP

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. رسول
    رسول

    سلام این کدهایی که مثل این برنامه توسط برنامه نویس نوشته میشه ایا این کدها منبع و سورس خاصی دارن یا برنامه نویس اونها رو از صفر مینوسته و از حفظ چون دیدم که مثلا برنامه نویس حتی اونهایی که هم آموزش میدن از این ور و اون کدها رو میبین برمیدارن و کدها رو برای خوشون تغییر میدن فرض کنیم اصلا چنین منابعی نباشه آیا برنامه نویس میتونه به این شکل کد بزنه ؟؟ خیلی برای من این سوال مهم چون هر چقدر خواستم این طوری کد بزنم نتونستم یعنی بلد نبودم

    06 خرداد 1403 | 20:58:15
  • حسین باقری
    حسین باقری

    درود ، برنامه نویسی چیزی نیست که حفظ کردنی باشه ، باید با درک این کار رو انجام داد . و در رابطه با سورس پروژه وبسایت رپید کد تمامی پروژه ها از 0 تا 100 با وسواس نوشته شده .

    07 خرداد 1403 | 10:39:58
  • مهسا افشار
    مهسا افشار

    سلام خسته نباشین ، ممنونم ازتون بابت سایت خوبتون یه سوال داشتم من دارم با این پروژتون کار میکنم ولی یه چیزی رو متوجه نمیشم! من از کجا میتونم مدیریت کنم که توی تقویم چه روز هایی از ماه پیش رو قابل انتخاب و چه روز هایی قفل باشه؟

    31 شهریور 1402 | 21:31:28
    • حسین باقری
      حسین باقری

      درود ، این یک پروژه ساده هست صرفا جهت آشنایی روند کار و این موردی که گفتید رو شامل نمی شه

      03 مهر 1402 | 19:22:02
  • alaleh
    alaleh

    سلام در مورد پروژه ای می خواستم از شما مشاوره دریافت کنم ممنون میشم راه ارتباطی غیر از تلگرام ک آیدی پیدا نمیشود و دو سایت دیگر هم جواب نمی‌دهد رو اعلام کنید. با تشکر

    05 فروردین 1402 | 21:51:52
    • حسین باقری
      حسین باقری

      درود ، از اینجا می تونید شماره رو پیدا کنید و در واتساپ پیام بدید .

      06 فروردین 1402 | 00:24:08
  • میلاد
    میلاد

    سلام میشه بگید کار فایل اسکریپت جاوا اسکریپت app.js چی هست

    09 بهمن 1401 | 17:28:02
    • حسین باقری
      حسین باقری

      درود ، زمانی که متخصص رو کاربر انتخاب می کنه دکتر های مرتبط با اون رو در لیست آبشاری بارگذاری می کنه و زمانی که دکتر رو انتخاب می کنه تاریخ و نوبت رزرو رو با توجه به دکتر انتخاب شده فعال می کنه .

      09 بهمن 1401 | 17:32:26
  • علیرضا
    علیرضا

    با سلام در پایگاه داده جدول reservations فیلد های Id Name Insurance_code doctor doctor_date doctor_time هستند میشه بگید هر فیلد چکار میکنه

    25 دی 1401 | 14:25:44
    • حسین باقری
      حسین باقری

      id -> شناسه
      name -> نام بیمار
      Insurance_code -> کد بیمه
      doctor -> نام دکتر
      doctor_date -> تاریخ رزرو نوبت
      doctor_time -> ساعت رزرو نوبت

      25 دی 1401 | 14:39:40
      • علیرضا
        علیرضا

        یعنی id کلید اصلی هست درسته و اینکه جدول doctor شامل اطلاعات پزشک هست

        25 دی 1401 | 15:42:01
        • حسین باقری
          حسین باقری

          بله

          25 دی 1401 | 17:04:43
  • محمد
    محمد

    سلام درباره‌ی این پروژه پایان نامه میخوام میتونید بنویسید ؟

    12 دی 1401 | 15:29:40
    • حسین باقری
      حسین باقری

      سلام ، درحال حاضر زمان کافی برای انجام این کار نداریم .

      12 دی 1401 | 17:18:08
      • محمد
        محمد

        میخوام پایان نامه بنویسم میشه کمکم کنید مطالبی بفرستید

        15 دی 1401 | 16:05:03
        • حسین باقری
          حسین باقری

          سایت های انجام پروژه های دانشجویی زیادی هستند با یک جستجو ساده می تونید کمک بگیرید .

          15 دی 1401 | 20:46:30
  • علی رغم
    علی رغم

    سلام این کد ها نوبت دهی ویندوز فرم یا آنلاین هست؟

    09 آذر 1401 | 10:31:03
    • حسین باقری
      حسین باقری

      درود ، وب

      09 آذر 1401 | 13:07:45
  • محمد
    محمد

    سلام هر کاری کردم نشد سایت رو بیارم بالا با ومپ سرور امتحان کردم با زمپ هم همینطور ؟

    07 آذر 1401 | 22:01:05
    • حسین باقری
      حسین باقری

      درود چه خطایی نشون میده ؟

      08 آذر 1401 | 18:12:15
      • محمد
        محمد

        هیچی نمیاد خطا نمیده اگه از andex کد بالایی php رو حذف کنم میاد بالا ولی وقتی رو تخصص و نوبت ظهر یا صبح میزنم نمیان که بزنم رو دکتر یا تخصصی یا چیزی هیچی نمیاد

        09 آذر 1401 | 10:39:31
        • حسین باقری
          حسین باقری

          شما باید یک هاست مجازی روی wamp نصب کنید . مثلا دامنه dev1.com و محتوا پروژه رو در پوشه dev1 بریزید ( یعنی همان root ) پوشه .

          09 آذر 1401 | 13:08:52
  • محمد صدرا
    محمد صدرا

    چطور میشه کاری کرد که وقتی یکی یه نوبتی میگیره دیگه کسی نتونه بگیرش و کلا ان نوبت برا بقیه کاربرا نمایش داده نشه تا سلکت کنن با توجه به اینکه سورسی که دادین فقط برا ظهره

    09 خرداد 1401 | 01:13:40
    • حسین باقری
      حسین باقری

      برای اینکه کلا نشه just after noon کوئری ش رو با time رو حذف کنید .

      09 خرداد 1401 | 11:56:33
  • Parsa
    Parsa

    چطور میشه کاری کرد که وقتی یکی مثلا نوبت بعد از ظهرو گفت دیگه کسی نتونه بگیرش و کلا بعد از ظهر برا بقیه کاربرا نمایش داده نشه تا سلکت کنن

    20 اردیبهشت 1401 | 02:49:22
    • حسین باقری
      حسین باقری

      برای این کار می تونید با کوئری تعداد رکورد هایی که برای بعد از ظهر هست بگیرید اگر بیشتر از 0 بود نوبت بعد از ظهر غیر فعال بشه .

      20 اردیبهشت 1401 | 16:58:01
      • محمد صدرا
        محمد صدرا

        میشه سورسش رو بدید من هر کاری کردم نشد

        04 خرداد 1401 | 22:36:52
        • حسین باقری
          حسین باقری

          سلام بررسی شد لینک دانلود سالمه .

          05 خرداد 1401 | 00:43:26
          • محمد صدرا
            محمد صدرا

            سورس کلی که اوکیه من سورس این جوابتونو می خوام "برای این کار می تونید با کوئری تعداد رکورد هایی که برای بعد از ظهر هست بگیرید اگر بیشتر از 0 بود نوبت بعد از ظهر غیر فعال بشه ."

            06 خرداد 1401 | 20:56:22
          • حسین باقری
            حسین باقری

            سلام . تغییرات انجام شد در فایل process.php می تونید کوئری با نام justAfterNoonReserved مشاهده می کنید دقت داشته باشید که زمان ثبت فرم اعتبارسنجی برای نوبت بعد از ظهر رو انجام میده . لینک سورس

            06 خرداد 1401 | 21:58:42
    contact us