POST操作由AJAX PHP脚本Facebook的图形API响应数组(POSTing an Arr

2019-10-23 03:13发布

Hello_I'm使得Facebook的帆布App和我试图获得邀请好友的过程工作。 我有我的多的朋友选择做,它的正确发送邀请,但我现在想无论何时邀请的人增加了应用程序,以奖励的邀请。

我觉得这样做正确的做法是,每当一个新的用户开始使用应用程序来运行检查。 我试图通过查询Facebook的图形API来做到这一点,看看新的用户有一个apprequest我的应用程序,如果他们这样做,那么我想找出谁传这人/人的ID(或ID)新的用户邀请请求。

要尝试找出如何做到这一点,我有3个邀请(从3个不同的账户)发送到一个帐户,现在如果我登录的邀请接收器,然后用这个代码查询Facebook的图形API控制台: /v2.3/me/apprequests?fields=from,id它返回:

{"data": [
    {
      "from": {
        "id": "1234526161534",
        "name": "John Doe"
      },
      "id": "14677152342565_827362417384",
      "created_time": "2015-05-19T21:35:11+0000"
    },
    {
      "from": {
        "id": "4777221325314",
        "name": "Jane Doe"
      },
      "id": "1683273626362_827362417384",
      "created_time": "2015-05-19T20:50:14+0000"
    },
    {
      "from": {
        "id": "1015521200905293",
        "name": "Di Do"
      },
      "id": "1251333932735_827362417384",
      "created_time": "2015-05-19T20:50:08+0000"
    }
  ]}

所以它的显示我3个不同的人送我apprequests的应用。 它给我它们的ID,他们的名字,并与被邀请人的ID连接起来的唯一请求ID。

目前,我能够单独抢者编号,但我想送他们通过AJAX数组PHP脚本,然后我想将它们插入到使用PDO准备语句如果可能的话我的数据库。

这是我当前的代码:

/* making the API call */
FB.api(
    'me/apprequests?fields=from,id',
    function (response) {
     if (response && !response.error) {

   var requestid = response.data[0].from.id;
   var requestid1 = response.data[1].from.id;
   var requestid2 = response.data[2].from.id;

   console.log(response.data[0].from.id);
   console.log(response.data[1].from.id);
   console.log(response.data[2].from.id); 

    $.ajax({
         url: 'reward.php',
         data: {'requestid' : requestid,
               'requestid1' : requestid1,
               'requestid2' : requestid2},
        type: "POST",
        success: function(response){
          if(response==1){
             alert("Reward Applied!");
                 }
          else{
             alert("Reward Failed!");
                 }
            }
       });
      }
    }
);

虽然我能够的ID发送给PHP文件作为独立变量var requestid, var requestid1, var requestid2然后分别插入他们,这不是一个很好用的方法,如请求ID的数量会有所不同,所以不是送他们每个人作为独立变量,我想我需要把他们送到一个数组,但我不确定如何做到这一点。

我现在的PDO插入交易是这样的:

reward.php

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

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $conn->beginTransaction();

    // Defining the three request IDs
    $requestid = $_POST['requestid'];
    $requestid1 = $_POST['requestid1'];
    $requestid2 = $_POST['requestid2'];

    // Insert first request ID
    $stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid)");
    $stmt->bindParam(':requestid', $requestid);
    $requestid = $_POST['requestid'];
    $stmt->execute();

    // Insert second request ID
    $stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid1)");
    $stmt->bindParam(':requestid1', $requestid1);
    $requestid = $_POST['requestid1'];
    $stmt->execute();

    // Insert third request ID
    $stmt = $conn->prepare("INSERT INTO requestids (requestid) VALUES (:requestid2)");
    $stmt->bindParam(':requestid2', $requestid2);
    $requestid = $_POST['requestid2'];
    $stmt->execute();

    $conn->commit();
    echo "1";
    }
catch(PDOException $e)
    {
    echo "Error: " . $e->getMessage();
    }
$conn = null;
?>

这是行不通的,如果一个人从3万余人请求时,它真正需要的是一个数组来代替。 我是很新,PDO和交易,以及没有任何使用数组的工作经验。 我真的很感激任何帮助,这在所有,感谢这么多提前!

Answer 1:

@Emily关于你更新的问题,它很容易实现。 数组本身传递给阿贾克斯后这样

$.ajax({
     url: 'reward.php',
     data: {'requestids' : response.data},
    type: "POST",
    success: function(response){
      if(response==1){
         alert("Reward Applied!");
             }
      else{
         alert("Reward Failed!");
             }
        }
   });
  }
}

然后通过requestids阵列的PHP环路,并产生MySQL查询一次插入所有记录这样

$sql= "INSERT INTO requestids (requestid) VALUES "; 
foreach($_POST['requestids'] as $requestId){
       $sql.="($requestId)";
}

我相信你可以很容易地转换这种简单的查询到PDO声明



Answer 2:

是的,你没有正确发送数据。

尝试这个

data: {'senderid' : response.data.from.id}


文章来源: POSTing an Array from a Facebook Graph API response by AJAX to a PHP script