อยากถามเรื่องการตรวจสอบค่าซ้ำของทุกแถว ยกเว้นแถวที่กำลังทำการแก้ไขไม่ต้องตรวจสอบ
ก็คงต้องทำ ฟิลด์ status เพิ่มขึ้นมาอีก 1 ฟิลด์ครับ
เมื่อทำการแก้ไข เรคคอร์ดใดขึ้น ก็ทำการ Update สถานะของเรคคอร์ดนั้นแล้วค่อยทำการ Select ข้อมูลขึ้นมา แก้ไข เมื่อทำการแก้ไขแล้วเสร็จ หรือกดปุ่ม(Submit) ก็ทำการ Update สถานะของเรคคอร์ดนั้นกลับไปเป็นเหมือนเดิม อย่างเช่น
0 = ปกติ
1 = แก้ไข
Date :
2009-09-27 21:24:08
By :
extenser
$r = mysql_query("SELECT * FROM tb WHERE date_column_name='2009-10-01' AND id <> 'id ที่กำลังแก้ไข' ");
if (mysql_num_rows($r) > 0){
//not allow to save
}else{
mysql_query("UPDATE ...");
}
ใช่แบบนี้ป่าวหว่า เดาเอา แหะๆ
Date :
2009-09-27 21:36:41
By :
num
โค้ดเป็นแบบนี้ครับ แต่ไม่รู้จะเพิ่มคำสั่งอะไรตรงไหน เพื่อไม่ให้ตรวจสอบในแถวที่กำลังแก้ไข
Code (PHP)
<html>
<head>
<title>ระบบจองห้องประชุม สำนักงานจังหวัดลำปาง</title>
<link rel="icon" href="pic/logo.gif" type="image/gif" >
</head>
<body>
<?
$objConnect = mysql_connect("localhost","root","1234") or die("Error Connect to Database");
$cs1 = "SET character_set_results=tis620";
mysql_query($cs1) or die('Error query: ' . mysql_error());
$cs2 = "SET character_set_client = tis620";
mysql_query($cs2) or die('Error query: ' . mysql_error());
$cs3 = "SET character_set_connection = tis620";
mysql_query($cs3) or die('Error query: ' . mysql_error());
$objDB = mysql_select_db("test");
$rr="$_POST[roomddl]";
$uu="$_POST[txtdate]";
$timeSts="$_POST[timedll]"; // 1=เช้า ,2=บ่าย, 3=เช้า-บ่าย
$name="$_POST[namerestxt]";
$unt="$_POST[txtunit]";
$select="SELECT * FROM tbres WHERE room='$rr' AND use_date='$uu' ";
$result=mysql_query($select);
$row=mysql_fetch_array($result);
$num=mysql_num_rows($result);
//echo $select;
if($num >0 ){
$sts= $row["time_res"];
if($sts=="3"){
echo "<script>alert(' ไม่สามารถจองห้องนี้ได้ เนื่องจากมีการมีการจองไว้ทั้งวัน');window.location='list_admin.php';</script>";exit(); //ถ้าใน row นั้นมีค่าเท่ากับ 3 ไม่สามารถจองได้ ทั้ง 1 และ 2
}
if($sts==$timeSts){
echo "<script>alert(' ไม่สามารถจองห้องนี้ ในช่วงเวลานี้ได้ เนื่องจากมีการมีจองไว้แล้ว');window.location='list_admin.php';</script>";exit(); // ค่าที่ POST มามีค่าเท่ากับใน row ไม่สามารถจองได้
}else{
if($timeSts==3){
echo "<script>alert(' ไม่สามารถจองห้องนี้ ในช่วงเวลานี้ได้ เนื่องจากมีการมีจองไว้แล้ว');window.location='list_admin.php';</script>";exit(); // ค่าที่ส่งมามีค่าเท่ากับ 3 ไม่สามารถจองได้
}else{
}
}
}
$d=date('Y-m-d');
if ($uu<=$d){
echo "<script>alert(' !!! คุณไม่สามารถจองห้องย้อนหลังได้ !!! ');window.location='list_admin.php';</script>";exit();
}else{
}
if ($name==""){
echo "$name";
echo "<script>alert(' !!! คุณไม่ได้ใส่ชื่อผู้จอง !!! ');window.location='list_admin.php';</script>";exit();
}else{
$strSQL = "UPDATE tbres SET ";
$strSQL .="room = '".$_POST["roomddl"]."' ";
$strSQL .=", log_date = CURDATE() ";
//$strSQL .="log_date = .CURDATE(). ";
$strSQL .=",use_date = '".$_POST["txtdate"]."' ";
$strSQL .=",time_res = '".$_POST["timedll"]."' ";
$strSQL .=",res_ing = '".$_POST["namerestxt"]."' ";
$strSQL .=",unit = '".$_POST["txtunit"]."' ";
$strSQL .=" WHERE unit = '".$_POST["txtunit"]."'AND res_ing= '".$_POST["namerestxt"]."'";
//echo "$_GET[use_date]";
//$objQuery = mysql_query($strSQL);
$objQuery = mysql_query($strSQL) or die(mysql_error());
if($objQuery)
{
//echo "$strSQL";
echo "<script>
alert('บันทึกได้แล้ว');
window.location='list_admin.php';
</script>";
exit();
}
else
{
echo "<script>
alert('บันทึกไม่ได้');
window.location='list_admin.php';
</script>";
exit();
}
}
mysql_close($objConnect);
?>
</body>
</html>
Date :
2009-09-27 21:58:36
By :
oasiis
บรรทัด
$select="SELECT * FROM tbres WHERE room='$rr' AND use_date='$uu' ";
แทนด้วย
$select="SELECT * FROM tbres WHERE (room='$rr' AND use_date='$uu') AND NOT (unit = '".$_POST["txtunit"]."'AND res_ing= '".$_POST["namerestxt"]."')";
ครับ
Date :
2009-09-27 23:11:48
By :
num
ยังไม่ได้ครับ
มันไม่เข้าเงื่อนไขอ่ะครับ
Date :
2009-09-27 23:21:39
By :
oasiis
ขอตัวอย่าง input และโปรแกรมนี้ให้ผลลัพธ์ไม่ตรงกับที่ต้องการอย่างไรครับ
Date :
2009-09-27 23:40:09
By :
num
ผมลองแก้ไข ดูแล้วสามารถจองซ้ำได้ในวัน เวลา เดียวกันอยู่ครับ
แล้วเมื่อมันซ้ำ กันมันจะลบข้อมูลที่เหมือนกัน ไป 1 แถว
Date :
2009-09-27 23:47:55
By :
oasiis
แบบนี้ได้ยังครับ แหะๆ
<html>
<head>
<title>ระบบจองห้องประชุม สำนักงานจังหวัดลำปาง</title>
<link rel="icon" href="pic/logo.gif" type="image/gif" >
</head>
<body>
<?
$objConnect = mysql_connect("localhost","root","1234") or die("Error Connect to Database");
$cs1 = "SET character_set_results=tis620";
mysql_query($cs1) or die('Error query: ' . mysql_error());
$cs2 = "SET character_set_client = tis620";
mysql_query($cs2) or die('Error query: ' . mysql_error());
$cs3 = "SET character_set_connection = tis620";
mysql_query($cs3) or die('Error query: ' . mysql_error());
$objDB = mysql_select_db("test");
$rr="$_POST[roomddl]";
$uu="$_POST[txtdate]";
$timeSts="$_POST[timedll]"; // 1=เช้า ,2=บ่าย, 3=เช้า-บ่าย
$name="$_POST[namerestxt]";
$unt="$_POST[txtunit]";
$select="SELECT * FROM tbres WHERE (room='$rr' AND use_date='$uu')";
$result=mysql_query($select);
//echo $select;
$d=date('Y-m-d');
//mี่ต้องใช้ loop เพราะถ้าใช้ if อาจจะข้ามการตรวจสอบ บาง record ไป
//เนื่องจากในห้องและในวันที่หนึ่งๆ อาจจะมี การบันทึกไว้ 2 record ก็ได้
//เช่น เช้า และ บ่าย แยกกัน
while($row = mysql_fetch_assoc($result)){
if ($row['unit']==$_POST['txtunit'] && $row['res_ing']==$_POST['namerestxt']
&& $row['time_res'] == $_POST['timedll']
){
//ข้ามการตรวจสอบ record เดียวกัน (ที่ไม่ได้มีการเปลี่ยนแปลง time_res )
continue;
}
$sts= $row["time_res"];
if($sts=="3"){
echo "<script>alert(' ไม่สามารถจองห้องนี้ได้ เนื่องจากมีการมีการจองไว้ทั้งวัน');window.location='list_admin.php';</script>";
exit(); //ถ้าใน row นั้นมีค่าเท่ากับ 3 ไม่สามารถจองได้ ทั้ง 1 และ 2
}
if($sts==$timeSts){
echo "<script>alert(' ไม่สามารถจองห้องนี้ ในช่วงเวลานี้ได้ เนื่องจากมีการมีจองไว้แล้ว');window.location='list_admin.php';</script>";
exit(); // ค่าที่ POST มามีค่าเท่ากับใน row ไม่สามารถจองได้
}else{
if($timeSts==3){
echo "<script>alert(' ไม่สามารถจองห้องนี้ ในช่วงเวลานี้ได้ เนื่องจากมีการมีจองไว้แล้ว');window.location='list_admin.php';</script>";
exit(); // ค่าที่ส่งมามีค่าเท่ากับ 3 ไม่สามารถจองได้
}else{
}
}
}
if ($uu<=$d){
echo "<script>alert(' !!! คุณไม่สามารถจองห้องย้อนหลังได้ !!! ');window.location='list_admin.php';</script>";
exit();
}else{
}
if ($name==""){
echo "$name";
echo "<script>alert(' !!! คุณไม่ได้ใส่ชื่อผู้จอง !!! ');window.location='list_admin.php';</script>";
exit();
}else{
$strSQL = "UPDATE tbres SET ";
$strSQL .="room = '".$_POST["roomddl"]."' ";
$strSQL .=", log_date = CURDATE() ";
//$strSQL .="log_date = .CURDATE(). ";
$strSQL .=",use_date = '".$_POST["txtdate"]."' ";
$strSQL .=",time_res = '".$_POST["timedll"]."' ";
$strSQL .=",res_ing = '".$_POST["namerestxt"]."' ";
$strSQL .=",unit = '".$_POST["txtunit"]."' ";
$strSQL .=" WHERE unit = '".$_POST["txtunit"]."'AND res_ing= '".$_POST["namerestxt"]."'";
//echo "$_GET[use_date]";
//$objQuery = mysql_query($strSQL);
$objQuery = mysql_query($strSQL) or die(mysql_error());
if($objQuery)
{
//echo "$strSQL";
echo "<script>
alert('บันทึกได้แล้ว');
window.location='list_admin.php';
</script>";
exit();
}
else
{
echo "<script>
alert('บันทึกไม่ได้');
window.location='list_admin.php';
</script>";
exit();
}
}
mysql_close($objConnect);
?>
</body>
</html>
Date :
2009-09-28 00:24:08
By :
num
ได้แล้วครับ ขอบคุณมากเลยครับ ดีใจมากเลย
ขอรบกวนอีกเรื่องครับ
ถ้าผมอยากให้ รหัสการจองเป็นตัวเลขอ่ะ เรียงลำดับไปเรื่อยๆ 1 2 3 4 5 6 7 8 9 10 11 12 โดยไม่เป็นแบบ auot เป็นเพียง int เฉยๆ
แล้วผมเมื่อลบ 5 9 ไป ก็จะเหลือ 1 2 3 4 6 7 8 10 11 12 แล้วเมื่อผมเพิ่มข้อมูลเพิ่มอีก 1 record อยากให้รหัสการจอง +1 ไปเรื่อยๆ
หาค่าที่หายไป คือ 5 ให้เพิ่ม 5 ลงไป จะต่อเขียนโค้ดยังไงครับ
Date :
2009-09-28 00:28:35
By :
oasiis
Load balance : Server 05