سلام به دوستان عزیز.
من یه سایت نوبتدهی واسه پزشکان نوشتم و میخوام کاربر از زمانی که از یه دکتر نوبت میگیره button دریافت نوبت واسه دکتر موردنظر غیر فعال بشه و بعد از 24 ساعت مجدد فعال بشه، برای اینکار باید چیکار کنم؟
خودم به صورت زیر نوشتم.
کد زیر مربوط به بلید مربوطه است.
<form action="/doctor/turn" method="POST">
{{ csrf_field() }}
<input type="hidden" name="doctor_id" value="{{ $doctor->id }}">
@if(auth()->user()->checkTurns($doctor))
<button type="submit" class="btn btn-success pull-right" disabled
onclick="enable()" id="myBtn">دریافت نوبت </button>
@endif
</form>
کد بالا به درستی عمل میکنه، یعنی وقتی کاربر نوبت میگیره، button دریافت نوبت غیر فعال میشه اما برای غیر فعال کردن، کد زیر رو نوشتم که اصلا عمل نمیکنه و بعد از یک ثانیه button دریافت نوبت مجدد فعال نمیشه.
function enable()
{
document.getElementById("myBtn").disabled = true;
setTimeout(function(){
document.getElementById("myBtn").disabled = false;
}, 1000);
}
البته اینم بگم که غیر فعال شدن button دریافت نوبت به خاطر دستور زیر است.
@if(auth()->user()->checkTurns($doctor))
سلام اول از همه باید بگم که توی مدل یوزر باید
true , false رو برگردونی برای استفاده داخل if
و برای اروری که توی دیتابیس به وجود آمده برات باید بگم اگر دقت کنی متوجه میشی که
datediff دوتا ورودی داره که هردو تاریخ هستند، ما یکی از این ورودی هارو با متغیر پیکردیم و دومی رو با یک ثابت پر کردیم و ما همه میدونیم که برای استفاده از یک ثابت باید از ' یا " استفاده کنیم پس کد بالا میشه
$turn = Turn::whereRaw("DATEDIFF(created_at, '".date("Y-m-d H:i:s")."') < 1")->where("userID",Auth::user()->id)->orderby("id","desc")->first();
ولی خب کد بالا هم یک مشکلی داره.
برای بدست آوردن اختلاف دو عدد باید بیایم اون ۲ تا عدد رو از هم کم کنیم به این صورت
۲-۱=۱
حالا اگر ما اول عدد کوچک رو بذاریم بعد بزرگ رو چی میشه؟
۱-۲=-۱
پس کد ما هم باید بشه :
$turn = Turn::whereRaw("DATEDIFF('".date("Y-m-d H:i:s")."',created_at) <1")->where("userID",Auth::user()->id)->orderby("id","desc")->first();
بهتره تابع توی مدل هم به این صورت در بیاری :
public function checkTurns() {
$turn = Turn::whereRaw("DATEDIFF('".date("Y-m-d H:i:s")."',created_at) <1")->where("userID",Auth::user()->id)->orderby("id","desc")->first(); // man toye database userID ro bara kilid khareji daram to ham hamin karo kardi?
return empty($turn);
}
امیدوارم مشکلت حل بشه.
سلام
بهتر هست دکمه رو به صورت Hard غیرفعال کنی که کسی نتونه اون رو دوباره فعال کنه
ایده خودت خوب هست نیاز به کار خاصی نداری
@Rp76
الان کد جاوا اسکریپت من کار نمیکنه، در واقع اگر دستور زیر رو ننویسم، هیچ اتفاقی نمیوفته.
@if(auth()->user()->checkTurns($doctor))
وقتی بیمار نوبت رو ثبت میکنه، سپس به صفحه موردنظر ریدایرکت میشه ولی وقتی مجدد به لیست دکترها میره button دریافت نوبت غیر فعال نیست و بیمار میتونه دوباره از همون دکتر نوبت بگیره.
@Rp76
@arash.taghavi69
ببینید الان من به صورت زیر کدمو تغییر دادم.
<form action="/doctor/turn" method="POST">
{{ csrf_field() }}
<input type="hidden" name="doctor_id" value="{{ $doctor->id }}">
<button type="submit" class="btn btn-success pull-right" onclick="enable()" id="myBtn">دریافت نوبت </button>
</form>
الان به درستی کار میکنه و وقتی بر روی button دریافت نوبت کلیک میکنم، button غیر فعال میشه و مجدد بعد از 1 ثانیه فعال میشه، اما من میخوام پس از کلیک، هم به صفحه موردنظر redirect بشه و هم button غیر فعال بشه، اما در خال حاضر فقط button غیر فعال میشه و در همون صفحه میمونه و بعد از 1 ثانیه مجدد فعال میشه.
برای redirect کردن باید اینکارو کنی
یک id برای فرمت در نظر بگیری و توی تابع enable که جاوا اسکریپ هست بنویسی :
کدش میشه این
$("#formid").submit();
برای غیرفعال کردن اون دکمه هم من نظرم این هست که توی این آدرس /doctor/turn یک فیلد درنظر بگیری توی دیتابیس و پرش کنی
که 100٪ از قبل همچین فیلدی درنظر گرفتی اون فیلد هم باید این اطلاعات توش ذخیره شده باشه ( تاریخ ثبت نوبت )
حالا توی اون صفحه ای که داری redirect میکنی به فرم که نوبت بگیرن باید ببینی 1 روز شده یانه
اگر نشده فرم رو اصلا نشون ندی
اگر دوست داشتی میتونی شماره منو توی پروفایلم پیدا کنی.
@Rp76
با created_at نمیشه این کارو کرد؟
قسمت دوم رو میشه دقیق بگید که چه دستوراتی بنویسم؟
قسمت اول رو متوجه شدی؟
با createdat همیشه چرا نشه؟
من نمیتونم بهت بگم کدهارو کجا بذاری چون واقعا سخت هست وقتی چیزی ندید بخوای راهنمایی کنی ولی بهت میگم چیا نیاز داری خودت جایگذاری کن.
//ba farze in ke agar bekhaym be in form sabte nobat dastresi dashte bashim majborim login konim
//Table haye man ham esmeshon be in sorat hastan [ user, nobat]
$nobat=Nobat::whereRaw('DATEDIFF(created_at, '.date("Y-m-d H:i:s").') < 1')->where("userID",Auth::user()->id)->orderby("id","desc")->first();
if (empty($nobat)){
return redirect(/* Onaji ke bayad form nobat dehi bashe */);
}else{
return redirect(/* Redirect *** 1 jai ke behesh begi emroz dg nemitoni nobat begiri*/);
}
کامنت هارو با دقت بخون
@Rp76
بله قسمت اول رو متوجه شدم.
الان من اومدم داخل مدل User به این صورت نوشتم.
public function checkTurns() {
$turn = Turn::whereRaw('DATEDIFF(created_at, '.date("Y-m-d H:i:s").') < 1')->where("userID",Auth::user()->id)->orderby("id","desc")->first();
if (empty($turn)){
return 'yes';
}else{
return 'no';
}
}
تو قسمت ویو هم به صورت زیر:
@if(! auth()->user()->checkTurns())
<button type="submit" class="btn btn-success pull-right" id="myBtn" onload="enable()">دریافت نوبت
</button>
@endif
ولی وقتی وارد صفحه موردنظر میشم این ارور رو میده.
سلام اول از همه باید بگم که توی مدل یوزر باید
true , false رو برگردونی برای استفاده داخل if
و برای اروری که توی دیتابیس به وجود آمده برات باید بگم اگر دقت کنی متوجه میشی که
datediff دوتا ورودی داره که هردو تاریخ هستند، ما یکی از این ورودی هارو با متغیر پیکردیم و دومی رو با یک ثابت پر کردیم و ما همه میدونیم که برای استفاده از یک ثابت باید از ' یا " استفاده کنیم پس کد بالا میشه
$turn = Turn::whereRaw("DATEDIFF(created_at, '".date("Y-m-d H:i:s")."') < 1")->where("userID",Auth::user()->id)->orderby("id","desc")->first();
ولی خب کد بالا هم یک مشکلی داره.
برای بدست آوردن اختلاف دو عدد باید بیایم اون ۲ تا عدد رو از هم کم کنیم به این صورت
۲-۱=۱
حالا اگر ما اول عدد کوچک رو بذاریم بعد بزرگ رو چی میشه؟
۱-۲=-۱
پس کد ما هم باید بشه :
$turn = Turn::whereRaw("DATEDIFF('".date("Y-m-d H:i:s")."',created_at) <1")->where("userID",Auth::user()->id)->orderby("id","desc")->first();
بهتره تابع توی مدل هم به این صورت در بیاری :
public function checkTurns() {
$turn = Turn::whereRaw("DATEDIFF('".date("Y-m-d H:i:s")."',created_at) <1")->where("userID",Auth::user()->id)->orderby("id","desc")->first(); // man toye database userID ro bara kilid khareji daram to ham hamin karo kardi?
return empty($turn);
}
امیدوارم مشکلت حل بشه.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟