【发布时间】:2016-08-25 11:27:43
【问题描述】:
我想要的是,当某人(用户)单击主要活动上的按钮时,两个值将在 volley POST 请求的帮助下发送到 php 文件,比如 minvalue 和 maxvalue,它会从 mysql 中相应地选择数据数据库。
这是我的 POST 请求代码:
public void FilterPower(View view) {
StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.DATA_URL,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
/*Some Method*/
/*Display data in recyclerview*/
//Initializing Views
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
//Initializing our superheroes list
listSuperHeroes = new ArrayList<>();
//Calling method to get data
getData();
/*End Display data in recyclerview*/
/*End Some Method*/
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String,String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("minvalue", "1000");
params.put("maxvalue", "2000");
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
requestQueue.add(stringRequest);
}
}
我的 PHP 文件代码:
<?php
$con = mysqli_connect("127.0.0.1","superinfoadmin","","superhero");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if($_SERVER['REQUEST_METHOD']=='POST'){
$minvalue = $_POST['minvalue'];
$maxvalue = $_POST['maxvalue'];
$result = mysqli_query($con, "SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id AND (s_power BETWEEN $minvalue AND $maxvalue)");
//$result = mysqli_query($con, "INSERT INTO testDB (min, max) VALUES ('$minvalue', '$maxvalue')");
while($row = mysqli_fetch_assoc($result))
{
$output[]=$row;
}
print(json_encode($output));
mysqli_close($con);
}
?>
当我尝试使用上面的代码运行我的应用程序时,没有数据被选择并显示在 recyclerview 中。
但是当我尝试使用相同的变量在数据库中插入值时,值就会被插入。
我什至尝试同时保留 select 和 insert 语句以检查它是否进入“IF”循环,是的,它确实进入并在 DB 中插入值但不执行 select 语句。
但是,如果我给出一个 else 语句来选择所有数据并将其显示在 recyclerview 中,它可以正常工作,因此在 recyclerview 中显示数据没有问题,代码可以正常工作。下面是带有 else 语句的相同 PHP 代码:
if($_SERVER['REQUEST_METHOD']=='POST'){
$minvalue = $_POST['minvalue'];
$maxvalue = $_POST['maxvalue'];
$result = mysqli_query($con, "SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id AND (s_power BETWEEN $minvalue AND $maxvalue)");
//$result = mysqli_query($con, "INSERT INTO testDB (min, max) VALUES ('$minvalue', '$maxvalue')");
while($row = mysqli_fetch_assoc($result))
{
$output[]=$row;
}
print(json_encode($output));
mysqli_close($con);
}
else{
$result = mysqli_query($con, "SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id");
while($row = mysqli_fetch_assoc($result))
{
$output[]=$row;
}
print(json_encode($output));
mysqli_close($con);
}
请帮助我不知道我做错了什么或没有做什么。
【问题讨论】:
-
SELECT声明看起来很可疑。我猜你需要在表之间创建一个JOIN,以获取它们共同的值。 -
在
$result之前使用变量,例如$sql="SELECT * FROM superinfo, publisher WHERE superinfo.s_publisherid=publisher.p_id AND (s_power BETWEEN $minvalue AND $maxvalue)";
和echo $sql; -
检查输出的查询
-
@SanoojT 已尝试将查询存储在某个变量中,然后调用该变量但没有成功:(
-
嗨@克里希纳!你能解决问题吗?
标签: php mysql json post android-volley