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

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

อยากสอบถามเกี่ยวกับ 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

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

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


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน 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) ขอบคุณครับ