สวัสดีฮับหน้าใหม่ครับผม ฝากตัวด้วย :wanwan017:
ตอนนี้บริษัทผมใช้ PHP version 5.2 เองครับ เลยยังไม่อยากใช้facebook API ของPHP เพราะAPI facebookของวิธีPHP ตัวใหม่ๆ มันrequire PHP ver 5.4 ขึ้นไป
ก็เลยสนใจใช้ javascript แทนครับ
ปัญหาคือ อยากจะเก็บค่าของข้อมูลผู้ใช้ที่login แบบ facebookเข้ามาในเว็บ ลงในdatabase mySQL ด้วยครับ เลยอยากสอบถามว่าจะโอนไปหาPHPอย่างไรดี ทีนี้ค่าที่ผมอยากโอนคือ ให้ลองดูในfunction getInfo() ดูครับ ตัวresponse.emailนั่นแหละครับ ซึ่งผมจะส่งค่าไปหาไฟล์ที่ชื่อ "new 1.php"
รบกวนด้วยครับ ทำวิธีผมแล้วมันดันขึ้นerror Undefined index: email in new 1.php on line 3
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '201637766943985', //Your appId
xfbml: true,
version: 'v2.8'
});
FB.AppEvents.logPageView();
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
document.getElementById('status').innerHTML = 'We are connected.';
document.getElementById('fb_login').style.visibility = 'hidden';
} else if (response.status === 'not_authorized') {
document.getElementById('status').innerHTML = 'We are not logged in.';
} else {
document.getElementById('status').innerHTML = 'You are not logged into Facebook';
}
});
};
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {
return;
}
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function fb_login() {
FB.login(function(response) {
if (response.status === 'connected') {
document.getElementById('status').innerHTML = 'We are connected.';
document.getElementById('fb_login').style.visibility = 'hidden';
} else if (response.status === 'not_authorized') {
document.getElementById('status').innerHTML = 'We are not logged in.';
} else {
document.getElementById('status').innerHTML = 'You are not logged into Facebook';
}
}, {
scope: 'email'
});
}
function getInfo() {
FB.api('/me', 'GET', {
fields: 'first_name,last_name,name,id,email'
}, function(response) {
var email = response.email; /////////ตัวแปรที่ต้องการส่งไปหาPHP///////////
var http = new XMLHttpRequest(); ///////////AJAX///////
var url = "new 1.php";
var data = "email=" email;
http.open("GET", url, true);
http.onreadystatechange = function() {//Call a function when the state changes.
if(http.readyState == 4 && http.status == 200) {
alert(http.responseText);
}
}
http.send(data);
});
}
function fb_logout() {
FB.logout(function() {
document.location.reload();
});
}
</script>
<div id="status"></div> <div id="status2"></div>
<button onclick="getInfo()"> Get Info</button>
<button onclick="fb_login()" id="fb_login"> Login with Facebook </button>
<button onclick="fb_logout()"> Log out </button>
</body>
</html>
อันนี้ในหน้า new 1.php ครับ
<?php
if($_SERVER['REQUEST_METHOD'] == 'GET'){
$email = $_GET['email'];
echo $email;
}
?>
จริง ๆ ผมอยาหให้ทดสอบตามนี้ก่อนครับ
ที่ไฟล์ new 1.php
1
ลองลบออกทั้งหมดแล้วใส่เลข 123456
ดูสิครับว่าจะเรียกมาไหมครับ
ถ้าเรียกได้แปลว่า script ทำงาน
2
ลบออกทั้งหมดใส่แค่
<?php
echo $_GET["email"];
?>
3
ลองเรียก URL new 1.php แบบตรง ๆ เลยครับว่า error อะไร เช่น
http://localhost/new
[email protected]จากการเรียกแบบนี้ต้องขึ้น
[email protected] ครับ
รอท่านอื่นมาเสริมต่อครับ
ขอเสริมครับ โดปกติแล้วการตั้งชื่อไฟล์ ไม่ควรมีช่องว่างครับ
ควรเป็น
new 1.php แก้เป็น new1.php
1. ก็จะมีเลข 123456 โผล่ครับตอนrunหน้าnew 1 รวมถึงตอนกดปุ่มGetinfoในหน้าjs, html ก็alert เป็น 123456
2. ก็error ครับผมหลังกดปุ่มGetinfo แล้วก็ไม่มีไรเกิดขึ้น Notice: Undefined index: email in C:\xampp\htdocs\new 1.php on line 2
3. ก็เห็น
[email protected] ถูกต้องครับ
ได้คำตอบละครับ
ใช้ ajax ส่งค่านี้เอง ตอนแรกนึกว่าแทรก ajax ที่เป็นjqueryใน purejavascript codeไม่ได้ซะอีก :-X
$.ajax({
type: 'POST',
url: 'new1.php',
data: { text1: response.name, text2: response.email },
success: function(response) {
$('#status2').html(response);
}
});