0

データベースを実装してから、PHP を介してデータベースからデータを取得しています。

私のコードでは、名前でデータをフィルタリングすることになっています。名前が存在する場合は、データを印刷したいと考えています。欲しい商品は表にあるのに何も表示されない。エラーがどこにあるのか理解できませんでした。データベースには場所に関する情報しかありません。データベースにユーザーの場所を保持していません。

私のコードは次のとおりです。

<?php
    $username="myusername";
    $password="mypasswd";
    $database="mydatabase";
    $host="mysqlmyhost.com";
    mysql_connect($host,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");

    // check for post data
    if (isset($_GET["locationName"])) {
        $locationName = $_GET['locationName'];

        // get a product from products table
        $result = mysql_query("SELECT *FROM Location WHERE locationName =   $locationName");

        if (!empty($result)) {
            // check for empty result
            if (mysql_num_rows($result) > 0) {
                $result = mysql_fetch_array($result);

                $product = array();
                $product["locationName"] = $row["locationName"];
                $product["locationInfo"] = $row["locationInfo"];
                $product["locationLatitude"] = $row["locationLatitude"];
                $product["locationLongitude"] = $row["locationLongitude"];
                $product["locationPic"] = $row["locationPic"];
                $product["city"] = $row["city"];
                // success
                $response["success"] = 1;

                // user node
                $response["Location"] = array();

                array_push($response["Location"], $product);

                // echoing JSON response
                echo json_encode($response);
            } else {
                // no product found
                $response["success"] = 0;
                $response["message"] = "No product found";

                // echo no users JSON
                echo json_encode($response);
            }
        } else {
            // no product found
            $response["success"] = 0;
            $response["message"] = "No product found";

            // echo no users JSON
            echo json_encode($response);
        }
    } else {
        // required field is missing
        $response["success"] = 0;
        $response["message"] = "Required field(s) is missing";

        // echoing JSON response
        echo json_encode($response);
    }
?>

編集:

ここで、ユーザーに最も近い場所を表示したいと思います。コードを検索して変更しました。$userLatitude=$_GET['userLatitude']; で始まる行にエラーがあります。. here に予期しない t_string エラーがあると表示されます。エラーの意味がわかりませんでした。もう一度助けてもらえますか?

   if (isset($_GET["userLatitude"]) && isset($_GET["userLongitude"])) {
$userLatitude=$_GET['userLatitude'];
$userLongitude=$_GET['userLongitude'];
$result = mysql_query("SELECT locationName, ( 6371 * acos( cos( radians(      $userLatitude) ) * cos( radians( locationLatitude ) ) * cos( radians( locationLongitude ) - radians( $userLatitude) ) + sin( radians($userLongitude) ) * sin( radians( locationLatitude) ) ) ) AS distance 
FROM Location HAVING distance < 2 ORDER BY distance LIMIT 0 ,20") or die(mysql_error());
echo $result;


  // check for empty result
  if (mysql_num_rows($result) > 0) {
    // looping through all results
    // products node
    $response["Location"] = array();

    while ($row = mysql_fetch_array($result)) {
    // temp user array
    $product = array();
    $product["locationName"] = $row["locationName"];
    $product["locationInfo"] = $row["locationInfo"];
    $product["locationLatitude"] = $row["locationLatitude"];
    $product["locationLongitude"] = $row["locationLongitude"];
    $product["locationPic"] = $row["locationPic"];
    $product["city"] = $row["city"];



    // push single product into final response array
    array_push($response["Location"], $product);
}
// success
$response["success"] = 1;

// echoing JSON response
echo json_encode($response);
   } else {
// no products found
$response["success"] = 0;
$response["message"] = "No products found";

// echo no users JSON
echo json_encode($response);
 }
 mysql_close();
4

3 に答える 3

1

いくつかの考え:

  • 一部のテキストにはスペースや特殊文字が含まれている可能性があり、SQL は境界を好むため、クエリ内に一重引用符を追加することをお勧めします。前後の二重引用符が気に入らない場合でも、問題なく動作するはずですが、私の習慣になっています。

可能なコード:

// get a product from products table
$result = mysql_query("SELECT *FROM Location WHERE locationName = '".$locationName."'");
  • データベースにデータを保存したとき、エスケープされた文字を考慮しましたか (つまり、インジェクション攻撃やデータの誤りを防ぐために挿入されたデータに mysql_real_escape_string() を使用してスラッシュを追加しましたか?)。その場合、同じ関数を使用してデータを検証し、stripslashes() 関数を使用して「正規化された」データを返し、応答に挿入することができます。

データベース内のデータの例: それは /"fella/'/" について私が話していることです!

可能なコード:

$locationName = mysql_real_escape_String($_GET['locationName']);

and

$product["locationName"] = stripslashes($row["locationName"]);
  • エラーチェックを追加したり、トラブルシューティングに役立つメッセージを表示したりできます

mysql クエリのインライン エラー表示: (これにより、エラーでページが停止し、MySQL から返されたメッセージが表示されます)

$result = mysql_query("SELECT *FROM Location WHERE locationName = $locationName") or die(mysql_error());

PHP での一般的なエラー報告: (これは少し冗長で、警告も表示します)

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

詳細な出力 送信したクエリを検証し、スクリプトのテスト後にそれらを削除またはコメントアウトできるように、ページ内に詳細なメッセージを追加することがあります。

$locationQuery= mysql_query("SELECT *FROM Location WHERE locationName = '".$locationName."'");
echo "Current Query: ".$locationQuery."<br>\n";
$result = mysql_query($locationQuery) or die(mysql_error());
于 2013-04-20T21:32:46.057 に答える
0

サンプル コードでは、返されたデータを $result 変数に格納していますが、$row 変数からアクセスしようとしています。

$result = mysql_fetch_array($result);

$product = array();
$product["locationName"] = $row["locationName"];

試す

$row = mysql_fetch_array($result);

$product = array();
$product["locationName"] = $row["locationName"];
于 2013-04-20T21:13:37.023 に答える
0

1.

*から選択

* の後のスペースを忘れる

2.

WHERE 場所名 = $場所名"

変数を引用符で囲む必要があります

WHERE locationName = \"$locationName\""

3.

if (!empty($result)) {$result はリソースであり、空ではないため、この条件を削除します

4.

$row変数を使用し、行を次のように変更します$row = mysql_fetch_array($result);

write always or die(mysql_error())

mysql_query('....') または die(mysql_error());

于 2013-04-20T21:10:04.277 に答える