سیستم نوبت دهی دکتر با PHP
نوبت دهی دکتر با PHP – با کمک PHP و Javascript و Mysql می توانیم یک سیستم رزرو وقت دکتر مناسب برای بیمارستان ها بگیریم .
این پروژه شامل 4 قسمت PHP:
- index.php شامل فرم دریافت اطلاعات بیمار
- process.php اطلاعات بیمار را پردازش و ثبت می کند در دیتابیس
- db.php توابع مورد نیاز برای ثبت و دریافت اطلاعات بیمار
- list.patients.php لیست بیمارانی که نوبت گرفته اند را با جزئیات لیست می کند
همچنین از تقویم فارسی در این پروژه استفاده می کنیم که نیازمند :
- jQuery
- persian-datepicker
- 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 کنید
لیست نظرات
سلام این کدهایی که مثل این برنامه توسط برنامه نویس نوشته میشه ایا این کدها منبع و سورس خاصی دارن یا برنامه نویس اونها رو از صفر مینوسته و از حفظ چون دیدم که مثلا برنامه نویس حتی اونهایی که هم آموزش میدن از این ور و اون کدها رو میبین برمیدارن و کدها رو برای خوشون تغییر میدن فرض کنیم اصلا چنین منابعی نباشه آیا برنامه نویس میتونه به این شکل کد بزنه ؟؟ خیلی برای من این سوال مهم چون هر چقدر خواستم این طوری کد بزنم نتونستم یعنی بلد نبودم
درود ، برنامه نویسی چیزی نیست که حفظ کردنی باشه ، باید با درک این کار رو انجام داد . و در رابطه با سورس پروژه وبسایت رپید کد تمامی پروژه ها از 0 تا 100 با وسواس نوشته شده .
سلام خسته نباشین ، ممنونم ازتون بابت سایت خوبتون یه سوال داشتم من دارم با این پروژتون کار میکنم ولی یه چیزی رو متوجه نمیشم! من از کجا میتونم مدیریت کنم که توی تقویم چه روز هایی از ماه پیش رو قابل انتخاب و چه روز هایی قفل باشه؟
درود ، این یک پروژه ساده هست صرفا جهت آشنایی روند کار و این موردی که گفتید رو شامل نمی شه
سلام در مورد پروژه ای می خواستم از شما مشاوره دریافت کنم ممنون میشم راه ارتباطی غیر از تلگرام ک آیدی پیدا نمیشود و دو سایت دیگر هم جواب نمیدهد رو اعلام کنید. با تشکر
درود ، از اینجا می تونید شماره رو پیدا کنید و در واتساپ پیام بدید .
سلام میشه بگید کار فایل اسکریپت جاوا اسکریپت app.js چی هست
درود ، زمانی که متخصص رو کاربر انتخاب می کنه دکتر های مرتبط با اون رو در لیست آبشاری بارگذاری می کنه و زمانی که دکتر رو انتخاب می کنه تاریخ و نوبت رزرو رو با توجه به دکتر انتخاب شده فعال می کنه .
با سلام در پایگاه داده جدول reservations فیلد های Id Name Insurance_code doctor doctor_date doctor_time هستند میشه بگید هر فیلد چکار میکنه
id -> شناسه
name -> نام بیمار
Insurance_code -> کد بیمه
doctor -> نام دکتر
doctor_date -> تاریخ رزرو نوبت
doctor_time -> ساعت رزرو نوبت
یعنی id کلید اصلی هست درسته و اینکه جدول doctor شامل اطلاعات پزشک هست
بله
سلام دربارهی این پروژه پایان نامه میخوام میتونید بنویسید ؟
سلام ، درحال حاضر زمان کافی برای انجام این کار نداریم .
میخوام پایان نامه بنویسم میشه کمکم کنید مطالبی بفرستید
سایت های انجام پروژه های دانشجویی زیادی هستند با یک جستجو ساده می تونید کمک بگیرید .
سلام این کد ها نوبت دهی ویندوز فرم یا آنلاین هست؟
درود ، وب
سلام هر کاری کردم نشد سایت رو بیارم بالا با ومپ سرور امتحان کردم با زمپ هم همینطور ؟
درود چه خطایی نشون میده ؟
هیچی نمیاد خطا نمیده اگه از andex کد بالایی php رو حذف کنم میاد بالا ولی وقتی رو تخصص و نوبت ظهر یا صبح میزنم نمیان که بزنم رو دکتر یا تخصصی یا چیزی هیچی نمیاد
شما باید یک هاست مجازی روی wamp نصب کنید . مثلا دامنه dev1.com و محتوا پروژه رو در پوشه dev1 بریزید ( یعنی همان root ) پوشه .
چطور میشه کاری کرد که وقتی یکی یه نوبتی میگیره دیگه کسی نتونه بگیرش و کلا ان نوبت برا بقیه کاربرا نمایش داده نشه تا سلکت کنن با توجه به اینکه سورسی که دادین فقط برا ظهره
برای اینکه کلا نشه just after noon کوئری ش رو با time رو حذف کنید .
چطور میشه کاری کرد که وقتی یکی مثلا نوبت بعد از ظهرو گفت دیگه کسی نتونه بگیرش و کلا بعد از ظهر برا بقیه کاربرا نمایش داده نشه تا سلکت کنن
برای این کار می تونید با کوئری تعداد رکورد هایی که برای بعد از ظهر هست بگیرید اگر بیشتر از 0 بود نوبت بعد از ظهر غیر فعال بشه .
میشه سورسش رو بدید من هر کاری کردم نشد
سلام بررسی شد لینک دانلود سالمه .
سورس کلی که اوکیه من سورس این جوابتونو می خوام "برای این کار می تونید با کوئری تعداد رکورد هایی که برای بعد از ظهر هست بگیرید اگر بیشتر از 0 بود نوبت بعد از ظهر غیر فعال بشه ."
سلام . تغییرات انجام شد در فایل process.php می تونید کوئری با نام justAfterNoonReserved مشاهده می کنید دقت داشته باشید که زمان ثبت فرم اعتبارسنجی برای نوبت بعد از ظهر رو انجام میده . لینک سورس