Hello_I'm делает приложение Canvas для Facebook, и я пытаюсь заставить процесс «Пригласить друзей» работать. У меня есть мой многопользовательский селектор, и он отправляет приглашения правильно, но теперь я хочу вознаграждать приглашающего, когда приглашенный человек добавляет приложение.
Я думаю, что правильный способ сделать это – запустить проверку всякий раз, когда новый пользователь начнет использовать приложение. Я пытаюсь сделать это, обратившись к API-интерфейсу Facebook, чтобы узнать, есть ли у нового пользователя приложение app apprequest
для моего приложения, если они это сделают, тогда я хочу узнать идентификатор (или ID) человека / людей, которые отправили это новый пользователь приглашает запрос.
Чтобы попытаться выяснить, как это сделать, у меня было 3 приглашения (из 3 разных учетных записей), отправленных в одну учетную запись, и теперь, если я войду в качестве приглашающего получателя, а затем /v2.3/me/apprequests?fields=from,id
консоль Facebook API Graph с этим кодом: /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
для приложения. Это дает мне идентификаторы, их имена и уникальный идентификатор запроса, объединенный с идентификатором Invited person.
В настоящее время я могу получить идентификаторы отправителей по отдельности, но я хочу отправить их как массив в скрипт PHP AJAX, а затем я хочу вставить их в свою базу данных, используя подготовленный 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!"); } } }); } } );
Хотя я могу отправлять идентификаторы в файл PHP в виде отдельных переменных var requestid, var requestid1, var requestid2
и затем вставлять их отдельно, это не очень хороший метод для использования, так как количество идентификаторов запросов будет меняться, поэтому вместо этого посылки каждого из них в качестве отдельных переменных, я думаю, мне нужно отправить их как массив, но я не уверен, как это сделать.
Моя текущая транзакция PDO Insert заключается в следующем:
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 и транзакциях, и у меня нет опыта работы с массивами. Я бы очень признателен за любую помощь с этим, спасибо за это заранее!
@Emily Что касается ваших обновленных вопросов, их легко достичь. Передайте массив непосредственно на пост ajax, как это
$.ajax({ url: 'reward.php', data: {'requestids' : response.data}, type: "POST", success: function(response){ if(response==1){ alert("Reward Applied!"); } else{ alert("Reward Failed!"); } } }); } }
Затем в вашем петле PHP через массив requestids и сгенерируйте запрос mysql, чтобы сразу вставить все записи
$sql= "INSERT INTO requestids (requestid) VALUES "; foreach($_POST['requestids'] as $requestId){ $sql.="($requestId)"; }
Я уверен, что вы можете легко преобразовать этот простой запрос в инструкцию PDO
Да, вы не отправляете данные правильно.
Попробуй это
data: {'senderid' : response.data.from.id}