Php Json读取mysql列,其中列=$variable
我希望在同一届会议上按此顺序实现以下目标:Php Json读取mysql列,其中列=$variable,php,android,mysql,json,post,Php,Android,Mysql,Json,Post,我希望在同一届会议上按此顺序实现以下目标: 获取android变量(imei) 将变量发送到php 在sql中使用变量 将结果发送回android 我使用以下方法: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contacts); // 01 - fi
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
// 01 - first i get imei
TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
IMEI = mngr.getDeviceId();
// 02 - then i call class to post imei to php
new loadData().execute();
// 03 - on php side i use "select ... where $imei ..."
// 04 - get the results back to android
// (yes i am aware that this method is commented out, i will explain why below)
//accessWebService();
}
职位:
class loadData扩展了异步任务{
私家侦探;
私人关系;
专用HttpResponse请求;
私有输入流是;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
ArrayList nameValuePairs=新的ArrayList();
字符串imeino=String.valueOf(IMEI);
添加(新的BasicNameValuePair(“imeino”,imeino));
尝试
{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://blah/contacts.php");
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
is=entity.getContent();
InputStreamReader ireader=新的InputStreamReader(is);
BufferedReader bf=新的BufferedReader(ireader);
sb=新的StringBuilder();
字符串行=null;
而((line=bf.readLine())!=null){
某人附加(行);
}
Log.e(“通过1”,“连接成功”);
}
捕获(例外e)
{
Log.e(“错误发送”,例如toString());
}
返回id;
}
}
得到
私有类JsonReadTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…参数){
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(参数[0]);
试一试{
HttpResponse response=httpclient.execute(httppost);
jsonResult=inputStreamToString(response.getEntity().getContent()).toString();
System.out.println(“jsonResult:+jsonResult”);
}
捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}
私有StringBuilder inputStreamToString(InputStream为){
字符串rLine=“”;
StringBuilder answer=新建StringBuilder();
BufferedReader rd=新的BufferedReader(新的InputStreamReader(is));
试一试{
而((rLine=rd.readLine())!=null){
答:追加(rLine);
}
}
捕获(IOE异常){
//e.printStackTrace();
Toast.makeText(getApplicationContext(),
“错误…”+e.toString(),Toast.LENGTH_LONG).show();
}
返回答案;
}
@凌驾
受保护的void onPostExecute(字符串结果){
ListDrwaer();
}
}//结束异步任务
public void accessWebService(){
JsonReadTask=新建JsonReadTask();
//传递URL字符串数组的值
task.execute(新字符串[]{”http://blah/contacts.php" });
}
//为列表视图生成哈希集
公共无效列表{
试一试{
JSONObject jsonResponse=新的JSONObject(jsonResult);
JSONArray jsonMainNode=jsonResponse.optJSONArray(“联系信息”);
for(int i=0;i
PHP:
好的,下面是关于代码的故事:
当我只是发布[newloaddata().execute()
]而没有获取[accessWebService();
]时,我可以读取我的$imei=isset($\u POST['imeino'])$_POST['imeino']:''代码>变量为0000000000000
,但是我当然不能返回结果,因为accessWebService()
被注释掉了
但是,当我取消注释accessWebService()
时,我可以将结果返回到android,但它们是null
,因为现在$imei=isset($\u POST['imeino'])$_POST['imeino']:''代码>为空
因此,总结一下:
无论何时调用GET方法,我都会丢失POST变量 PHP
要在PHP中支持GET
和POST
变量,可以使用:
检查参数是否已设置也是明智的,如果未设置,则返回错误:
if ( empty($imei) ) {
echo json_encode( array( 'error' => 'Missing imeino parameter' ) );
return;
}
而且,非常重要的是,在将输入传递给mysql之前,请对其进行清理。这是危险的:
$sql = "select * from users WHERE IMEI ='$imei'";
因为有人可能会用contacts.PHP?imeino='调用您的PHP脚本;删除表用户的
。了解更多信息
顺便说一句;我建议使用
Java
访问API的GET
方法只需稍作更改即可将imeino
参数传递给PHP脚本:
public void accessWebService( String imei ) {
JsonReadTask task = new JsonReadTask();
task.execute(new String[] { "http://blah/contacts.php?imeino=" + imei });
}
而且,您需要使用IMEI调用accessWebService
。没错。您可以使用$\u GET
,或者同时支持$\u POST
和$\u GET
$imei = isset($_REQUEST['imeino']) ? $_REQUEST['imeino'] : '';
if ( empty($imei) ) {
echo json_encode( array( 'error' => 'Missing imeino parameter' ) );
return;
}
$sql = "select * from users WHERE IMEI ='$imei'";
public void accessWebService( String imei ) {
JsonReadTask task = new JsonReadTask();
task.execute(new String[] { "http://blah/contacts.php?imeino=" + imei });
}