如何在php中读取json数组

时间:2016-01-09 19:40:09

标签: php android arrays json

我正在尝试在php中读取我的android-data并将其插入到两个不同的表中(一个表包含公共数据,一个表包含数组中的每个项)。将公共数据插入到订单表中工作正常,但数组数据没有。

这是我的basic-ValuePairs:

我的android代码
ArrayList<ShoppingCardArticle> shoppingCardArticles = UsingSharedPrefs.getShoppingCard();

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

            TextView time = (TextView)findViewById(R.id.textView1);
            String stringTime = time.getText().toString();
            int amount = shoppingCardArticles.size();
            String sAmount = Integer.toString(amount);
            double fullprice = 0;
                for(int a=0;a<shoppingCardArticles.size();a++) {
                    double price = shoppingCardArticles.get(a).getArticlePrice();
                    int quant = shoppingCardArticles.get(a).getArticleQuantity();
                    price = price * quant;
                    fullprice = fullprice + price;
                }
            String sFullprice = Double.toString(fullprice);
            nameValuePairs.add(new BasicNameValuePair("fullprice", sFullprice));
            nameValuePairs.add(new BasicNameValuePair("amount", sAmount));
            nameValuePairs.add(new BasicNameValuePair("time", stringTime));

            for(int i = 0; i<shoppingCardArticles.size(); i++) {
                String proid = Integer.toString(shoppingCardArticles.get(i).getArticleId());
                String proquan = Integer.toString(shoppingCardArticles.get(i).getArticleQuantity());


                nameValuePairs.add(new BasicNameValuePair("proid[]", proid));
                nameValuePairs.add(new BasicNameValuePair("proquan[]", proquan));
            }

            JSONParser jsonParser = new JSONParser();
            JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", nameValuePairs);
            return null;

这是我的php代码:

$lastIdSql = "SELECT orderID FROM orders ORDER BY orderID DESC LIMIT 1";
$lastID = mysqli_query( $mysqli, $lastIdSql );
if ( ! $lastID ) {
    @die(@mysqli_error());
}
$lastIDi = mysqli_fetch_array($lastID);
$lastIDii = $lastIDi['orderID'];
$ordDynID = $lastIDii + 1; 

$fullprice = $_POST['fullprice'];
$amount = $_POST['amount'];
$time = $_POST['time'];

$queryOrd = "INSERT INTO orders (userID, fullprice, orderTime, amount, ordDynID) VALUES ('1', '$ordFullPrice', '$ordTime', '$ordAmount', '$ordDynID')";

if ($mysqli->query($queryOrd) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $queryOrd . "<br>" . $mysqli->error;
}

$proID = array($_POST['proid']);
$proQuan = array($_POST['proquan']);

foreach($proID as $item) { 
    $productid = $item['proid']; 
    $productquantity = $item['proquan'];

    $query = "INSERT INTO ordersproducts (ordID, proID, proQuan) VALUES ('$ordDynID', '$productid', '$productquantity')";

    if ($mysqli->query($query) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $query . "<br>" . $mysqli->error;
    }
}
$mysqli->close();

所以我的问题是,在我的php文件中读取数据时我做错了什么,或者我的android-code中有问题?

提前致谢

干杯

2 个答案:

答案 0 :(得分:1)

我不是Android开发人员,但我可以帮助您在PHP代码中调试它。首先,你能做一个var_dump($ _ POST)并告诉我输出吗?

我可以看到你正在使用json_decode错误,看起来你正试图将它用于每个键值对而不是完整的json文本。 它的工作方式(检查http://php.net/manual/en/function.json-decode.php for more information是你传递一个完整的json文本(即'{“a”:1,“b”:2}')并将其转换为POPO(普通的旧PHP对象)可以通过这种方式访问​​

$object = json_decode('{ "a":1, "b":2 }');
$a = $object->a; // $a = 1
$b = $object->b; // $b = 2

答案 1 :(得分:1)

当您在Android代码中按名称发布数组时,如proID[]proQuan[]$_POST['proid']$_POST['proquan']已经是数组。它类似于一个html表单,其中有几个带有方括号的输入,即。(<input type="text" "name="proid[]" value="" />)所以你只需要像这样分配它。

$proID = $_POST['proid'];
$proQuan = $_POST['proquan'];

假设$proID$proQuan中的元素正确映射到彼此。 for循环更适合迭代数组。

for ($i = 0; $i < count($proID); $i++) {
    $productid = $proID[$i]; 
    $productquantity = $proQuan[$i];
    //your insert goes here

}

当然,我应该告诉你PHP代码中的SQL Injection漏洞。使用预准备语句和参数绑定来防止这种情况。