ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้
ด้วยสํานึกในพระมหากรุณาธิคุณสมเด็จพระนางเจ้าสิริกิติ์เป็นล้นพ้นอันหาที่สุดมิได้


อยากสอบถามเกี่ยวกับ facebook ค่ะ

ถาม-ตอบ แนะนำไอเดีย โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา อยากสอบถามเกี่ยวกับ facebook ค่ะ

ปัจจุบัน นักพัฒนาสามารถ ใช้ ChatGPT | Gemini | Claude | Perplexity | Deepseek ช่วยในการแก้ไขปัญหาต่างๆ ในการเขียนโปรแกรม หรือหาข้อมูลเพิ่มเติมได้ง่ายและสะดวก แนะนำให้ทุกคนใช้งานเพื่อพัฒนาศักยภาพของตัวเอง

อยากสอบถามเกี่ยวกับ facebook ค่ะ
พอดีตอนนี้ทำโค้ด Login ได้แล้วแต่ ในฐานข้อมูลเก็บ ไอดี ซ้ำกันค่ะ ซ้ำกันไม่พอ Logout ออกก็ไม่ได้ค่ะ งง มาก ไม่รู้ว่าเป็นที่อะไร ตรงไหน อยากรบกวนให้พี่นิคมาช่วยไกด์ให้หน่อยค่ะ ไม่ค่อยจะเข้าใจเลยค่ะ

อันนี้คือ โค้ดสำหรับล็อคอิน ฝั่ง Admin ค่ะ
<?php
	session_start();
	include("../Connections/connect.php");
	//include("../init.php");
require '../sdk/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'XXXXX',
  'secret' => 'XXXXXXXXXXXX',
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}

// Save to mysql
if ($user) {
	if($_GET["code"] != "")
	{
				
				$strSQL ="insert into login(lo_fb_id,lo_fb_name,lo_fb_link,lo_fb_date_register,lo_status) 
					values
					('".trim($user_profile["id"])."',
					'".trim($user_profile["name"])."',
					'".trim($user_profile["link"])."',
					'".trim(date("Y-m-d H:i:s"))."',
					'user')";
				$objQuery  = mysql_query($strSQL);
				mysql_close();
				header("location:manament_show.php");
				exit();
	}
}

// Logout
if($_GET["Action"] == "Logout")
{
	$facebook->destroySession();
	session_destroy();
	header("location:index.php");
	exit();
}

?>

คือหนูแยกโฟเดอร์นะค่ะ ส่วนโฟร์เดอร์ sdk จะอยู่ด้านนอก ที่นี้ ใช้โค้ดนี้สามารถ Logout ฝั่ง user ได้สำเร็จค่ะ แต่กลับกัน ฝั่ง admin ไม่ได้ค่ะ เลย งง มากเลยค่ะ ไม่รู็ติดตรงไหน

และอันนี้รูปดาต้าเบสค่ะ ทำไมมันถึงได้เก็บซ้ำๆ รันไปเรื่อยๆ เมื่อกด login with facebook 


รบกงนพี่นิค ช่วยดูให้หน่อยค่ะ ตอนนี้ติดหนักมากเลยค่ะ


Chickenkook 27-06-2016 18:32:57

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • CAPTCHA Image
    Play CAPTCHA Audio
    Refresh Image


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
อันนี้โค้ด html ค่ะ
<!-- navbar -->
<nav class="navbar navbar-default" role="navigation">
    	  <div class="container">
		    <!-- Brand and toggle get grouped for better mobile display -->
		    <div class="navbar-header">
		      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-brand-centered">
		        <span class="sr-only">Toggle navigation</span>
		        <span class="icon-bar"></span>
		        <span class="icon-bar"></span>
		        <span class="icon-bar"></span>
		      </button>
		      <div class="navbar-brand navbar-brand-centered">
              	<a href="../index.php"><img src="../images/logo/logo2.png"></a>
              </div><!-- navbar-brand -->
		    </div><!-- navbar-header -->
		    <!-- Collect the nav links, forms, and other content for toggling -->
		    <div class="collapse navbar-collapse" id="navbar-brand-centered">
            	<ul class="nav navbar-nav navbar-right">
		        	<li><a href="../index.php"><img src="../images/icon/home.png" width="30px"/> Home</a></li>
                    <li>
                    	<?php
                    		if($_SESSION["lo_email"] == "" && $user == ""){
								echo '<a href="#">Post</a>';
							}
							else if($user){
								  echo '<a href="" class="dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<img src="https://graph.facebook.com/'.$user.'/picture">&nbsp;'.$user_profile["name"].'<span class="caret"></span></a>'; 
							}
							  else{
                                echo '<a href="" class="dropdown-toggle" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">'.$_SESSION["lo_email"].'<span class="caret"></span></a>';
                              }
						?>
                        
                        <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
                            <li><a href="?Action=Logout">Logout</a></li>
                          </ul>
                    </li>     	        
		      	</ul>		      
		    </div><!-- /.navbar-collapse -->
		  </div><!-- /.container-fluid -->
 </nav><!-- navbar -->

รอบกวนช่อยด้วยนะค่ะ


chickenkook 27-06-2016 18:35
 ความคิดเห็นที่ 2
น่าจะลำดับการทำงานไม่ถูก กลายเป็นทุกครั้งที่ล็อกอินก็ insert ข้อมูลใหม่
ตอนนี้ไม่ได้ใช้ facebook sdk ที่เป็น php เลยแนะนำไม่ถูก หรือถ้าสนใจ การล็อกอินด้วย facebook จะ
แนะนำเป็นใช้ javascript sdk แทน ไว้ทำบทความสักครู่

>>>  อัพเดท >>> 27-06-2016
------------------------------------------
ดูเนื้อหานี้เป็นแนวทาง
การล็อกอิน facebook กับระบบสมาชิก ด้วย facebook javascript sdk 


>>>  อัพเดท >>> 27-06-2016
------------------------------------------
สำหรับกรณีที่ถามว่า ทำไมล็อกอินแล้วถึง insert ซ้ำเพราะ ตามโค้ด

    if($_GET["code"] != "")  
    {  
                  
                $strSQL ="insert into login(lo_fb_id,lo_fb_name,lo_fb_link,lo_fb_date_register,lo_status)   
                    values  
                    ('".trim($user_profile["id"])."',  
                    '".trim($user_profile["name"])."',  
                    '".trim($user_profile["link"])."',  
                    '".trim(date("Y-m-d H:i:s"))."',  
                    'user')";  
                $objQuery  = mysql_query($strSQL);  
                mysql_close();  
                header("location:manament_show.php");  
                exit();  
    }  


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


ninenik 27-06-2016
 ความคิดเห็นที่ 3
ขอบคุณมากเลยนะค่ะ มีประโยชน์มากๆเลยค่ะ 


chickenkook 29-06-2016 09:51
 ความคิดเห็นที่ 4
พี่ค่ะ หนูมีคำถามจากบทความที่พี่นิคได้เขียนไว้ให้ค่ะ พอดีหนูอยากทราบว่า มันจะสามารถเก็บ ชื่อ-นามสกุลจริงได้ไหมค่ะ แล้วก็พวกอีเมลล์ด้วยค่ะ ต้องรบกวนพี่นิคอีกครั้งและขอบคุณสำหรับคำตอบมากๆเลยนะค่ะ



chickenkook 29-06-2016 11:02
 ความคิดเห็นที่ 5
response จะส่งค่าข้อมูลของผู้ใช้นั้นมาให้ แล้วเราก็ส่งค่านั้นๆปบันทึก ในส่วนนี้

$.post("checkuser.php",{  
    fbname:response.name,  
    fbemail:response.email,  
    fbid:response.id,  
    accTK:accessToken  
},function(data){  
    console.log(data);  
    window.location=urlDirect;  
});  


response.name กับ response.email กับ response.id  คือค่าที่เราเลือกที่จะส่งไป
ปกติ ค่า response จะมี ดังนี้ อาจจะไม่เหมือนกันสำหรับทุกๆ คน 

email
first_name
gender
id
last_name
link
locale
name
timezone
updated_time

ถ้าเราจะส่งชื่อ กับนามสกุล อาจจะต้องส่งค่า firest_name กับ last_name ไปเก็บข้อมูล เช่น

$.post("checkuser.php",{  
    fbname:response.name,  
    fbemail:response.email,  
    fbid:response.id,  
    fbfirstname:response.first_name,  
    fblastname:response.last_name,          
    accTK:accessToken  
},function(data){  
    console.log(data);  
    window.location=urlDirect;  
});  

และในส่วนของรับค่า เราก็เอาค่าตัวแปร $_POST['fbfirstname'] กับ $_POST['fblastname'] ไปบันทึกเพิ่มเติม
โดยจะแยกฟิลด์ หรือต่อกันแล้วบันทึกในฟิลด์เดียวก็ได้

 


ninenik 29-06-2016
 ความคิดเห็นที่ 6
พี่นิคค่ะ แล้วถ้าข้อมูลมันโชว์แบบนี้ละค่ะ

userID: fb_1052590508122457
userName: Chickenkook Kook
Firstname
Lastname
Email
LastLogin: 2016-06-29 17:19:23

นั่นก็แสดงว่า มันไม่มีชื่อกับนามสกุลหรอค่ะ แต่หนูก็ใส่ 
$_SESSION['ses_user_first_name']=$row['user_first_name']; 
$_SESSION['ses_user_last_name']=$row['user_last_name'];  ให้มันแล้วนะค่ะ แต่ก็ไม่ขึ้นโชว์ค่ะ

หรือหนูต้องใส่โค้ดตรงนี้เพิ่มด้วยไหมค่ะ
// ตรวจสอบค่าที่ส่งมาผ่าน ajax แบบ POST ในที่นี้เราจะเช็ค 3 ค่า ว่ามีส่งมาไหม  
if(isset($_POST['fbname']) && $_POST['fbname']!="" && isset($_POST['fbid']) && $_POST['fbid']!=""  
&& isset($_POST['accTK']) && $_POST['accTK']!=""
รบกวนพี่นิคอีกครั้ง ช่วยดูให้หน่อยนะค่ะ ขอบคุณมากๆเลยค่ะ


chickenkook 29-06-2016 17:26
 ความคิดเห็นที่ 7
ดูที่ความเห็นที่ 5 ว่าส่ง response.first_name กับ reponse.last_lastname ไปด้วยไหม แล้วรับค่าด้วยตัวแปร 
$_POST['fbfirstname'] กับ $_POST['fblastname']

ส่วนการตรงตรวจสอบไม่ต้องก็ได้ เพราะบางคน บางค่าอาจจะไม่มี แต่ id กับ name น่าจะมีทุกคน

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

        // อัพเดทเวลาล็อกอินล่าสุด  
        $sql_update="  
        UPDATE tbl_simple_user SET   
		firstname='".$_POST['fbfirstname']."',
		lastname='".$_POST['fblastname']."',		
        user_last_login=NOW()  
        WHERE user_id='".$row['user_id']."'  
        ";  
        $mysqli->query($sql_update);  


ninenik 29-06-2016
 ความคิดเห็นที่ 8
พี่นิคค่ะ มันก็ยังไม่ยอมดึงข้อมูลมาค่ะ
อันนี้คือโค้ดในความเห็นที่ 5 นะค่ะ
if(response.id!=null && response.name!=null){ // ถ้าชื่อ กับ ไอดี ไม่เป็นค่าว่าง  
                                // ส่งข้อมูลไปใช้งาน เช่นตรวจสอบการล็อกอิน หรือสร้างข้อมูลสมาชิกใหม่  
                                $.post("checkuser.php",{  
                                    fbname:response.name,    
    								fbemail:response.email,    
    								fbid:response.id,    
    								fbfirstname:response.first_name,    
    								fblastname:response.last_name,   
                                    accTK:accessToken  
                                },function(data){  
                                    console.log(data);  
                                    window.location=urlDirect;  
                                });  
                            }  

อันนี้จะเป็นโค้ดหน้า checkuser ค่ะ
<?php  
session_start();  
include("inc/dbconnect.php");  
// ตรวจสอบค่าที่ส่งมาผ่าน ajax แบบ POST ในที่นี้เราจะเช็ค 3 ค่า ว่ามีส่งมาไหม  
if(isset($_POST['fbname']) && $_POST['fbname']!="" && isset($_POST['fbid']) && $_POST['fbid']!=""  
&& isset($_POST['accTK']) && $_POST['accTK']!=""  
){  
    // กำหนดรูปแบบรหัสสำหรับ fb_authorized สำหรับไว้ใช้ล็อกอิน ในท่ี่นี้ใช้รูปแบบอย่างง่าย   
    // ใช้ ไอดี ต่อกับ รหัสพิเศษกำหนดเอง สามารถไปประยุกต์เข้ารหัสรูปแบบอื่นเพิ่มเติมได้  
    $fb_secret_set = "mysecret";  
    $fb_string_authorized = $fb_secret_set.trim($_POST['fbid']); // ต่อข้อความสำหรับเข้ารหัส  
    $fb_gen_authorized = md5($fb_string_authorized);  
      
    $sql_check="  
    SELECT * FROM tbl_simple_user WHERE user_fb_authorized='".$fb_gen_authorized."'   
    AND user_fb_connect=1   
    ";  
    $result = $mysqli->query($sql_check);  
    if($result && $result->num_rows>0){  // มีสมาชิกที่ล็อกอินด้วย facebook id นี้ในระบบแล้ว  
        // ดึงข้อมูลมาแสดง และสร้าง session  
        $row = $result->fetch_array();  
        $_SESSION['ses_user_id']=$row['user_id']; 
		$_SESSION['ses_user_fb_id']=$row['user_fb_id']; 
        $_SESSION['ses_user_name']=$row['user_name']; 
		$_SESSION['ses_user_firstname']=$row['user_firstname']; 
		$_SESSION['ses_user_lastname']=$row['user_lastname'];
		$_SESSION['ses_user_email']=$row['user_email'];       
        $_SESSION['ses_user_last_login']=date("Y-m-d H:i:s");  
        // อัพเดทเวลาล็อกอินล่าสุด  
        $sql_update="  
        UPDATE tbl_simple_user SET     
		user_firstname='".$_POST['fbfirstname']."',  
		user_lastname='".$_POST['fblastname']."',          
      	user_last_login=NOW()    
      	WHERE user_id='".$row['user_id']."'    
      	";  
        $mysqli->query($sql_update);  
    }else{   // ไม่พบสมาชิกที่ใช้ facebook id นี้ล็อกอิน  
        // สร้างผู้ใช้ใหม่  
        //  สมมติให้ชื่อผู้ใช้ใหม่เป็น fb_ไอดี รหัสผ่านเป็น แรนดอม   
        $sql_insert="  
        INSERT INTO tbl_simple_user SET  
        user_fb_id='fb_".$_POST['fbid']."', 
		user_name='".$_POST['fbname']."',
		user_firstname='".$_POST['fbfirstname']."',
		user_lastname='".$_POST['fblastname']."',
		user_email='".$_POST['fbemail']."',
        user_pass='".rand(11111111, 9999999)."',  
        user_fb_connect='1',  
        user_fb_authorized='".$fb_gen_authorized."',  
        user_last_login=NOW()  
        ";    
        $result = $mysqli->query($sql_insert);  
        if($result && $mysqli->affected_rows>0){  
            $insert_userID = $mysqli->insert_id;  
            $sql="  
            SELECT * FROM tbl_simple_user WHERE user_fb_authorized='".$fb_gen_authorized."'   
            AND user_fb_connect=1   
            ";  
            $result = $mysqli->query($sql);  
            if($result && $result->num_rows>0){  // มีสมาชิกที่ล็อกอินด้วย facebook id นี้ในระบบแล้ว  
                // ดึงข้อมูลมาแสดง และสร้าง session  
                $row = $result->fetch_array();  
                $_SESSION['ses_user_id']=$row['user_id']; 
		$_SESSION['ses_user_fb_id']=$row['user_fb_id']; 
        $_SESSION['ses_user_name']=$row['user_name']; 
		$_SESSION['ses_user_firstname']=$row['user_firstname']; 
		$_SESSION['ses_user_lastname']=$row['user_lastname']; 
		$_SESSION['ses_user_email']=$row['user_email'];      
        $_SESSION['ses_user_last_login']=date("Y-m-d H:i:s");                 
                // อัพเดทเวลาล็อกอินล่าสุด  
                $sql_update="    
      			UPDATE tbl_simple_user SET     
				user_firstname='".$_POST['fbfirstname']."',  
				user_lastname='".$_POST['fblastname']."',          
      			user_last_login=NOW()    
      			WHERE user_id='".$row['user_id']."'    
      			";
                $mysqli->query($sql_update);                           
            }  
        }  
          
    }  
/*echo "<pre>"; 
echo $fb_gen_authorized; 
print_r($_POST); 
echo "</pre>";*/  
}  

ต้องรบกวนพี่นิคอีกแล้ว T_T ไม่ทราบว่าโค้ดหนูผิดตรงไหนไหมค่ะ ช่วยดูให้หนูหน่อยนะค่ะ

อันนี้หลังจากใส่โค้ดตามเรียบร้อยแล้ว จะแสดงผลออกมาแบบนี้ค่ะ
userID: fb_603915726442467
userName: Marshmallows Kook
Firstname
Lastname
Email
LastLogin: 2016-06-30 09:07:01
ต้องรบกวนด้วยนะค่ะพี่นิค


chickenkook 30-06-2016 09:11
 ความคิดเห็นที่ 9
ตามที่ดูโค้ดก็ไม่น่าผิด วิธีการไล่ทดสอบก็คือ ไปดูว่าในฐานข้อมูล ชื่อผู้ใช้ที่เราทดสอบ มีข้อมูล
ชื่อ นามสกุลบันทึก หรือไม่ ถ้ามีข้อมูลในฐานข้อมูลแล้ว แต่ข้อมูลไม่มาแสดง ก็เป็นกับโค้ดที่นำมาแสดง
แต่ถ้าไม่มีข้อมูลแต่แรก ก็เป็นกับส่วนของการบันทึก หรือไม่ก็ ผู้ใช้ไม่มีข้อมูลของ ชื่อ นามสกุล
ต้องกลับไปไล่ลำดับตั้งแต่ต้น
- เฟสบุ๊คให้ข้อมูล ชื่อ นามสกุลของผู้ใช้หรือไม่ ถ้าไม่ ก็ถือจบ เพราะไม่มีข้อมูล
- ถ้ามีข้อมูล ข้อมูลถูกบันทึกตอนล็อกอินหรือสมัครครังแรกหรือไม่ ก็ตรวจสอบดู
- ถ้ามีข้อมูล และข้อมูลถูกบันทึก แต่ข้อมูมลไม่ถูกดึงจากฐานข้อมูลมาแสดง ตรงนี้ก็เป็นที่การดึงย้อมูลมาแสดง ต้องไล่ดูโค้ด

ทั้งหมดก็เท่านี้ ที่เหลือคงต้องพยายามเองดู



ninenik 30-06-2016
 ความคิดเห็นที่ 10
แล้วพอมีวิธีทำให้ เฟสบุ๊คให้ข้อมูลไหมค่ะ หามา 2  วันเต็มๆเลยค่ะ เป็นไปได้ไหมค่ะ ว่าต้องไปตั้งค่าอะไรด้วยไหมค่ะ 


chickenkook 30-06-2016 10:33
1 2 Next






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ