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

Registered : 109,027

HOME > PHP > PHP Forum > อยากให้ช่วย อธิบายขยายความ code นี้หน่อยครับ พร้อมตัวอย่างเป็นแนวทางสำหรับมือใหม่ด้วยครับ



 

อยากให้ช่วย อธิบายขยายความ code นี้หน่อยครับ พร้อมตัวอย่างเป็นแนวทางสำหรับมือใหม่ด้วยครับ

 



Topic : 092130



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



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




บอกหลักการน่ะครับ ใช้เหมือนกับ Useronline ครับ คือเมื่อ User Login ก็เปลี่ยนสถานะว่ากำลังทำงานอยู่ ไม่ให้ user อื่น ๆ Login ได้ และเมื่อ User คนนั้น Logout ก็เปลี่ยนสถานะให้เป็นว่าง

Table User
USER , PASSWORD , STATUS , TIME_LOGIN
win , 001 , 1 (1 = Login อยู่ , 0 = ว่าง)



LOGIN
SELECT * from user WHERE USER = 'user' AND PASSWORD = 'pass' AND STATUS ='0'


หลังจาก LOGIN ผ่าน

LOGIN
UPDATE user SET STATUS = '1' WHERE USER = 'user'


หลังจาก Login ผ่านแล้ว User คนอื่นก็จะไม่สามารถ Login ได้อีกครับ

และเมื่อ User Logout ก็ให้ใช้

LOG OUT
UPDATE user SET STATUS = '0' WHERE USER = 'user'


แล้วถ้า User ไม่ได้ Logout ??

ให้เชคว่า User คนดังกล่าวได้มีการใช้งานอยู่หรือไม่ โดย UPDATE เวลาทุก ๆ ครั้งที่มีการ Refresh Web Page ครับ แต่ถ้าไม่ได้มีการ UDPATE เวลาตามเวลาที่กำหนด แสดงว่าได้ ออกไปโดยไม่ผ่านการ Logout

LOG OUT
UPDATE user SET TIME_LOGIN= NOW() WHERE USER = 'user'


แนวทางของพี่วินครับ ผมมือใหม่จริงๆ ช่วยยกตัวอย่างการเขียนcode ด้วยครับ เป็นแนวทางในการทำครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2013-03-09 23:07:40 By : oilcoffee View : 920 Reply : 18
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

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

Go to : ใช้ session อย่างไร ถ้าต้องการ login ได้แค่ เครื่องเดียวเท่านั้น ของ user นั้นๆ ป้องกัน login ซ้ำ

อ่านตั้งแต่ #11 เป็นต้นไป






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-10 07:16:33 By : mr.win
 


 

No. 2



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



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


อยากได้แบบละเอียดกว่านี้นิดนึงอ่ะครับ ผมค่อนข้างฉลาดน้อยอ่ะครับ
เอาแบบกระทู้นี้ได้ไหมครับ https://www.thaicreate.com/php/forum/044757.html
ขอบคุณน้าวินมากครับ


ประวัติการแก้ไข
2013-03-10 13:58:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-10 10:37:42 By : oilcoffee
 

 

No. 3



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



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


พอมีใครจะพอช่วยได้ไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-10 19:52:33 By : oilcoffee
 


 

No. 4



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

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

อันนี้ก็ล่ะเอียดแล้วน่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 10:45:04 By : mr.win
 


 

No. 5



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



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


T_T ง่า!!!!
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 11:09:27 By : oilcoffee
 


 

No. 6



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

ได้ลอง "ศึกษาทำความเข้าใจ" โค้ดที่ผมเขียนให้เป็นตัวอย่างในกระทู้ก่อนดูบ้างหรือยังครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 13:02:29 By : cookiephp
 


 

No. 7



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



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


ลองอ่านดูแล้วครับ ลองloginครั้งแรก ก้อขึ้นว่ามีผู้ใช้งานแล้วครับ ไล่codeดูแล้วยังงงอยู่ครับว่าทำไมถึงขึ้นแต่ว่ามีผู้ใช้งานแล้วตรับ ทั้งที่เข้าใช้งานครั้งแรกอ่ะครับ รบรบกวนช่วยดูให้ทีครับ ผมลองไล่ก้อไม่รู้ว่าทำไมถึงผิด
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 13:59:36 By : oilcoffee
 


 

No. 8



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

ผมใช้ได้ปกติครับ ล็อกอินครั้งแรกก็จะ "สวัสดีคุณ ..." ตามที่คาดหวังไว้

ดังนั้นผมคิดว่าน่าจะเป็นที่ session ของคุณแล้ว

ลองโค้ดนี้ครับ ลองรันมันซ้ำๆ กัน (refresh) แล้วเช็คว่า ค่าที่ออกมามันเปลี่ยนไปมั้ย (ซึ่งมันไม่ควรเปลี่ยน)

<?php session_start(); echo session_id(); ?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 14:43:03 By : cookiephp
 


 

No. 9



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



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


ลองแล้วครับ ค่าไม่เปลี่ยนครับ
ผมใช้ FreeWebHostingArea.com ฟรีอยู่อ่ะครับเพิ่งหัดลองเล่นดู ไม่รู้ว่ามีผลอะไรรึป่าวครับ
ถ้ายังไงรบกวนช่วยทดสอบของจริงเลยครับ
ถ้าผิดพลาดยังไงรบกวนช่วยชี้แนะด้วยครับ ผมเองก้อพึ่งจะหัดทำเพิ่งเริ่มศึกษา เพิ่งจะอ่านcodeได้งูๆปลาๆครับ


ประวัติการแก้ไข
2013-03-11 15:35:49
2013-03-14 05:51:39
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 15:34:48 By : oilcoffee
 


 

No. 10



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

คงเป็นเพราะเขียนไฟล์ผิดพลาดมั้งครับ คงเขียนไฟล์ไม่ได้ permission denied มันจึงทำงานผิดพลาด (เพราะไม่มีไฟล์ถูกเขียนลงไป)

ลองเพิ่ม error_reporting(-1); เข้าไปต้นไฟล์ครับ (หลัง <?php แรก)

แล้วดูว่ามี error อย่างที่ผมว่ามั้ย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 15:49:22 By : cookiephp
 


 

No. 11



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



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


ใส่หน้าไหนครับ login.php หรือ index.php ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 15:53:10 By : oilcoffee
 


 

No. 12



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

ใส่มันทุกหน้าล่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 15:54:37 By : cookiephp
 


 

No. 13



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



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


ครับใส่เรียบร้อยแล้วครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 15:55:20 By : oilcoffee
 


 

No. 14



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



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


มันขึ้นแบบนี้อ่ะครับ
Warning: file_get_contents(admin.txt): failed to open stream: No such file or directory in /home/vhosts/trueiptv.xp3.biz/index.php on line 13
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-11 16:56:33 By : oilcoffee
 


 

No. 15



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

อย่างที่คิดครับ ปัญหาเิกิดจากเขียนไฟล์ไม่ได้ในไฟล์ login.php
มันจึงไม่มีไฟล์ที่ใช้ตรวจสอบสถานะถูกสร้างขึ้น

ผมเพิ่มเติมการตรวจการอ่านไฟล์ให้ครับ
แต่คุณต้องสร้างโฟลเดอร์ชื่อ user_status_files และต้องเป็นโฟลเดอร์ที่อนุญาตให้เขียนทับได้


login.php
<?php // หากมีตัวแปร $_POST['username'] และ $_POST['password'] ถูกส่งมา // แสดงว่าผู้ใช้ล็อกอินจากฟอร์มแล้ว if (isset($_POST['username'], $_POST['password'])) { // เริ่มต้น session session_start(); // ข้อมูลชื่อผู้ใช้ $users = array( 'admin' => 'pass', 'admin001' => '012345789', 'admin003' => 'hellov2', 'admin005' => 'โหดสัส', ); // ใช้ isset() ในการตรวจสอบ โดยหาก $_POST['username'] // มีค่าอยู่ใน key ของ array $users // ก็จะให้ผลเป็นจริง เช่น $_POST['username'] มีค่า 'admin' // และหากเป็นจริง ก็จะตรวจสอบอีกว่า $_POST['password'] // นั้นมีค่าเท่ากับค่าของ $users[$_POST['username']] // สมมติว่า $_POST['username'] มีค่า 'admin003' // ดังนั้นค่าที่จะตรวจสอบก็คือ 'hellov2' เพราะ $users['admin003'] => 'hellov2' // และใช้การตรวจสอบที่เข้มงวดกว่าคือ === แทน == (ตรวจสอบชนิดของตัวแปรด้วย) if (isset($users[$_POST['username']]) && $_POST['password'] === $users[$_POST['username']] ) { // ชื่อไฟล์ที่จะใช้เพื่อการตรวจสอบสถานะ // โดยต้องอยู่ในโฟลเดอร์ user_status_files // ต้องมีอยู่แล้ว และต้องมี permission ที่เขียนไฟล์ได้ (เช่น 777) $filename = 'user_status_files/' . $_POST['username'] . '.txt'; $can_login = false; // ตรวจว่ามีไฟล์ที่ชื่อ $filename หรือยัง // หากไม่มี if (!file_exists($filename)) { // แสดงว่ายังไม่เคยมีผู้ใช้ล็อกอินด้วย id นี้มาก่อน login ได้เลย $can_login = true; // และสร้างไฟล์ใหม่ขึ้นมา โดยให้ session_id เป็นเนื้อหาของไฟล์ // ซึ่งเราจะใช้ session_id นี้ในการตรวจว่าใครเป็นผู้ใช้ปัจจุบันในภายหลัง if (!file_put_contents($filename, session_id())) { // ถ้าเขียนไฟล์ไม่ได้ ให้จบการทำงานไปเลย exit; } } // ถ้ามีอยู่แล้ว else { // อ่านข้อมูลในไฟล์ออกมา ซึ่งจะต้องเป็น session_id ที่เคยเก็บไว้ในการติดต่อครั้งก่อน // (แต่ก็ไม่ทราบว่าเป็นของใคร) // ให้เป็นค่าแก่ตัวแปร $session_id_to_compare $session_id_to_compare = file_get_contents($filename); // เช็คว่าตรงกับ session_id() ของผู้ใช้ปัจจุบันหรือไม่ // ถ้าใช่ if ($session_id_to_compare === session_id()) { // แสดงว่าเป็นเจ้าของ session_id // ให้ล็อกอินได้ $can_login = true; } // หรือถ้าไม่ใช่ แสดงว่าไม่ใช่เจ้าของ session_id นั้น // เช็คว่าวันที่ล่าสุดที่ไฟล์มีการแก้ไขนั้น ห่างจากเวลาปัจจุบันเกิน 1 นาทีแล้วหรือยัง elseif (time() - filemtime($filename) > 60) { // หากเกินแล้ว แสดงว่าผู้ใช้คนก่อนไม่ได้ใช้งานเว็บเกิน 1 นาที // เพราะไม่ได้มีการติดต่อเข้ามาเพื่ออัพเดทเวลาล่าสุด // จึงให้ผู้ใช้ใหม่ล็อกอินได้ $can_login = true; // และให้เขียนค่า session_id ของผู้ใช้ปัจจุบันลงไปด้วย เทคโอเวอร์ซะ file_put_contents($filename, session_id()); } } // และตรงนี้ หากตัวแปร $can_login เป็นจริง if ($can_login) { // บอก $_SESSION ว่าล็อกอินแล้ว $_SESSION['login'] = true; $_SESSION['username'] = $_POST['username']; header('Location: index.php'); exit; } else { $error_message = "ไม่สามารถล็อกอินได้เพราะมีผู้ใช้ชื่อ $_POST[username] ล็อกอินอยู่"; } } else { $error_message = 'ชื่อผู้ใช้หรือรหัสผ่านผิด'; } } ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>login.php</title> </head> <body> <?php if (isset($error_message)) { echo $error_message; } ?> <form action="login.php" method="post"> Username<br /> <input type="text" name="username" /><br /> Password<br /> <input type="password" name="password" /><br /> <input type="submit" value="Login" /> </form> </body> </html>


index.php
<?php // เริ่ม session session_start(); // ถ้าไม่ได้ล็อกอินอยู่ if (!isset($_SESSION['login'])) { // ไล่กลับไปหน้าล็อกอิน header('Location: login.php'); exit; } // ชื่อไฟล์ที่จะใช้เพื่อการตรวจสอบสถานะ // โดยต้องอยู่ในโฟลเดอร์ user_status_files // ต้องมีอยู่แล้ว และต้องมี permission ที่เขียนไฟล์ได้ (เช่น 777) $filename = 'user_status_files/' . $_SESSION['username'] . '.txt'; // อ่าน session_id จากไฟล์ชื่อผู้ใช้ปัจจุบัน if (($session_id_to_compare = file_get_contents($filename))) { // เปรียบเทียบว่า session_id ในไฟล์นั้นตรงกับ session_id ของผู้ใช้ปัจจุบันหรือไม่ // ถ้าไม่ if ($session_id_to_compare !== session_id()) { // ล็อกเอาท์อัตโนมัติ // สร้างตัวแปรข้อความที่บอกว่าได้ล็อกเอาท์อัตโนมัติไปแล้ว $error_message = "เนื่องจากคุณขาดการติดต่อกับเซิร์ฟเวอร์เป็นเวลามากกว่า 1 นาที และมีผู้ใช้อื่นล็อกอินด้วยชื่อ $_SESSION[username] ไปแล้ว จึงให้ล็อกเอาท์อัตโนมัติ"; // ทำลายตัวแปร $_SESSION ทั้งหมด // โดยเฉพาะ $_SESSION['login'] เพราะเป็นตัวบ่งบอกว่าล็อกอินแล้ว // ด้วย unset() unset($_SESSION['login'], $_SESSION['username']); // หรือจะ $_SESSION = array() ก็ได้ } else { // อัพเดทเวลาแก้ไขไฟล์ล่าสุด คงสถานะออนไลน์ไว้ file_put_contents($filename, $session_id_to_compare); } } else { // ไล่กลับไปหน้าล็อกอิน header('Location: login.php'); exit; } ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>index.php</title> </head> <body> <?php // หากมีตัวแปร $error_message ถูกสร้างขึ้น if (isset($error_message)) { echo $error_message; } else { echo "สวัสดีคุณ $_SESSION[username]"; } ?> </body> </html>

ฟังก์ชั่นที่ปรากฏในคำตอบนี้ (8)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-12 02:16:38 By : cookiephp
 


 

No. 16



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



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


สร้างโฟลเดอร์แล้วแก้ให้เป็นCHMOD 777รึป่าวครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-12 06:18:20 By : oilcoffee
 


 

No. 17



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

สมาชิกที่ใส่เสื้อไทยครีเอท

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

ตอบความคิดเห็นที่ : 16 เขียนโดย : oilcoffee เมื่อวันที่ 2013-03-12 06:18:20
รายละเอียดของการตอบ ::
ใช่ครับ - - (ก็บอกอยู่ เอ้อ)

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-12 06:46:30 By : cookiephp
 


 

No. 18



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



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


ใช้ได้แล้วครับ ผ่านแล้วครับ
ขอบคุณน้าแมวมากครับที่สะละเวลามามาช่วยผม ขอบคุณมากๆครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-03-12 16:25:05 By : oilcoffee
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : อยากให้ช่วย อธิบายขยายความ code นี้หน่อยครับ พร้อมตัวอย่างเป็นแนวทางสำหรับมือใหม่ด้วยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

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