Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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
Php 带有嵌入式表单处理的单页facebook应用程序-签名请求问题_Php_Mysql_Html_Facebook_Forms - Fatal编程技术网

Php 带有嵌入式表单处理的单页facebook应用程序-签名请求问题

Php 带有嵌入式表单处理的单页facebook应用程序-签名请求问题,php,mysql,html,facebook,forms,Php,Mysql,Html,Facebook,Forms,我正在开发我的第一个facebook fanpage应用程序,在同一页面上处理注册表格 该应用程序的工作原理如下: 检查facebook用户是否登录->如果未登录,要求登录,如果是,将基本用户数据记录到我的数据库表1中 (mysql) 检查用户是否喜欢我的facebook页面->如果不喜欢,请单击“喜欢”按钮,如果是,则继续下一步 检查用户数据是否已经存在于我的数据库表2中->如果不存在,则打印出注册表并将其发送到同一页面,以便在mysql中进行处理 当用户注册后,应向用户显示实际的独占内容 我

我正在开发我的第一个facebook fanpage应用程序,在同一页面上处理注册表格

该应用程序的工作原理如下:

  • 检查facebook用户是否登录->如果未登录,要求登录,如果是,将基本用户数据记录到我的数据库表1中 (mysql)
  • 检查用户是否喜欢我的facebook页面->如果不喜欢,请单击“喜欢”按钮,如果是,则继续下一步
  • 检查用户数据是否已经存在于我的数据库表2中->如果不存在,则打印出注册表并将其发送到同一页面,以便在mysql中进行处理
  • 当用户注册后,应向用户显示实际的独占内容
  • 我的问题是,在发送注册表后,用户返回到“非粉丝”区域(尽管他已经喜欢该页面,因此应该只看到粉丝内容),并且“错误”一词会打印到页面顶部。->这意味着页面最开始的“isset($_请求['signed_请求'])”返回false

    这是我的代码:

    <?php
    require '../facebook-php-sdk/src/facebook.php';
    $facebook = new Facebook(array(
    'appId'  => 'fb-app-id',
    'secret' => 'fb-app-secret',
    'cookie' => true,
    ));
    $user = $facebook->getUser();
    
    function saveuser(&$id, &$name, &$email, &$ip, $hostname, $browser, &$like) {
    mysql_connect('host', 'user', 'password');mysql_set_charset('utf8');mysql_select_db('mydatabase');
    mysql_query("INSERT INTO mytable1 (id,name,email,ip,hostname,browser,fblike) VALUES ($id, '$name', '$email', '$ip', '$hostname', '$browser', $like)");
    mysql_close();
    }
    
    function checkuser(&$id) {
    mysql_connect('host', 'user', 'password');mysql_set_charset('utf8');mysql_select_db('mydatabase');
    $query="SELECT phone, round, points FROM mytable2 WHERE fbuserid = " .$id. " ORDER BY timecreated DESC LIMIT 1";
    $result=mysql_query($query);
    mysql_close();
    return $result;
    }
    ?>
    <html><head><title>page title</title></head>
    <body>
    <?php
    if (isset($_REQUEST['signed_request'])) {
    $encoded_sig = null;
    $payload = null;
    list($encoded_sig, $payload) = explode('.', $_REQUEST['signed_request'], 2);
    $sig = base64_decode(strtr($encoded_sig, '-_', '+/'));
    $signed_request = json_decode(base64_decode(strtr($payload, '-_', '+/'), true),true);
    } else { echo "ERROR"; }
    if ($signed_request['page']['liked']) { $like = 1; } else { $like = 0; }
    if ($user) { try {
    $user_profile = $facebook->api('/me','GET');
    $name = $user_profile['name'];
    $email = $user_profile['email'];
    $id = $user_profile['id'];
    $ip = $_SERVER['REMOTE_ADDR'];
    $hostname = gethostbyaddr($ip);
    $browser = $_SERVER['HTTP_USER_AGENT'];
    saveuser($id, $name, $email, $ip, $hostname, $browser, $like);
    } catch(FacebookApiException $e) {
    ?>
    <script type="text/javascript">
    //<![CDATA[
    var oauth_url = 'https://www.facebook.com/dialog/oauth/';
    oauth_url += '?client_id=fb-app-id';
    oauth_url += '&redirect_uri=' + encodeURIComponent('https://www.facebook.com/fb-page-name?sk=app_fb-app-id');
    oauth_url += '&scope=email'
    window.top.location = oauth_url;
    //]]>
    </script>
    <?php } } else { // User not logged in or we need user permission ?>
    <script type="text/javascript">
    //<![CDATA[
    var oauth_url = 'https://www.facebook.com/dialog/oauth/';
    oauth_url += '?client_id=fb-app-id';
    oauth_url += '&redirect_uri=' + encodeURIComponent('https://www.facebook.com/fb-page-name?sk=app_fb-app-id');
    oauth_url += '&scope=email'
    window.top.location = oauth_url;
    //]]>
    </script>
    <?php } 
    if ($like == 1) { // user is fan of my facebook page
    $userdata = checkuser($id);
    if (mysql_num_rows($userdata) > 0) { // user is registered
    $userphone=mysql_result($userdata,0,telefon);
    $roundscompleted=mysql_result($userdata,0,round);
    $currentpoints=mysql_result($userdata,0,points);
    ?>
    
    Here comes extended html content visible only for users who have liked my page and completed the registration form.
    
    <?php } else { // user is not registered
    if ($_POST['emailaddress'] != "") { // process user registration
    mysql_connect('host', 'user', 'password');mysql_set_charset('utf8');mysql_select_db('mydatabase');
    $id = $_POST['fbuserid'];
    $name = mysql_real_escape_string($_POST['fullname']);
    $email = mysql_real_escape_string($_POST['emailaddress']);
    $mobile = mysql_real_escape_string($_POST['phonenumber']);
    mysql_query("INSERT INTO mytable2 (fbuserid,regname,regemail,telefon) VALUES ('$id', '$name', '$email', '$mobile')");
    mysql_close();
    
    /*
    On this point, the page should be reloaded and checkuser() function should return user data.
    What happens is "ERROR" gets printed on top of page and user gets back to the "non-fan area".
    */
    
    } else { // user not registered - print registration form ?>
    <form id="regisztracio" name="regisztracio" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    <fieldset><legend>Registration form</legend>
    <label>Your name</label>
    <input type="text" name="fullname" id="fullname" value="<?php echo $name; ?>" />
    <br style="clear:both;" />
    <label>Your e-mail</label>
    <input type="text" name="emailaddress" id="emailaddress" value="<?php echo $email; ?>" />
    <br style="clear:both;" />
    <label>Your phone number</label>
    <input type="text" name="phonenumber" id="phonenumber" />
    <br style="clear:both;" />
    <input name="fbuserid" type="hidden" value="<?php echo $id; ?>" />
    <input name="submitreg" type="submit" class="submit" value="Register" />
    </fieldset></form>
    <?php } } } else { // non-fan area ?>
    
    Here comes basic html content asking the user to click on the like button and become a fan of my facebook page.
    
    <?php } ?>
    </body>
    </html>
    
    
    这意味着页面最开始的“isset($_请求['signed_请求'])”返回false

    当然会,因为signed_request参数仅在初始页面加载时发布到页面。在用户开始在iframe内的应用程序内导航后,它将不再出现

    因此,在每个请求上,检查是否有as signed_request参数–如果有,将其保存(最好是解码版本)到会话中


    当您需要查找某个值时,请在会话中查找。

    将代码粘贴到您的问题中,但仅限于相关部分。如果我的代码太长,很抱歉,我已清理了大部分不相关的部分,但有时一点点输入错误可能会导致错误,这次我不确定我做错了什么。我找到了这个工具:它帮助我找到了有关问题的一些信息:签名请求错误签名您的签名请求可能没有使用我们的应用程序id 113869198637480签名。这是有效载荷:{“算法”:“HMAC-SHA256”,“发布地址”:1288947919,“答案”:42}这对我来说真的很奇怪,因为我的应用程序id不是113869198637480。谢谢,@CBroe这真是一个简单的解决方案:)