Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 108,482

HOME > PHP > PHP Forum > จะเก็บประวัติการเลื่อนระยะเวลาทุกครั้งที่ทำการเลื่อน และนับครั้งที่เลื่อน ทำยังไงคะTT



 

จะเก็บประวัติการเลื่อนระยะเวลาทุกครั้งที่ทำการเลื่อน และนับครั้งที่เลื่อน ทำยังไงคะTT

 



Topic : 135584



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์




พอทำการอัพเดทข้อมูล ข้อมูลมันจะทับค่าเก่าที่เคยบันทึกไว้แทน อยากให้มันบันทึกทั้งข้อมูลใหม่และข้อมูลเก่าด้วยค่ะ
อันนี้เป็นโค้ดอัพเดทค่ะ

Code (PHP)
<html>
<body>
<?
$objConnect = mysql_connect("localhost","root","123456789") or die("Error Connect to Database");
$objDB = mysql_select_db("system");
$strSQL = "UPDATE borrowreturn SET ";
$strSQL .="EndDate = '".$_POST["EndDate"]."' ";
$strSQL .="WHERE ID = '".$_GET["ID"]."' ";
$objQuery = mysql_query($strSQL);
if($objQuery)
{
	echo "Save Done.";
}
else
{
	echo "Error Save [".$strSQL."]";
}
mysql_close($objConnect);
if($result){
  echo "<script type='text/javascript'>";
  echo "window.location = 'sec_page.php'; ";
  echo "</script>";
  }else{
  echo "<script type='text/javascript'>";
  echo "window.location = 'sec_page.php'; ";
  echo "</script>";
  }
?>
</body>
</html>




Tag : PHP, MySQL, HTML, Appserv







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2020-09-29 10:12:18 By : Arreeya2116 View : 410 Reply : 21
 

 

No. 1



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


เลื่อนอะไร?

การ update ก็คือปรับปรุงของเก่าก็ถูกต้องแล้ว
ถ้าจะแทรกเข้าไปใหม่ก็ต้องใช้ insert
อยากจะให้บันทึกข้อมูลใหม่ด้วยเก่าด้วย ก็ใช้ทั้ง update, insert สิ แต่ว่าจะทำอย่างนั้นทำไม?
ถ้าจะอัพเดทจำนวน ให้มัน +1 ทุกครั้งก็ใช้แบบนี้ https://stackoverflow.com/a/3866552/128761
หรือลองถามใหม่ให้รู้เรื่องดีกว่าไหม?






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 10:42:09 By : mr.v
 


 

No. 2



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


อันนี้โค้ดฟอร์มเลื่อนระยะเวลาค่ะ คือหนูเก็บวันที่เริ่มต้น และวันที่สิ้นสุดไว้ก่อนหน้านี้แล้ว ซึ่งหนูนำตัวEnddate มาใช้ในการเลื่อน
วันที่ คืออยากให้ Newdate ที่สร้างใหม่แทนตัว Enddate แต่เคยเปลี่ยนแล้ว หน้าที่แสดงข้อมูลจากการอัพเดตไม่เลื่อนให้ อย่างงี้ต้องทำยังไงคะ
ปล.save_sliding.php คือโค๊ดที่แปะไว้ข้างต้น

Code (PHP)
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

<html>
<body>
<form action="save_sliding.php?ID=<?=$_GET["ID"];?>" name="frmEdit" method="post">
<?
$objConnect = mysql_connect("localhost","root","123456789") or die("Error Connect to Database");
$objDB = mysql_select_db("system");
$strSQL = "SELECT * FROM borrowreturn WHERE ID = '".$_GET["ID"]."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if(!$objResult)
{
	echo "Not found ID=".$_GET["ID"];
}
else
{
?>

<div class="form-group">
    <div class="col-sm-2" align="right">ชื่อโครงการ</div>
    <div class="col-sm-3" align="left">
    <input type="text" name="project_name" size="2" disabled="disabled" value="<?=$objResult["project_name"];?>"class="form-control">
    </div>
  </div><br><br>

  <div class="form-group">
    <div class="col-sm-2" align="right">วันที่เดิม</div>
    <div class="col-sm-3" align="left">
    <input type="StartDate" name="StartDate" size="2" disabled="disabled" value="<?=$objResult["StartDate"];?>"class="form-control">
    </div>
  </div><br>
  
  <div class="form-group">
    <div class="col-sm-2" align="right">ถึง</div>
    <div class="col-sm-3" align="left">
    <input type="EndDate" name="EndDate" size="2" disabled="disabled" value="<?=$objResult["EndDate"];?>"class="form-control">
    </div>
  </div><br><br>

  <div class="form-group">
    <div class="col-sm-2" align="right">เลื่อนเป็นวันที่</div>
    <div class="col-sm-3" align="left">
    <input type="date" name="EndDate" size="20"  value=""class="form-control">
    </div>
  </div><br>

  <div class="form-group">
    <div class="col-sm-2"> </div>
    <div class="col-sm-3">
      <button type="submit" class="btn btn-success" name= "save" id="btn"> บันทึก </button>
    </div>
  </div>
  </form>
  <div class="col-sm-6">
</div>

  <?
  }
  mysql_close($objConnect);
  ?>
  </form>
</body>
</html>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 11:15:57 By : Arreeya2116
 

 

No. 3



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


ผมยังไม่เห็น newdate ตรงไหนเลย

แล้ว enddate คือถ้าจะเปลี่ยนข้อมูลนี้ ก็ใช้ update ก็ถูกแล้ว
ทีนี้พอ update แล้วข้อมูลในฐานข้อมูลเปลี่ยนหรือไม่?
ถ้าข้อมูลในฐานข้อมูลเปลี่ยนก็ถูกแล้ว ถ้าหน้าแสดงข้อมูลไม่เปลี่ยนอันนั้นแสดงว่าติด cache อะไรสักอย่าง อาจต้องลอง ctrl+f5
คืออ่านแล้วก็ยังไม่ค่อยเข้าใจอยู่ดีจะให้มันบันทึกยังไงกันแน่?

แล้วก็ยังใช้ mysql function อยู่อีกทั้งที่เขาให้เลิกใช้ไปเกือบจะสิบปีแล้ว https://www.thaicreate.com/php/forum/095986.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 11:28:23 By : mr.v
 


 

No. 4



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


ถ้าจะเอาแบบเปลี่ยน enddate ใหม่ โดยเก็บวันที่ enddate ของเก่าที่เคยบันทึกแล้วไว้ด้วย
แบบนั้นก็ต้องออกแบบตารางอันใหม่ขึ้นมา อย่างเช่น มี id, reference_id (อิงกับ id ของตาราง borrowreturn), previous_enddate, current_enddate
แล้วทุกครั้งที่ทำการ update enddate ในตาราง borrowreturn ก็ให้ insert ข้อมูลลงในตารางใหม่นี้ด้วย คือส่งวันที่ enddate ของเดิมมากับฟอร์ม บันทึกลงใน previous_enddate แล้ววันที่ enddate ของใหม่ลงใน current_enddate แบบนี้ก็จะได้เก็บประวัติการแก้ไขทุกๆครั้ง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 11:33:25 By : mr.v
 


 

No. 5



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณ คุณ mr.v ค่ะ

พอจะมีโค้ดตัวอย่างให้ดูมั้ยคะ หนูงงตรงตัว insert ค่าค่ะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 11:54:06 By : Arreeya2116
 


 

No. 6



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


Code (PHP)
<form method="post" action="save.php?id=<?php echo $_GET['ID']; ?>">
end date ปัจจุบัน <?=$objResult["EndDate"];?><br>
<input type="hidden" name="previous_enddate" value="<?=$objResult["EndDate"];?>">
เลื่อน end date ใหม่เป็น
<input type="date" name="current_enddate">
</form>

form.php






Code (PHP)
<?php
if (!isset($_POST['current_enddate']) || empty($_POST['current_enddate'])) {
    echo 'กรุณากรอกวันที่!';
    exit();
}

if ($_POST['current_enddate'] != $_POST['previous_enddate'])) {
    // ถ้าวันที่มีการเปลี่ยนแปลงจากของเดิม
    // UPDATE borrowreturn ... (สั่งอัพเดท)
    // INSERT INTO (สั่งเพิ่มเก็บประวัติการแก้ไข)
}

save.php




ไม่ได้ทดลองรัน แต่โค้ดคร่าวๆประมาณนี้ ออกแบบตารางเก็บประวัติการแก้ไข แล้วใช้คำสั่ง insert ธรรมดาแทรกลงไปหลังการ update
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 12:32:13 By : mr.v
 


 

No. 7

Guest


เลื่อนผ่านแล้วค่ะ แต่ข้อมูลยังไม่เข้าเลยย
code

Code (PHP)
if (!isset($_POST['current_enddate']) || empty($_POST['current_enddate'])) {
    echo 'กรุณากรอกวันที่!';
    exit();
}

if ($_POST['current_enddate'] != $_POST['previous_enddate']) {
    $objConnect = mysql_connect("localhost","root","123456789") or die("Error Connect to Database");
    $objDB = mysql_select_db("system");
    $strSQL = "UPDATE borrowreturn SET ";
    $strSQL .="EndDate = '".$_POST["EndDate"]."' ";
    $strSQL .="WHERE ID = '".$_GET["ID"]."' ";

    $strSQL1 = "INSERT INTO sliding_date (ID, previous_enddate, current_enddate)
                VALUE ('$ID', '$previous_enddate', '$current_enddate')";

    $objQuery = mysql_query($strSQL);
    $objQuery1 = mysql_query($strSQL1);


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 14:22:13 By : Arreeya2116
 


 

No. 8



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 7 เขียนโดย : Arreeya2116 เมื่อวันที่ 2020-09-29 14:22:13
รายละเอียดของการตอบ ::
คุณลองทำความเข้าใจเรื่องตัวแปรดีกว่ามั้ง ดูเหมือนไม่เข้าใจอะไรเลย จะเรียกใช้ก็เรียกได้ยังไง
$current_enddate มาจากไหน $previous_enddate มาจากไหนก็ไม่มีระบุ แล้ว insert ก็ผิด ผมให้ใส่ id ของตารางหลักไปเป็น reference id ของตารางเก็บประวัติ ก็เอาไปใส่ใน id (pk) ของตารางเก็บประวัติ.

ทำความเข้าใจโค้ด อย่าลอกอย่างเดียวครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-29 16:53:18 By : mr.v
 


 

No. 9

Guest


ถ้าเพิ่มค่า EndDate เข้ามาแล้ว จะเลื่อนโดยการใช้ NewDate เพื่อให้ NewDate เข้าดาต้าเบสเก็บวันที่ใหม่
แล้วที่นี้หนูจะสามารถเรียกใช้ตัว NewDate ให้มาแสดงในEndDate ได้มั้ยคะ เหมือนแทนที่กันไปเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-30 10:59:46 By : Arreeya2116
 


 

No. 10



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : Arreeya2116 เมื่อวันที่ 2020-09-30 10:59:46
รายละเอียดของการตอบ ::
ถ้าตามที่ผมเข้าใจในคห. 4
NewDate ก็คือวันที่สิ้นสุดอันใหม่
EndDate ก็คือวันที่สิ้นสุดของเก่า
การบันทึกในตาราง borrowreturn ตรงคอลัมน์ EndDate ก็ใช้ NewDate เพราะเราต้องการวันที่ใหม่
ส่วนการบันทึกในตาราง sliding_date ที่ว่าให้เก็บประวัติ ก็เอา EndDate ไปใส่ในคอลัมน์ previous_enddate แล้วเอา NewDate ไปใส่ในคอลัมน์ current_enddate ส่วน reference_id ก็คือ ID จากตาราง borrowreturn.

ส่วนการแสดงผลก็เรียกตามชื่อคอลัมน์ในฐานข้อมูล

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-30 11:55:44 By : mr.v
 


 

No. 11



โพสกระทู้ ( 8,730 )
บทความ ( 2 )



สถานะออฟไลน์


จาก คห 4 อธิบายเพิ่มเติม

ศึกษา ตารางหลัก(main) ตารางรอง (transaction detail)
คือหลักการ insert update รู้สึกจขกท จะรู้อยู่แล้ว ถ้าเข้าใจเรื่อง main / detail ก็จะสามารถประยุกตืมาใช้งานได้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-09-30 13:07:47 By : Chaidhanan
 


 

No. 12

Guest


ขอบคุณ คุณ mr.v มากเลยค่ะ ตอนนี้ได้เกือบหมดแล้ว

แต่ติดตรงที่ EndDate เป็นตัวที่เราใช้เพิ่มข้อมูลเข้ามา เมื่อนำ NewDate มาแทนที่ในตัว EndDate แล้ว เราจะเพิ่มค่าตัว EndDateไม่ได้ค่ะ
คืออย่างงี้ต้องทำยังไงคะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-01 14:22:46 By : Arreeya2116
 


 

No. 13



โพสกระทู้ ( 415 )
บทความ ( 0 )



สถานะออฟไลน์
Facebook

คหสต.
คือให้มัน insert เพียวๆ เลยได้หรือเปล่าครับ
ไม่ต้องมีอัพเดท
อย่างเช่น คุณมีวันที่เก่าอยู่แล้ว 1/10/2563
ก็ insert ข้อมูลวันที่เลื่อนนัดใหม่เข้าไป 5/10/2563 แล้วก็ให้มันเก็บข้อมูลเก่าไปด้วยคือ 1/10/2563
ถ้าเลื่อนอีกก็ insert เข้าไปอีก เลื่อนนัดใหม่เป็น 10/10/2563 แล้วก็ให้มันเก็บข้อมูลเก่าไปด้วยคือ 5/10/2563
ถ้าเลื่อนอีกก็ทำไปเรื่อย ๆครับ

ซึ่่งในฐานข้อมูลก็จะเก็บเป็น
ครั้งที่ 1 นัด 1/10/2563
ครั้งที่ 2 นัด 5/10/2563 นัดเก่า 1/10/2563
ครั้งที่ 3 นัด 10/10/2563 นัดเก่า 5/10/2563

เวลาแสดงข้อมูลเราก็เลือก แสดงวันที่นัดโดย ให้แสดงตารางนัดล่าสุดกับตารางเก่า

ลองไปดูพวก PK กับ FK ดูครับ ถ้าได้พวก main/detail เหมือน คห 11 น่าจะทำได้ง่ายขึ้นครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-01 15:07:31 By : nobetaking
 


 

No. 14



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 12 เขียนโดย : Arreeya2116 เมื่อวันที่ 2020-10-01 14:22:46
รายละเอียดของการตอบ ::
ถามงงๆ เรียงลำดับขั้นตอนและรายละเอียดใหม่ได้มั้ยครับ
enddate ของอะไร form, db?? เพิ่มเข้าไปตรงไหน? แทนที่ตรงไหน? แล้วจะเพิ่มอะไรเข้าไปตรงไหนตารางไหน??
จริงๆมันก็ไม่ได้มีอะไรซับซ้อนมากเลยนะครับถ้าตามแบบที่ผมบอกในคห. 4


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-01 17:33:37 By : mr.v
 


 

No. 15



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 13 เขียนโดย : nobetaking เมื่อวันที่ 2020-10-01 15:07:31
รายละเอียดของการตอบ ::
ลอง INSERT อย่างเดียวแล้ว ค่า NewDate มันขึ้นเป็นอีกเป็นอีกบรรทัดนึง อยากให้มันขึ้นในบรรทัดเดียวกันกับข้อมูลที่เพิ่มเข้ามาอันเก่า อันนี้มีวิธีแก้มั้ยคะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-06 09:17:03 By : Arreeya2116
 


 

No. 16



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


หน้าเพิ่มข้อมูล EndDate(1)

1

หน้าตารางแสดงข้อมูล EndDate (2)

2

หน้าเลื่อนวันที่ใช้ NewDate (3)

3

ตอนนี้เชื่อมค่า previous_enddate,current_enddate ตามที่คุณ mr.v บอกได้แล้ว
ถ้าอยากนำ NewDate ไปใส่แทนในตารางแสดงข้อมูล (2) พอจะมีวิธีไหมคะ โดยไม่ให้ทับกับ EndDate เมื่อ UPDATE ค่าเข้าไปแล้ว


ประวัติการแก้ไข
2020-10-06 09:43:49
2020-10-06 09:44:22
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-06 09:42:40 By : Arreeya2116
 


 

No. 17



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


export create table โครงสร้างตารางออกมา
พร้อมตัวอย่างข้อมูลสัก 2-3 รายการ (insert into ...)

เอาโค้ดเฉพาะที่เกี่ยวกับการ update แบบล่าสุดนี้มา

เพราะยิ่งถามยิ่งงง ผมไม่รู้ว่าคุณไปถึงไหนแล้วทำไมมันจึงซับซ้อนขนาดนั้นทั้งที่ความจริงมันไม่ได้ซับซ้อนขนาดนั้นเลย ถ้าคุณดูตัวอย่างของผมแล้วเปรียบเทียบเป็นอ่านโค้ดเข้าใจ มันไม่ซับซ้อนเลยครับ

หรือไม่ก็รอท่านอื่นมาตอบเพราะผมงง ไปไม่ถูกแล้วเหมือนกัน


ประวัติการแก้ไข
2020-10-06 12:00:10
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-06 11:59:29 By : mr.v
 


 

No. 18



โพสกระทู้ ( 1,447 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

เกมนี้ว่าจะไม่กวนแล้ว (แอบลุ้น 100 rep )

จากที่อ่านซ้ำหลายๆ รอบ เข้าใจว่า ที่ จขกท.ต้องการคือ
ใช้คำสั่ง UPDATE โดยสร้างฟิลด์ใหม่ขึ้นมาทุกครั้ง
แต่บังเอิญว่าการ UPDATE มันต้องอ้างชื่อฟิลด์ หรือ ต้องมีฟิลด์อยู่แล้ว
ดังนั้น ต้องมีขอบเขตของการเลื่อน เพราะในความเป็นจริงไม่มีห้อง/หอสมุดที่ไหนให้เลื่อนได้ไม่จำกัด

ออกแบบตารางในลักษณะนี้

borrowreturn

| ID | ref_id | startdate | enddate | hist_enddate_1 | hist_enddate_2 | hist_enddate_N |

N คือ จำนวนครั้งสูงสุดที่สามารถเลื่อนได้


แต่ถ้าจำเป็นต้อง unlimited overdue ทำตามท่านอื่นที่ได้แนะนำไว้แล้ว
โดย ศึกษาเพิ่มเติมเรื่องความสัมพันธ์(Relationship)
ของระบบ RDBMS (Relational DataBase Management System)
ดังนั้น การออกแบบตาราง จะมีสองตารางที่มีความสัมพันธ์กันในลักษณะ ดังนี้

borrowreturn

| ID | ref_id | startdate | enddate |

overdue

| No | return_id | date |


overdue คือ ตารางเก็บวันที่การเลื่อน
date คือ enddate เดิม
No คือ ครั้งที่เลื่อน

เวลาอัปเดตก็ JOIN เอา
https://www.mysqltutorial.org/mysql-update-join/

หรือทำใน overdue เลย โดยเปลี่ยน date เป็น enddate ล่าสุด แทน
จะได้ current_enddate เป็น overdue.date ครั้งสุดท้าย (record ล่างสุด)

ที่เหลือก็แค่ใช้คำสั่ง MySQL ไม่ว่าจะเป็น SELECT/UPDATE
https://www.w3schools.com/php/php_mysql_select.asp
https://www.w3schools.com/php/php_mysql_update.asp


ประวัติการแก้ไข
2020-10-06 12:41:54
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-06 12:39:48 By : PhrayaDev
 


 

No. 19



โพสกระทู้ ( 4,010 )
บทความ ( 8 )



สถานะออฟไลน์


ผมลองทำตัวระบบนัดหมายแบบจขกท.มาให้ดูแล้ว ทำแบบง่ายๆเลยนะ เน้นๆส่วนสำคัญคือเลื่อนวันที่สิ้นสุด
จขกท.ลองเอาไป import sql แล้วทดลองเล่นดูนะว่าใช่แบบนี้ไหม? (ตอบด้วย)

เงื่อนไขคือต้องรันบน PHP 7.0+ หรือใหม่กว่า เพราะผมขี้เกียจโค้ดแบบเก่า มันยาว.

Code (SQL)
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
DROP TABLE IF EXISTS `appointment`;
CREATE TABLE IF NOT EXISTS `appointment` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `start_date` date DEFAULT NULL,
  `end_date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
DROP TABLE IF EXISTS `appointment_track`;
CREATE TABLE IF NOT EXISTS `appointment_track` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `appointment_id` int(11) NOT NULL COMMENT 'refer to appointment.id',
  `previous_end_date` date DEFAULT NULL,
  `current_end_date` date DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `appointment_id` (`appointment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

appointment.sql import ใส่ฐานข้อมูล test_appointment หรือชื่ออื่นก็ได้แต่ต้องแก้ config ให้ถูกด้วย





Code (PHP)
<?php


/**
 * Escape HTML using `htmlspecialchars()` with `ENT_QUOTES`.
 *
 * @param string $string
 * @return string
 */
function escHtml(string $string): string
{
    return htmlspecialchars($string, ENT_QUOTES);
}// escHtml


/**
 * Get POST value from input name and escape HTML.
 *
 * @param string $name The input name.
 * @return string
 */
function inputValue(string $name = '', $default = null): string
{
    if (isset($_POST[$name])) {
        return escHtml($_POST[$name]);
    }

    if (!is_null($default) && is_string($default)) {
        return $default;
    }
    
    return '';
}// inputValue

functions.php





Code (PHP)
<?php


$user = 'user';
$password = 'pass';
$dbname = 'test_appointment';
$dbhost = 'localhost';
$options = [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_OBJ,
];

try {
    $Dbh = new PDO('mysql:host=' . $dbhost . ';dbname=' . $dbname, $user, $password, $options);
} catch (\Exception $ex) {
    echo 'Connection failed: ' . $ex->getMessage();
    exit();
}


require 'functions.php';

config.php (ปรับแต่งค่าต่างๆของคุณเองด้วยนะ อย่าลอกอย่างเดียว.)





Code (PHP)
<?php

require 'config.php';


$sql = 'SELECT * FROM `appointment` ORDER BY `id` ASC';
$Sth = $Dbh->prepare($sql);
$Sth->execute();
$result = $Sth->fetchAll();
$Sth->closeCursor();
unset($Sth);
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Simple appointment</title>
        <style>
            table {
                border: 1px solid #ccc;
                border-collapse: collapse;
                width: 100%;
            }
            table th,
            table td {
                border: 1px solid #ccc;
                padding: 5px;
                text-align: left;
            }
        </style>
    </head>
    <body>
        <h1>Simple appointment</h1>
        <a href="new.php">Add</a>

        <form method="post" action="delete.php">
            <table>
                <thead>
                    <tr>
                        <th></th>
                        <th>ID</th>
                        <th>Name</th>
                        <th>Start</th>
                        <th>End</th>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    if (isset($result) && is_array($result) && !empty($result)) {
                        foreach ($result as $row) {
                    ?>
                    <tr>
                        <td><input type="checkbox" name="id[]" value="<?php echo $row->id; ?>"></td>
                        <td><?php echo $row->id; ?></td>
                        <td><a href="edit.php?id=<?php echo $row->id; ?>"><?php echo escHtml($row->name); ?></a></td>
                        <td><?php echo $row->start_date; ?></td>
                        <td><?php echo $row->end_date; ?></td>
                    </tr>
                    <?php
                        }// endforeach;
                        unset($row);
                    } else {
                    ?>
                    <tr>
                        <td colspan="5">No data</td>
                    </tr>
                    <?php
                    }
                    unset($result);
                    ?>
                </tbody>
            </table>
            <button type="submit" name="action" value="delete" onclick="alert('ยังไม่มีจ้า');">Delete</button>
        </form>
    </body>
</html>

index.php





Code (PHP)
<?php

require 'config.php';


if ($_POST) {
    $name = ($_POST['name'] ?? '');
    $start_date = ($_POST['start_date'] ?? '');
    $end_date = ($_POST['end_date'] ?? '');

    $sql = 'INSERT INTO `appointment` (`name`, `start_date`, `end_date`) VALUES (:name, :start_date, :end_date)';
    $Sth = $Dbh->prepare($sql);
    $Sth->bindValue(':name', $name);
    $Sth->bindValue(':start_date', $start_date);
    $Sth->bindValue(':end_date', $end_date);
    $result = $Sth->execute();
    $id = $Dbh->lastInsertId();
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Simple appointment</title>
        <style>
            table {
                border: 1px solid #ccc;
                border-collapse: collapse;
                width: 100%;
            }
            table th,
            table td {
                border: 1px solid #ccc;
                padding: 5px;
                text-align: left;
            }
        </style>
    </head>
    <body>
        <?php
        if (isset($result) && $result === true && isset($id)) {
            echo 'Insert successfully. (ID ' . $id . ').<br>' . PHP_EOL;
        }
        ?> 
        <form method="post">
            <table>
                <tbody>
                    <tr>
                        <td>Name:</td>
                        <td><input type="text" name="name" value="<?php echo inputValue('name'); ?>" required=""></td>
                    </tr>
                    <tr>
                        <td>Start date:</td>
                        <td><input type="date" name="start_date" value="<?php echo inputValue('start_date'); ?>" required=""></td>
                    </tr>
                    <tr>
                        <td>End date:</td>
                        <td><input type="date" name="end_date" value="<?php echo inputValue('end_date'); ?>" required=""></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><button type="submit" name="action" value="save">Save</button></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>

new.php





Code (PHP)
<?php

require 'config.php';


$id = ($_GET['id'] ?? 0);
$sql = 'SELECT * FROM `appointment` WHERE `id` = :id';
$Sth = $Dbh->prepare($sql);
$Sth->bindValue(':id', $id, \PDO::PARAM_INT);
$Sth->execute();
$resultRow = $Sth->fetchObject();
$Sth->closeCursor();
unset($sql, $Sth);

if ($_POST && is_object($resultRow) && !empty($resultRow)) {
    $previous_end_date = ($_POST['previous_end_date'] ?? '');
    $current_end_date = ($_POST['current_end_date'] ?? '');

    $sql = 'UPDATE `appointment` SET `end_date` = :end_date WHERE `id` = :id';
    $Sth = $Dbh->prepare($sql);
    $Sth->bindValue(':id', $id);
    $Sth->bindValue(':end_date', $current_end_date);
    $result = $Sth->execute();
    $Sth->closeCursor();
    unset($sql, $Sth);

    if ($result === true) {
        // if update success.
        // insert to appointment_track
        $sql = 'INSERT INTO `appointment_track` (`appointment_id`, `previous_end_date`, `current_end_date`) VALUES (:appointment_id, :previous_end_date, :current_end_date)';
        $Sth = $Dbh->prepare($sql);
        $Sth->bindValue(':appointment_id', $id);
        $Sth->bindValue(':previous_end_date', $previous_end_date);
        $Sth->bindValue(':current_end_date', $current_end_date);
        $saveTrackResult = $Sth->execute();
        $Sth->closeCursor();
        unset($sql, $Sth);
    }
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Simple appointment</title>
        <style>
            input[readonly] {
                cursor: not-allowed;
            }
            table {
                border: 1px solid #ccc;
                border-collapse: collapse;
                width: 100%;
            }
            table th,
            table td {
                border: 1px solid #ccc;
                padding: 5px;
                text-align: left;
            }
        </style>
    </head>
    <body>
        <h1>Postpone an appointment</h1>
        <?php
        if (!is_object($resultRow) || empty($resultRow)) {
            echo 'Not found selected item!<br>' . PHP_EOL;
        }
        if (isset($result) && $result === true) {
            echo 'Update successfully.<br>' . PHP_EOL;
            if (isset($saveTrackResult) && $saveTrackResult === true) {
                echo 'Insert changes to `appointment_track` successfully.<br>' . PHP_EOL;
            }
        }

        if (is_object($resultRow) && !empty($resultRow)) {
        ?> 
        <form method="post">
            <table>
                <tbody>
                    <tr>
                        <td>Name:</td>
                        <td><input type="text" name="name" value="<?php echo inputValue('name', $resultRow->name); ?>" readonly=""></td>
                    </tr>
                    <tr>
                        <td>Start date:</td>
                        <td><input type="date" name="start_date" value="<?php echo inputValue('start_date', $resultRow->start_date); ?>" readonly=""></td>
                    </tr>
                    <tr>
                        <td>Current End date:</td>
                        <td><input type="date" name="previous_end_date" value="<?php echo inputValue('previous_end_date', $resultRow->end_date); ?>" readonly=""></td>
                    </tr>
                    <tr>
                        <td>New End date:</td>
                        <td><input type="date" name="current_end_date" value="<?php echo inputValue('current_end_date'); ?>" required=""></td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><button type="submit" name="action" value="save">Save</button></td>
                    </tr>
                </tbody>
            </table>
        </form>
        <?php
        }// endif; found
        ?>
    </body>
</html>

edit.php




ทั้งหมดจะมี 6 ไฟล์
ถ้าลองเล่นแล้วใช่เลย แบบนี้ที่ต้องการ คุณก็ต้องทำความเข้าใจโค้ด อ่านโค้ด เปรียบเทียบชื่อคอลัมน์กับงานของคุณเอง
อย่าลอกอย่างเดียว!!!!!
แล้วก็เลิกใช้ mysql_xxx function ได้แล้ว เคยบอกไปแล้วนะ เขาเลิกใช้กันมานานแล้วครับ


ประวัติการแก้ไข
2020-10-06 13:14:15
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-06 13:01:07 By : mr.v
 


 

No. 20



โพสกระทู้ ( 24 )
บทความ ( 0 )



สถานะออฟไลน์


Code (PHP)
if ($_POST['NewDate'] != $_POST['EndDate']) {
    $objConnect = mysql_connect("localhost","root","12345678") or die("Error Connect to Database");
    $objDB = mysql_select_db("project");
    $strSQL = "INSERT INTO sliding_date(reference_id,previous_enddate,current_enddate) SELECT ID,EndDate,'".$_POST["EndDate"]."' FROM borrowreturn WHERE ID='".$_GET["ID"]."'";
    $objQuery = mysql_query($strSQL);

    
}

 
if ($_POST['NewDate'] != $_POST['EndDate']) {
    $objConnect = mysql_connect("localhost","root","12345678") or die("Error Connect to Database");
    $objDB = mysql_select_db("project");
    $strSQL = "INSERT INTO borrowreturn(NewDate) SELECT previous_enddate FROM sliding_date WHERE ID='".$_GET["ID"]."'";
    $objQuery = mysql_query($strSQL);

}


ขอบคุณทุกความคิดเห็นนะคะ ตอนนี้เก็บประวัติการเลื่อนได้แล้ว ถามอีกได้ไหมคะถ้าอยากเรียงลำดับทุกครั้งที่เลื่อนด้วยต้องทำยังไงคะ
4
# เลข 12 คือ reference_id

ถ้าอยากเปลี่ยนจาก reference_id เป็นลำดับของตัวนั้นๆที่เลื่อนทำไงดีค้า
เช่น
1
2
3


ประวัติการแก้ไข
2020-10-08 09:37:06
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-08 09:35:08 By : Arreeya2116
 


 

No. 21



โพสกระทู้ ( 1,447 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ทำไมไม่รันตัวเลขอีกฟิลด์ไปเลยครับ
ไม่งั้นลองดู ROW_NUMBER()
https://www.mysqltutorial.org/mysql-row_number/
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2020-10-08 13:22:58 By : PhrayaDev
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : จะเก็บประวัติการเลื่อนระยะเวลาทุกครั้งที่ทำการเลื่อน และนับครั้งที่เลื่อน ทำยังไงคะTT
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม , รับทำบัญชี , โรงงานผลิตครีม , สำนักงานบัญชี , รับจดทะเบียนบริษัท , Pangpond , รถมือสอง

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2020 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่