ต่อยอดจาก Auto Increment แล้วคำนวณ Session ด้วยต้องทำยังไง
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ต่อยอดจาก Auto Increment แล้วคำนวณ Session ด้วยต้องทำยังไง
จาก Code นี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <?php $autoVar1 = array (); $autoVar2 = array (); $connectDB = mysql_connect( "localhost" , "root" , "12345" ) or die ( "Error Connect to Database" ); mysql_select_db( "configmaker" , $connectDB ); $q = "SELECT ID FROM test WHERE ID ORDER BY ID " ; $qr =mysql_query( $q , $connectDB ); $i =0; while ( $rs =mysql_fetch_array( $qr )){ $i ++; $autoVar1 [ $rs [ 'ID' ]]= $rs [ 'ID' ]; $autoVar2 [ $i ]= $i ; } // เปรียบเทียบ array หาค่าที่ถูกลบ ถ้าไม่มี ให้เป็น null $nextID =( array_shift ( array_diff_key ( $autoVar2 , $autoVar1 ))!= "" )? array_shift ( array_diff_key ( $autoVar2 , $autoVar1 )):null; if ( $nextID == "" ) { $q = "SELECT max(ID) from test" ; $result = mysql_query( $q , $connectDB ) or die ( "Error Query [" . $q . "]" ); $total_max = mysql_result( $result ,0); $nums = ++ $total_max ; $nextID = str_pad ( $nums ,4, "0" ,STR_PAD_LEFT); echo $nextID ; // ค่า id autoincrement สำหรับเพิ่มในฐานข้อมูลเมื่อไม่มีการลบ mysql_close( $connectDB ); } else { $nextID = str_pad ( $nextID ,4, "0" ,STR_PAD_LEFT); echo $nextID ; // ค่า id autoincrement สำหรับเพิ่มในฐานข้อมูลเมื่อมีการลบ mysql_close( $connectDB ); } ?> |
Code นี้จากหัวข้อ ต้องการสร้าง php autonumber ที่สามารถ reuse ผมต้องการให้เมื่อเวลามี User เข้ามา หลายๆ Session แล้วมีการคำนวณ Session ที่ ดึง Page นี้เข้าไปด้วย เพื่อลดการซ้ำของ $nextID สมมุติ คนที่ 1 ได้ เข้ามาที่ หน้านี้ก่อน แล้วได้เลข 10 ไปแต่ยังไม่ทำการ save ข้อมูลไปใน Database พอคนที 2 เข้ามาที่หน้าเดียวกันแล้วได้เลข 10 เหมือนกัน เพราะว่าตัวเลขใน Database มันยังไม่ถูกเพิ่ม แล้วคนที่ 2 ทำการ Save ข้อมูลไปใน Database ก่อน พอคนที่ 1 ทำการ Save มันจะฟ้องว่าตัวเลขชนกัน ไม่ทราบว่าคุณ Ninenik พอมีวิธีแก้เรื่องนี้หรือไม่คนครับ ผมมีอยู่ 2 Idea แต่ไม่รู้วิธีทำ คือ
1) ทำ button ไว้ข้างๆตัวเลข $nextID เพื่อทำการกด Refresh ก่อนการ save
2) คำนวณจาก Session ในการ Login ใครเข้ามาที่หน้านี้ก่อน ก็จะได้ตัวเลขไปก่อน ถึงแม้จะไม่มีการ Save ก็ตาม พอคนที่เข้ามาทีหลังก็จะได้เลขต่อไป (แบบนี้ผมต้องทำ Login User ผ่าน DB หรือไม่ครับ เพราะปัจจุบันผมทำผ่าน LDAP)
รบกวนผู้รู้ช่วยแนะนำด้วยครับ
ขอบคุณครับ

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
ผมหาทางออกได้แล้วครับ โดยไม่ต้อง Show ตัวเลข $nextID ไว้เพราะไม่จำเป็นต้องจอง เอาไปคำนวณได้เลยตอน save ก็ให้มันดึงมาใช้เหมือน Auto Increment (คงไม่มีคนกด Save พร้อมกันละสิเน้อ 555 ) ทำ Web App นี่ถ้าไม่มี Flow chart ทำไปๆ ก็มึนๆ เหมือนกันนะครับ

