0

次のような URL で user_email という変数を送信するこの php ファイルがあります。

http:// * ** * ** * *** /android_connect/get_all_products.php?user_email="m"

私のAndroidアプリコードを介して。

ただし、データが返されたとしても、他から「製品が見つかりません」と返されます。ただし、test1クエリを使用すると、正しいデータが返されます! コードがSQLインジェクションに対して価値があることは知っていますが、このように修正するにはどうすればよいですか?? 本当にこれが必要なのを助けてください!!!!!!!!

<?php

/*
 * Following code will list all the products
 */

// array for JSON response
$response = array();

$user_email = $_REQUEST['user_email'];
//echo $user_email;
// include db connect class
require_once __DIR__ . '/db_connect.php';

// connecting to db
$db = new DB_CONNECT();

// get all products from products table
$test = "SELECT *FROM products WHERE user_email= '" . $user_email . "'";


//$test1= "SELECT * FROM products where user_email='m'" ;


//echo $test;
$result = mysql_query($test) or die(mysql_error());


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

    while ($row = mysql_fetch_array($result)) {
        // temp user array
        $product = array();
        $product["pid"] = $row["pid"];
        $product["firstname"] = $row["firstname"];
        $product["lastname"] = $row["lastname"];
        $product["email"] = $row["email"];
        $product["phone"] = $row["phone"];
        $product["address"] = $row["address"];
        $product["created_at"] = $row["created_at"];
        $product["updated_at"] = $row["updated_at"];
        $product["user_email"] = $row["user_email"];


        // push single product into final response array
        array_push($response["products"], $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);
}
?>
4

2 に答える 2

1

get リクエストでメールを引用符で囲んでいます。

http://**********/android_connect/get_all_products.php?user_email="m"
                                                                  ^ ^

"m"そのため、mysql はだけでなく、一致するものを探しmます。

URL から引用符を削除するか、クエリに追加する前に削除する必要があります。

$user_email = trim($user_email, '"'); 

少なくとも、クエリを実行する前にエスケープする必要があります。

$test = mysql_real_escape_string($test); 
$result = mysql_query($test) or die(mysql_error());
于 2013-08-14T16:55:12.763 に答える
-1

http:// * *** /android_connect/get_all_products.php?user_email="m"

echo $user_email; // 「m」です

したがって、SQL は次のようになります。

SELECT * FROM products where user_email=""m"' // ", 空の結果

URL の "" を削除します

于 2013-08-14T17:03:05.440 に答える