-1

ねえ、私は問題があります...

ユーザーが私のFacebookアプリからリンクを共有したときに、彼のIDをデータベースに取得したいと思います。

リンクを共有する方法は、変更したFacebookダイアログのJavaScriptの例を使用することです

共有 JavaScript コード

<script>
      FB.init({appId: 'xxxx', channelUrl: 'xxxx', status: true, cookie: true});

      function postToFeed() {

        // calling the API ...
        var obj = {
          method: 'feed',
          link: 'https://developers.facebook.com/docs/reference/dialogs/',
          picture: 'http://fbrell.com/f8.jpg',
          name: 'Facebook Dialogs',
          caption: 'Reference Documentation',
          description: 'Using Dialogs to interact with users.'
        };

        function callback(response) {
            xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function(){
                if (xmlhttp.readyState==4 && xmlhttp.status==200){
                    document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
                    document.getElementById('post').style.display = "none";
                }
            }
            xmlhttp.open("POST","shared.php",true);
            xmlhttp.send("id=xxx");
        }

        FB.ui(obj, callback);
      }

</script>

PHP コード

$con = mysqli_connect("xxxx","xxx","xxx","xxx");
    if (!$con) {
        die('Could not connect: ' . mysql_error());
    };

        mysqli_query($con, "INSERT INTO xxx (fb-id) VALUES (".$_POST['id'].")");

    mysqli_close($con)

リンクを共有すると、post_id が取得されますが、db には何もありません。

誰が何が悪いのか教えてもらえますか?

4

1 に答える 1

4

無効なフィールド名:

INSERT INTO xxx (fb-id) ...
                 ^^^^^

1 つのフィールドではなく、2 つのフィールドが減算されているように見えます。単一のフィールド名として強制的に表示するには、バッククォートでエスケープする必要があります。

INSERT INTO xxx (`fb-id`) ...

上の図では、大きく開いたSQL インジェクション ホールがあります。このコードの作業をやめて、誰かがあなたのサーバーを破壊する前に、この問題を回避する方法を学んでください。

また、クエリが成功したと想定していますが、これは悪いことです。connect() 呼び出しでエラー処理がありますが、それ以外にはありません。クエリが成功したと想定しないでください。後で必ずエラーを確認してください。

于 2012-11-06T18:28:34.740 に答える