วันศุกร์ที่ 1 ตุลาคม พ.ศ. 2553

ระบบล็อกอิน ตอนที่ 2 การเขียนสคริปต์PHP เพื่อตรวจสอบความถูกต้องของUsernameและPassword ตอนจบ

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


จากนั้น เราก้อมาลุยกันเลยคับ!!!
เมื่อสั่งให้มันรันและกรอกข้อมูลลงในช่องUsernameและPassword ดังรูป


หากใส่Username และ Password ถูกต้องจะได้ผลลัพธ์ดังรูปคับ


หากใส่ไม่ถูกต้องจะได้ผลลัพธ์ดังรูป


เรามาดูโค๊ดกันคับ 
++ให้กำหนด Star Session และ Import ไฟล์ config.php เข้ามา


บรรทัดที่ 2 คำสั่ง session_start() คือ การประกาศการเก็บค่าจาก Web Server เพื่อนำมาเก็บไว้ในเครื่องของClient เพื่อใช้อ้างอิงเกี่ยวกับการใช้งานของUserคนนั้นๆ (เราจะได้เห็นภาพมากยิ่งขึ้นในบทความต่อไป คือในส่วนของระบบข้อมูลส่วนตัวของสมาชิกคับ) ส่วนบรรทัดที่ 3 คือการเรียกใช้คำสั่งของADODBเพื่อเข้าถึงฐานข้อมูลของเรา

++สำหรับพระเอกของบทความนี้คับ พิมพ์สคริปต์เหล่านี้เข้าไปใต้สคริปต์ของจาวาสคริปต์


บรรทัดที่ 49 ตรวจสอบParameter Request ที่ส่งมาว่าคือ POST(ส่งค่าผ่านฟอร์ม) หรือไม่ หากว่าใช่ ให้ทำงานตั้งแต่บรรทัดที่ 50-62 
บรรทัดที่ 52 ตรวจสอบUsername และ Password ซ้ำอีกครั้งนึง ว่าเป็นค่าว่างหรือไม่ หากไม่เป็นค่าว่า ให้คำสั่งตั้งแต่ 53-61 ทำงาน
บรรทัดที่ 53 ส่งคำสั่ง SQL ไปตรวจสอบในฐานข้อมูลว่ามีUsername กับ Passwordนี้อยู่หรือไม่ แล้ว Return ค่ามาเก็บไว้ในตัวแปร $rs_login ซึ่งค่าที่ได้คือจำนวนของแถว หากเป็นศูนย์แสดงว่า ไม่พบUsernameและPasswordในเทเบิล tb_member คับ
บรรทัดที่ 54 กำหนดเงื่อนไขว่า ถ้าค่าที่ได้เท่ากับ1 ให้สร้างตัวแปรแบบsession (บรรทัดที่ 55 )  มารับค่าคือ ชื่อUsername นั่นเอง และแสดงไดอะล็อก(บรรทัด56-57) หากมีค่าที่ได้นอกเหนือจาก 1 ให้แสดงไดอะล็อกแจ้งเตือนว่า Username หรือ Password ไม่ถูกต้อง

สามารถดาวโหลดโค๊ดที่สมบูรณ์แล้วของบทความนี้ได้จากที่นี่คับ

22 ความคิดเห็น :

  1. ไม่ระบุชื่อ30 กรกฎาคม 2554 03:32

    Warning: require_once(/bigsia/adodb/adodb.inc.php) [function.require-once]: failed to open stream: No such file or directory in C:\AppServ\www\bigsia\config.php on line 2

    Fatal error: require_once() [function.require]: Failed opening required '/bigsia/adodb/adodb.inc.php' (include_path='.;C:\php5\pear') in C:\AppServ\www\bigsia\config.php on line 2

    พี่คะมันขึ้น ERROR งี้อะคะ บรทัดเดียวเรย แก้ไงก็ไม่ได้ ช่วยทีนะคะ

    ตอบลบ
  2. path ของ ไฟล์ adodb.inc.php ไม่ถูกคับ มันเลยฟ้องว่า ไม่พบไฟล์ในไดเร็กทอรี่

    ตอบลบ
  3. ไม่ระบุชื่อ7 พฤษภาคม 2555 01:25

    Fatal error: Call to a member function Execute() on a non-object in C:\AppServ\www\phpweb\weppage\Gen_register.php on line 210

    มันขึ้น error อย่างนี้ค่ะ ต้องแก้อย่างไรคะ

    ตอบลบ
  4. มันไม่พบ เมธอด Execute() ครับ
    แสดงว่า ยังไม่ได้ใช้คำสั่ง require_once ('config.php'); ให้เลื่อนขึ้นไปดูโคีดข้างบนเลยครับ ที่เขียนว่า ให้กำหนด Start Session และ Import ไฟล์ config.php เข้ามา

    ตอบลบ
  5. ไม่ระบุชื่อ7 พฤษภาคม 2555 21:00

    ใส่ไปแล้วค่ะ แต่มันยังขึ้นอยู่
    ต้องไปตั้งค่าอะไรที่ไฟล์ config.php ไหมคะ

    ตอบลบ
  6. ผมเขียนหน้า login ตามทุกขั้นตอน หน้าสมัครสมาชิกสามารถใช้งานได้เข้าไปตรวจที่ phpAdmin ข้อมูลเข้าทุกอย่าง แต่พอผมลอง login ดูกลับถูกว่า Useneme กับ Password ไม่ถูกต้อง เข้าไปดูที่ phpAdmin
    ก็ตรง ตรวจการเขียนก็ถูก ไม่รู้ว่าผิดตรงส่วนไหนครับ และควรแก้ยังไงครับ

    ตอบลบ
  7. ลอง echo $_POST['User'] กับ $_POST['Pass'] ออกมาดูครับ ว่ามีค่าหรือป่าว และตรวจสอบคำสั่ง sql ด้วยครับ ว่าใส่ชื่อ table,field ตรงกับฐานข้อมูลหรือไม่

    ตอบลบ
  8. ไม่ระบุชื่อ2 พฤศจิกายน 2555 17:54

    มีคำถามครับ

    ถ้าผมต้องการให้userID มันโชเวลาเค้าlockin แล้วอะครับ
    จะทำยังไง เพราะผมลองใช้โคตแบบที่โชเวลาโชitem สินค้าแล้ว
    มันก็โชตามปกติ แต่เวลาlockout แล้ว มันก็ยังโชชื่อเดิมอยู่
    โคตนี้อะครับที่ผมบอกว่าใช้แล้วมันไม่เปลียนชื่อ เวลาlockout
    Execute("SELECT * FROM tb_member ORDER BY mb_userID");
    ?>

    fields["mb_userID"];?>

    ผมจะทำยังไงดีครับ
    ขอบคุณครับ

    ตอบลบ
    คำตอบ
    1. ก็สร้างตัวแปรsessionเก็บUserIDไงครับ
      $_SESSION['ss_userID']=$userID;
      เวลาจะเอาไปใช้ก็เอาตัวแปร $_SESSION['ss_userID'] ไปใช้ได้ทุกเพจเลยครับ
      เวลา logout ต้องเขียนโค๊ดเคลียร์ค่าsessionตัวนี้ด้วยครับคือ unset($_SESSION['ss_userID']);

      ลบ
  9. ไม่ระบุชื่อ5 พฤศจิกายน 2555 02:44

    ขอโทษนะครับ ผมทำแล้วมันไม่ได้ ส่งสัยผมจะวางผิดที่มั่งครับ
    $_SESSION['ss_userID']=$userID; ผมจะเอาไปวางไว้ตรงไหนอะครับ
    $_SESSION['ss_userID'] คือตัวที่โชชื่อช่ายป่าวครับ แล้วจะไปวางไว้ตรงไหนดีอะครับ

    เพราะทำผมทำมันไม่มีขึ้นอะไรเยยอะครับ
    ขอบคุณครับ

    ตอบลบ
    คำตอบ
    1. ตกลงจะให้แสดงอะไรกันแน่ครับ UserID หรือ Username หรือ ชื่อ-นามสกุล ของสมาชิกครับ
      ถ้าจะให้แสดงอะไรก็ใช้ session เก็บฟิลด์นั้นๆได้ครับ เช่น
      $_SESSION['SS_USERNAME']=$result['username'];
      $result คือตัวแปรที่ดึงค่าจากฐานข้อมูลนะครับโดยจัดเก็บแบบ array ส่วน username คือชื่อฟิลด์จากฐานข้อมูลนะครับ
      ถ้าจะให้แสดงก็ใช้คำสั่ง echo ได้เลยครับ เช่น echo $_SESSION['SS_USERNAME'];

      ลบ
  10. พี่ครับถ้าผมอยากเขียนcode ให้ถ้าเป็นแอดมินเท่าานั้นถึงจะเข้าไปยังหน้า หลังร้านได้อ่ะครับ
    ต้องแก้ยังไงบ้างหรอครับ ในส่วนของlogin

    ตอบลบ
    คำตอบ
    1. สังเกตุฟิลด์ mb_level ของเทเบิล tb_member ในบทความนี้ นะครับ จะเป็นตัวแยกผู้ใช้งานแต่ละระดับครับ สามารถกำหนดค่าได้ตามใจชอบเช่น 1=admin , 2=user เราใช้ตัวแปร Session มาเก็บครับ ถ้ามีค่าเป็น 1 ก็ให้ลิงค์ไปหน้า adminหรือหลังร้าน ถ้าเป็น 2 ก็ไปหน้า member

      ลบ
    2. รบกวนพี่แนะนำการเขียนไส่ลงไปได้ป่ะครับ ผมมือใหม่ครับ
      กำลังศึกษาอยู่ ผมลองๆแล้วมันไม่ผ่านอ่ะครับ ขอบคุณมากครับสำหรับความรู้

      ลบ
    3. บรรทัด 53 เพิ่มคำสั่ง SELECT COUNT(mb_user),mb_level
      ให้สังเกตุคำสั่ง $_SESSION['ss_login']=$User;
      บรรทัดต่อมาให้ใส่คำสั่ง $_SESSION['ss_level']=$rs_login->fields[1];
      โดยผมกำหนดให้ค่า 1=admin นะครับ
      if($_SESSION['ss_level']==1){//แสดงว่าเป็น admin
      header('Location:admin.php');//ไปหน้า admin
      } else{//แสดงว่าเป็น user
      header('Location:user.php');//ไปหน้าสมาชิก
      }
      แต่ต้องเอาบรรทัดที่มีคำสั่ง echo ออกด้วยนะ ไม่งั้นคำสั่ง header จะมีปัญหาครับ
      เป็นคอนเซ็ปง่ายๆ ลองเอาไปใช้งานดุนะครับ

      ลบ
    4. ขอบคุณมากๆนะครับ

      ลบ
  11. ขอโค๊ดตัวอย่างแบบเต็มได้ไหมค่ะ ในส่วนการ login ของ admin พอดีทำตามแล้วยังไม่เข้าใจค่ะ ยังมือใหม่อยู่เลย รบกวนด้วยนะค่ะ...

    ตอบลบ
    คำตอบ
    1. ลองค้นให้ไฟล์นี้ดูครับ http://www.4shared.com/file/ASJptEkC/exshops.html ไฟล์น่าจะชื่อ login.php ครับ

      ลบ
    2. ขอลิงโหลดไฟหน่อยครับ

      ลบ
  12. ขอบคุณมากนะค่ะ โหลดมาแล้วเจอ flogin.php มีแต่ในส่วนของการเข้าระบบของ user เท่านั้นค่ะ รบกวนด้วยนะค่ะ คือต้องการให้เข้าไปหน้าของ admin ดังความเห็นที่ระบุข้างต้นค่ะ ลองเพิ่มคำสั่งบรรทัดที่ 53 ตามที่พี่อธิบายคนข้างบนแล้วแต่ยังไม่ได้ ขอโค๊ดในส่วนนี้แบบเต็มนะค่ะ ขอบคุณมากๆๆๆค่ะ

    ตอบลบ
    คำตอบ
    1. นี่เป็นโค๊ดที่สอนจบแล้วครับ ผมจะสอนมาถึงแค่ล็อกอินเท่านั้น ถ้าอยากให้เด้งไปหน้า admin เมื่อล็อกอินผ่านแล้ว ให้เพิ่มคำสั่ง window.location='admin.php'; หลังคำสั่ง $('#dialog').dialog('open'); ใน if เงื่อนไขแรกนะครับ

      ลบ