1

jquery/php/mysql でアプリを作成しようとしています。最初にデータベース内のすべての店舗を一覧表示することになっていますが、これは正常に機能します。ただし、いずれかをクリックすると、その特定の店舗に関する詳細情報が表示されます。そして、そこから問題が始まります。

基本的に、データベースからすべての行をフェッチしたい場合は、すべて正常に機能します。しかし、クエリ文字列を使用して特定の行を選択しようとすると、機能しません。私は多くのことを試しましたが、jquery関数を壊して何も出力しないのはphpファイルの$ _GETであることがわかりました。GET でのみエコーを実行しても、それは壊れます。そして、私はその理由を理解できません。たとえば、「select * where id = 2」だけでもうまくいきます。ただし、たとえば GET を使用して 2 のクエリ文字列を取得する場合はそうではありません。

(また、現在これは単なる JSON ですが、後でもちろん jsonp のクロスドメインが必要になります)

これは私のphpコードです:

<?php

// Settings for accessing the DB.

$host = "localhost";
$db = "mappdb";
$username ="db-username";
$password ="******";

// Connect and query the DB and get the data for all attractions

$connect = mysql_pconnect($host, $username, $password) or die("Could not connect to the database");
mysql_select_db($db) or die("Could not select the database");

$arr = array();

$idnumber = $_GET["pid"];


$result = mysql_query("select * from attractions where id = $idnumber");



while($object = mysql_fetch_object($result)) {
    $arr[] = $object;
}

echo '{"attractions":'.json_encode($arr).'}';

?>

そして、ここに私のjqueryがあります:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" href="jquery.mobile-1.3.1.min.css" />
<script src="jquery-1.9.1.min.js"></script>
<script src="jquery.mobile-1.3.1.min.js"></script>
        <title>Store Finder</title>
    </head>

    <body>
        <div data-role="page" id="page">
            <div data-role="header" data-position="fixed">  
            <a href="index.html" data-icon="back">Back</a>
            <h6>Search</h6>
            </div>

            <div data-role="content">

                <ul data-role="listview" data-filter="true" id="listed" data-filter-placeholder="Filter cities or stores..." data-inset="true">
                    <script type="text/javascript">

                        $(document).ready(function(){
                            var url="http://localhost/mapp/json.php?pid=2";
                            $.getJSON(url,function(json){
                                // loop through the stores here
                                $.each(json.attractions,function(i,dat){
                                    $("#listed").append(
                                    '<li><a href="viewstore.html?id='+dat.id+'">'+dat.id+' '+dat.name+'</a></li>'
                                    ).listview('refresh');
                                });
                            });
                        });
                    </script>


                </ul>


            </div>
            <div id="msg"> </div>

            <div data-role="footer" data-position="fixed">
            <h6>Footer</h6>

            </div>
        </div>

    </body>
</html>

一日中これに座っていて、私の人生ではそれを理解することはできません. 助けていただければ幸いです。ありがとう!

4

1 に答える 1

2

セキュリティアドバイザー

まず第一に、コードに重大なセキュリティ上の問題がいくつかあります

  1. mysql_* 関数を使用しています。これは、サポートされているすべてのバージョンの PHP で非推奨になっています。代わりに mysqli_* または PDO を使用してください
  2. ユーザー パラメータ$_GET['pid']をクエリで直接使用すると、アプリがSQL インジェクションに対して脆弱になります。対応策についてはGoogle検索を参照して、この修正をできるだけ早く入手してください!

あなたの問題

にある可能性が最も高い$.getJson()です。
まず?pid=2、ブラウザの Firebug/開発者ツールの [ネットワーク] タブを調べて、呼び出された URL を確認し、-part が実際に URL に追加されていることを確認します。
pidは完全に省略されていると思います。
これは、次のように関数を呼び出すことで修正できます。

var url = "http://localhost/mapp/json.php
var data = { 'pid': 2}; 
$.getJSON(url, data, function(json) {
    ...
});

$.getJSON() マニュアルによると、この関数は 3 つの引数を取ります。1 番目は URL、2 番目はプレーン データ オブジェクト、3 番目は成功した場合のコールバック関数です。 dataurlencode され、URL に追加されるクエリ パラメータのリストとして扱われます。

于 2013-06-08T21:41:05.297 に答える