Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用AJAX Post&;从Facebook输入空白数据的数据库;PHP_Javascript_Php_Mysql_Ajax_Facebook - Fatal编程技术网

Javascript 使用AJAX Post&;从Facebook输入空白数据的数据库;PHP

Javascript 使用AJAX Post&;从Facebook输入空白数据的数据库;PHP,javascript,php,mysql,ajax,facebook,Javascript,Php,Mysql,Ajax,Facebook,我正在创建一个Facebook画布游戏,到目前为止,我一直在本地主机上的笔记本电脑上托管它,同时我的数据库也在本地使用phpMyAdmin托管。我现在正在联机,并且遇到了数据库问题 当我在本地托管它时,我能够获取玩家的详细信息(他们的Facebook ID、名字、姓氏、电子邮件、性别),并在玩家加载主页时将这些数据作为一行插入我的数据库。这在本地主机上运行时没有任何问题 然而,自从我把它放到网上,它就插入了空白字段而不是Facebook数据。在线数据库连接正确,如果我将其他值直接写入.php脚本

我正在创建一个Facebook画布游戏,到目前为止,我一直在本地主机上的笔记本电脑上托管它,同时我的数据库也在本地使用phpMyAdmin托管。我现在正在联机,并且遇到了数据库问题

当我在本地托管它时,我能够获取玩家的详细信息(他们的Facebook ID、名字、姓氏、电子邮件、性别),并在玩家加载主页时将这些数据作为一行插入我的数据库。这在本地主机上运行时没有任何问题

然而,自从我把它放到网上,它就插入了空白字段而不是Facebook数据。在线数据库连接正确,如果我将其他值直接写入.php脚本中的Insert语句,它将输入其他值。我认为问题可能与我使用的AJAX帖子有关

我正在调用主页的Javascript函数
onload
,它运行以下代码:

function getUserDetails() {

FB.login(function(response) {
  if (response.authResponse) {
    console.log('Welcome!  Fetching your information.... ');

     FB.api('/me', function(response) {

     if (response.error) {
       console.log('Error - ' + response.error.message);
     }
     else {
       var userid = response.id;
       var userfirst_name = response.first_name;
       var userlast_name = response.last_name;
       var useremail = response.email;
       var usergender = response.gender;

       $.ajax({
         url: 'scripts/php_scripts/insertuserdetails.php',
         data: {'userid' : userid,
               'userfirst_name' : userfirst_name,
               'userlast_name' : userlast_name,
               'useremail' : useremail,
               'usergender' : usergender},
        type: "POST",
        success: function(response){

                 if(response==1){
                         alert( "Insert worked!");
                         }
                    else{
                       alert( "Insert failed!" );
                              }
                    }
       });
     }
    });
  } else {
    console.log('User cancelled login or did not fully authorize.');
  }
 }, {scope: 'email'});
}
它发布到的PHP文件如下:

<?php 

session_start();

require_once 'facebook-php-sdk-v4-4.0-dev/autoload.php';

use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;

FacebookSession::setDefaultApplication('myappid', 'myappsecret');

$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$userid = $_POST['userid'];
$userfirst_name = $_POST['userfirst_name'];
$userlast_name = $_POST['userlast_name'];
$useremail = $_POST['useremail'];
$usergender = $_POST['usergender'];

$sql = "INSERT INTO player (fb_id, f_name, l_name, email, gender) VALUES 
('$userid', '$userfirst_name', '$userlast_name', '$useremail', '$usergender');";
$sql .= "INSERT INTO bank (fb_id, cb, gb, invite)
VALUES ('$userid', '200', '0', '');";

$result = mysqli_multi_query($conn, $sql);
if ($result) {
   $verify=1;
}
else{
  $verify=0;
}
echo $verify;

mysqli_close($conn);

?>

这听起来像是典型的第三方cookie问题

Facebook上的画布应用程序在iframe中运行,因此浏览器认为iframe内容来自“第三方”,根据隐私设置,从该iframe中设置的cookie可能会被阻止


你说删除你的cookies为你修复了它;但是,如果其他用户的浏览器默认阻止第三方cookie,这并不一定意味着它也适用于其他用户,所以您应该做更多的测试。用户可能必须更改其设置以允许此类cookie,或者您必须尝试在会话中不使用cookie,而是将会话id作为GET或POST参数传递给您的请求。

控制台您的响应可能是第三方cookie问题。您好@CBroe,看起来您是对的!我删除了cookies,现在它可以工作了!非常感谢。如果你想写下来作为答案,那么我会把它标记为接受。此外,我一直在阅读如何使我的代码更安全,我需要使用参数化语句,并且还需要将我的数据库连接与此代码分离。我一直在尝试使用一个单独的php连接脚本,然后将其包含在这段代码的顶部,但我似乎无法让它工作,您能给我展示一个如何使用上述代码实现这一点的示例吗?再次感谢!您好@noddy谢谢您的回复,从我的浏览器中删除cookies后,它似乎正在工作。太好了。。享受你的工作:)