我有一个Android应用程序,它将json字符串发送到我的服务器,其格式如下:
{"drink_name":"testing","phone_number":"5555555555"}
当我使用命令:SELECT * FROM orders时,它显示空白条目已插入表中。
我认为我的问题来自我的PHP脚本(主要是因为我是PHP新手)。 我正确地解析了json吗? 下面是我写的脚本。
<?php
$handle = mysql_connect('localhost',USERNAME,PASSWORD);
if($handle==false)
{
die('No database connection');
}
$db=mysql_select_db('r2bar2');
$json = file_get_contents('php://input');
$obj = json_decode($json);
mysql_query("INSERT INTO orders (phone_number, drink_name)
VALUES ('".$obj->{'phone_number'}."', '".$obj->{'drink_name'}."')");
mysql_close($handle);
?>
编辑: 如果有任何帮助,这是我的Android代码。
protected void sendJson(final String phnNmbr, final String drink) {
Thread t = new Thread(){
public void run() {
Looper.prepare(); //For Preparing Message Pool for the child Thread
HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
HttpResponse response;
JSONObject json = new JSONObject();
try{
HttpPost post = new HttpPost("http://kubie.dyndns-home.com/R2Bar2/sendOrder.php");
json.put("phone_number", phnNmbr);
json.put("drink_name", drink);
StringEntity se = new StringEntity( "orders: " + json.toString());
se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
post.setEntity(se);
response = client.execute(post);
/*Checking response */
Toast.makeText(getApplicationContext(), json.toString(), Toast.LENGTH_LONG).show();
if(response!=null){
InputStream in = response.getEntity().getContent(); //Get the data in the entity
}
}
catch(Exception e){
e.printStackTrace();
//createDialog("Error", "Cannot Estabilish Connection");
}
Looper.loop(); //Loop in the message queue
}
};
t.start();
}
答案 0 :(得分:1)
除了您尝试访问服务器上的json数据之外,我使用了相同的方法。
我曾使用$ _POST数组来访问它,它对我来说效果很好。尝试使用,
$json = $_POST['orders'];
$obj = json_decode($json);
这对我来说非常有效。祝一切顺利 :) (我不认为$ handle存在问题,因为正在将某些内容插入表中)
答案 1 :(得分:1)
我弄清楚我做错了什么。好像我传入的是原始数据类型。为了解析字符串,我使用了以下内容:
$obj = json_decode(file_get_contents("php://input"));
mysql_query("INSERT INTO orders (phone_number, drink_name)
VALUES ('".$obj->{'phone_number'}."', '".$obj->{'drink_name'}."')");
感谢大家的建议。
答案 2 :(得分:0)
您已按如下方式连接到数据库,您错过了$ handle来建立连接
$handle = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$handle) {
die('Not connected : ' . mysql_error());
}
// make r2bar2 the current db
$db=mysql_select_db('r2bar2',$handle);
if (!$db) {
die ('Can\'t use r2bar2 : ' . mysql_error());
}