ขอความช่วยเหลือครับ ต้องการเช็คเงื่อนไขช่วงเวลาการใช้งานอุปกรณ์ครับ
เชื่อว่าคุณพยายามอธิบายเพื่อให้เข้าใจง่ายแล้ว
แต่ผมยัง งง อยู่
1. ปัญหาที่พบจริงๆ คืออะไร
2. สิ่งที่ต้องการยังไม่เคลียร์ ถ้าเป็นไปได้ลองยกตัวอย่างผลลัพธ์ให้ดูหน่อยครับ
อย่างวันที่คืนมีสองตัวอย่างคือ
st_section = 'เช้า'
st_section = 'ทั้งวัน'
แล้วมันไม่เป็นไปตามความต้องการยังไง มีความสัมพันธ์กับที่วงแดงๆ ไว้อย่างไร
st_status ='Borrowing' ก็บอกอยู่แล้วไม่ใช่หรือ ว่าไม่ว่าง
งั้นก็เพิ่มเข้าไปว่า available ถ้าว่าง
แต่ก็มี st_section = 'เช้า' ซึ่งแสดงว่าว่างอยู่แล้วก็ไม่จำเป็นอีก
หรือไม่ลองพิจารณาออกแบบฐานทัพใหม่ดูไหม
Date :
2022-02-24 08:58:30
By :
009
1.ปัญหาที่พบคือ นาย A ยืมอุปกรณ์ BR-0004 วันที่ยืมอุปกรณ์ "2022-02-23" และวันที่คืนอุปกรณ์ "2022-02-23" ช่วงเวลาใช้งาน = "ทั้งวัน" ไปแล้ว
เมื่อนาย B มาจองวันที่ "2022-02-23" ช่วงเวลาใช้งาน "ทั้งวัน " ซึ่งในผลลัพธ์นี้รูปนี้ "อุปกณ์มีการใช้งานอยู่" ถูกต้อง
และนาย C ยืมอุปกรณ์ BR-0004 มีการจองคิวในวันที่ "2022-02-23" ช่วงเวลาใช้งาน ="เช้า" ผลลัพธ์มันออกเป็น ="อุปกรณ์พร้อมใช้งาน" แต่ในความเป็นจริงมันต้องออกมาเป็นผลลัพธ์ ="อุปณ์มีการใช้งานอยู่"
ซึ่งเงื่อนไขใน Code ที่ผมเช็คนั้นไม่ถูกต้องครับ พอจะแนะนำได้ไหมครับ
2.ผลลัพธ์
นาย A ได้ยืม BR-0004 ของวันที่ "2022-02-25" และคืนวันที่ "2022-02-26" ช่วงเวลาใช้งาน ="ทั้งวัน"ไปแล้ว
และนายมา B ยืม BR-0004 ของวันที่ "2022-02-25" และคืนวันที่ "2022-02-26" ช่วงเวลาใช้งาน ="ทั้งวัน" สถานะบอก "อุปกรณ์มีการใช้งานอยู่" เพราะนาย A ยืมอุปกรณ์อยู่ ถูกต้อง
และนาย C ยืม BR-0004 ของวันที่ "2022-02-25" และคืนวันที่ "2022-02-25" ช่วงเวลาใช้งาน ="เช้า" สถานะบอก "อุปกรณ์พร้อมใช้งาน" ซึ่งไม่ถูกต้อง เพราะนาย A ยืมอุปกรณ์อยู่
ช่วงเวลาการใช้งานจะมี 3ช่วง เช้า บ่าย ทั้งวัน ลงใน st_section
ประมาณนี้ครับ
ประวัติการแก้ไข 2022-02-24 10:41:10
Date :
2022-02-24 10:00:49
By :
seetai
input ของช่วงเวลา เป็น type text หรือ select ครับ
ถ้าเป็น text ตอนเช็ค $_POST ลองใช้ร่วมกับ trim เพื่อให้แน่ใจว่าไม่มีช่องว่างติดมาด้วย
ถ้าให้แนะนำ พวกสถานะควรเปลี่ยนเป็นตัวเลขแทน
Date :
2022-02-24 10:29:21
By :
009
ตรงไหนที่อ้างอิงอุปกรณ์ BR-0004
ตรวจสอบการใช้ where clause ในส่วนของ and or ของการใช้ ช่วงเข้า - ทั้งวัน ให้ถูกต้อง
และก็อะไรที่เป็น text เอามาเป็น text ไม่ใช่เอามาเป็นภาพ จะก๊อปมาเช็คก็ทำไม่ได้
Date :
2022-02-24 10:42:49
By :
Chaidhanan
ครับ ได้เปลี่ยนเป็นตัวแลขแทน
0 = ทั้งวัน
1 = เช้า
2 = บ่าย
ตอนนี้สามารถเช็คเงื่อนไขได้แล้วว่าอุปกรณ์ใช้งานอยู่
แต่ยังติดที่ อุปกรณ์พร้อมใช้งาน ยังไม่เข้าเงื่อนไขครับ
Code (PHP)
<?php
include('../../connect.php');
echo $_POST["st_date_borrow"]."---------".$_POST["st_date_return"]."<br>";
if(!empty($_POST["st_date_borrow"])) {
$sql = "SELECT * FROM `stock_borrow`
WHERE ((st_date_borrow BETWEEN '".$_POST['st_date_borrow']."' AND '".$_POST['st_date_return']."') OR
(st_date_return BETWEEN '".$_POST['st_date_borrow']."' AND '".$_POST['st_date_return']."') OR
('".$_POST['st_date_borrow']."' BETWEEN st_date_borrow AND st_date_return) OR
('".$_POST['st_date_return']."' BETWEEN st_date_borrow AND st_date_return )) AND
st_status ='Borrowing'" or die("Error : " . mysqli_error());
echo $sql;
$result = mysqli_query($con,$sql);
$count = mysqli_num_rows($result);
while ($row = mysqli_fetch_array($result)) {
if ($row["st_section"] == 1 && $_POST["st_section"] == 2 && $count > 0) {
echo "<span style='color:green'> อุปกรณ์พร้อมใช้งาน.</span>";
echo "<script>$('#submit').prop('disabled',false);</script>";
} elseif ($row["st_section"] == 2 && $_POST["st_section"] == 1 && $count > 0) {
echo "<span style='color:green'> อุปกรณ์พร้อมใช้งาน.</span>";
echo "<script>$('#submit').prop('disabled',false);</script>";
} elseif ($count > 0) {
echo "<span style='color:green'> อุปกรณ์พร้อมใช้งาน.</span>";
echo "<script>$('#submit').prop('disabled',false);</script>";
}else {
echo "<span style='color:red'> อุปกรณ์มีการใช้งานอยู่.</span>";
echo "<script>$('#submit').prop('disabled',true);</script>";
}
}
}
ตรงเงื่อนไขผิดพลาดตรงไหน ช่วยแนะนำหน่อยครับ
Date :
2022-02-24 12:31:54
By :
seetai
Code (PHP)
<?php
include('../../connect.php');
echo $_POST["st_date_borrow"]."---------".$_POST["st_date_return"]."<br>";
if(!empty($_POST["st_date_borrow"])) {
$sql = "SELECT s.*,
if( (st_date_borrow BETWEEN d_bor AND d_ret )
OR
(st_date_return BETWEEN d_bor AND d_ret )
OR
(d_bor BETWEEN st_date_borrow AND st_date_return)
OR
(d_ret BETWEEN st_date_borrow AND st_date_return )
, 'use', 'not use'
) tmp_stat
FROM ( select ? d_bor, ? d_ret) tb, `stock_borrow` s limit 10
";// or die("Error : " . mysqli_error());
//echo $sql;
$stm = $con->prepare($sql);
$stm->bind_param('ss',$_POST['st_date_borrow'],$_POST['st_date_return']);
$stm->execute();
while ($row = $stm->fetch_assoc()) {
echo json_encode($row),'<br>';
}
}
ลองคำสั่งนี้ ให้ดูหน่อย
คำสั่งนี้ให้แสดงแค่ 10 รายการ เพื่อทดสอบ
ประวัติการแก้ไข 2022-02-24 13:04:31
Date :
2022-02-24 13:03:23
By :
Chaidhanan
https://www.php.net/manual/en/mysqli-stmt.bind-param.php
ลองเช็คกับ link นี้ดูครับ
Date :
2022-02-25 15:26:01
By :
Chaidhanan
Load balance : Server 04