我正在尝试在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中有问题?
提前致谢
干杯
答案 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漏洞。使用预准备语句和参数绑定来防止这种情况。