สอบถามผู้รู้หน่อยครับบบบ เรื่อง ตรวจสอบเงื่อนไข ห้อง/วันที่/และเวลา
จากภาพ พอเลือกช่าวงเวลา 7.00 แต่ ระบบแจ้งซ้ำ มีจอง 9.00 ซึ่งจิงๆ น่าจะจองได้
จะให้ช่วยดูหน่อยครับว่าต้องแก้ codeส่วนไหนบ้าง
a_chkdup ไฟล์ตรวจสอบ และข้อความซ้ำ
Code (PHP)
<?php
header("Content-type: text/html; charset=utf8");
header("Cache-Control: no-cache, must-revalidate");
require_once('connection.php');
require_once('function.php');
$room_id=$_GET['room_id'];
$s_time=$_GET['s_time'];
$datemeet=$_GET['datemeet'];
$datemeet=d2sql($datemeet);
$c_chkdup=mysql_db_query($dbname,"select subject,s_time,e_time from bookroom where datemeet='$datemeet' and s_time>='$s_time' and e_time>='$s_time' and room_id='$room_id' ");
if(mysql_num_rows($c_chkdup)>0) {
$f_subj=mysql_fetch_array($c_chkdup);
echo "<font color=\"#FF0000\">ห้องประชุมไม่ว่างมีการจัดประชุมเรื่อง : $f_subj[0] เวลา $f_subj[1]-$f_subj[2] </font>";
} else echo "<font color=\"#00CC00\">ห้องประชุมว่าง</font>";
?>
<style>
checkdup {
color:#F00;
font-size:16px;
}
</style>
---------------------------------------------------------------------------------------------
roombook ไฟล์forn รับข้อมูล
Code (PHP)
<select name="room_id" class="fontNormal" id="room_id" onchange="checkdup(document.getElementById('s_time1').value+':00',this.value,document.getElementById('datemeet').value)">
<option selected="selected" value="0">--เลือกห้องประชุม--</option>
<?php
require_once('connection.php');
$room_sql=mysql_db_query($dbname,"select row_id,name from room");
while($f_room=mysql_fetch_array($room_sql)) {
?>
<option value="<?=$f_room[0]?>" <? if($row['room_id']==$f_room[0]) echo ' selected '; ?> ><?=$f_room[1]?></option>
<?
}
?>
</select>
<font color="red"> * </font><div class="fontBN" id="chkdup"></div></td>
</tr>
<tr>
<td bgcolor="#EBF4F9"><div align="right"><strong>วันที่ใช้ห้อง : </strong></div></td>
<td align="left" bgcolor="#EBF4F9"><input name="datemeet" type="text" class="fontNormal" id="datemeet" value="<?php if($row['datemeet']) echo d2thai(substr($row[datemeet],0,10)); ?>" size="10" />
<input type="button" name="Submit" value=" ... " onclick="showCalendar('datemeet','DD-MM-YY')" />
<font color="red">* </font>(เช่น 22-06-2553) </td>
</tr>
<tr>
<td bgcolor="#F4F9FD"><div align="right"><strong>ช่วงเวลาที่ใช้ : </strong></div></td>
<td align="left" bgcolor="#F4F9FD">เวลา
<select name="s_time1" id="s_time1" onchange="checkdup(this.value+':00',document.getElementById('room_id').value,document.getElementById('datemeet').value)">
<option selected="selected" value="0"> -- </option>
<?php
$xs_time=explode(':',$row['s_time']);
for ($i=6;$i<20;$i++) {
if($i==$xs_time[0]) $sel=" selected "; else $sel="";
if ($i<10) echo "<option value='0$i' ".$sel.">0$i</option>";
else echo "<option value=$i".$sel.">$i</option>";
}
?>
</select>
:
<select name="s_time2" id="s_time2">
<?php
for ($i=0;$i<6;$i++) {
$m=$i*10;
if($m==$xs_time[1]) $sel=" selected "; else $sel="";
if ($m<10) echo "<option value='0$m' ".$sel.">0$m</option>";
else echo "<option value=$m ".$sel.">$m</option>";
}
?>
</select>
น. ถึง
<select name="e_time1" id="e_time1">
<option selected="selected" value="0"> -- </option>
<?php
$xe_time=explode(':',$row['e_time']);
for ($i=6;$i<20;$i++) {
if($i==$xe_time[0]) $sel=" selected "; else $sel="";
if ($i<10) echo "<option value='0$i' ".$sel.">0$i</option>";
else echo "<option value=$i".$sel.">$i</option>";
}
?>
</select>
:
<select name="e_time2" id="select2">
<?php
for ($i=0;$i<6;$i++) {
$m=$i*10;
if($m==$xe_time[1]) $sel=" selected "; else $sel="";
if ($m<10) echo "<option value='0$m' ".$sel.">0$m</option>";
else echo "<option value=$m ".$sel.">$m</option>";
}
?>
</select>
น.
</td>
Tag : PHP, MySQL
ประวัติการแก้ไข 2015-12-29 16:30:41
Date :
2015-12-29 16:29:16
By :
baby137
View :
1104
Reply :
10
s_time < $e_time or e_time < $s_time
s_time < $e_time //เวลาเริ่ม(จองแล้ว) น้อยกว่า เวลาจบ(จองใหม่)(จองจบหลัง 9 โมงไม่ได้ มีคนจองแล้ว)
or //หรือ
e_time < $s_time //เวลาจบ(จองแล้ว) น้อยกว่า เวลาเริ่ม(จองใหม่)(จองก่อน 10 โมงไม่ได้ มีคนจองแล้ว)
Date :
2015-12-29 18:24:28
By :
noMerzy
ลองเป็น BETWEEN ดูครับ(ถ้าฟิลด์เป็น int ไม่น่าจะมีปัญหา)
Code (PHP)
(s_time BETWEEN $s_time AND $e_time) OR (e_time BETWEEN $s_time AND $e_time)//เวลาเริ่มหรือเวลาจบที่อยู่ระหว่างเวลาที่จองใหม่
Q.อยากให้มีคำสั่ง อีก นิด 1 ครับ ตอนที่มัน เตือน ระบบ ไม่สามารถ บันทึกได้
A.ถ้าเข้าใจไม่ผิดใช้เทคนิค AJAX ใช่ไหมครับ
1.ช่วงที่ responseText กลับมาถ้า ห้องประชุมไม่ว่าง ให้ disable ปุ่ม submit เลยครับ
2.ในไฟล์ insert ก็ตรวจสอบเหมือนเดิมแล้ว mysql_num_rows ถ้าเท่ากับ 0 ก็ให้เพิ่มข้อมูลได้
Date :
2015-12-30 10:23:10
By :
noMerzy
ถ้าเก็บเป็นตัวเลขน่าจะเป็น INT ดีกว่านะครับเอามา + - * / ได้สะดวก
Code (PHP)
($s_time BETWEEN s_time AND e_time) OR ($e_time BETWEEN s_time AND e_time)//แบบนี้น่าจะถูกต้องกว่าครับ จองใหม่ไปทับช่วงเวลาที่จองอยู่แล้วไม่ได้
Date :
2015-12-30 15:28:35
By :
noMerzy
เก็บเป็น time ไปเลยครับ sql มันน่าจะเรียงลำดับเวลาได้
Date :
2015-12-30 19:12:04
By :
noMerzy
เวลาจอง เดิม 07:00-09:00
ถ้าจองใหม่ 09:00-10:00 จะจองไม่ได้ เพราะเวลา 09:00 จะชนกัน
เวลาบันทึด ต้องตั้งเวลาเริ่ม +1 วิ หรือ เวลาสิ้นสุด -1 วิ
เช่น เริ่ม 09:00:01 - 10:00:00
หรือ เริ่ม 09:00:00 - 09:59:59
Date :
2016-01-03 12:46:27
By :
NewbiePHP
เดียวจะลองดู ครับ ขอบคุณ ครับบ
ประวัติการแก้ไข 2016-01-05 08:41:38
Date :
2016-01-04 08:43:27
By :
baby137
Load balance : Server 00