从php到android选择具有特定id的值


select values with specific id from php to android

我的代码很好,不会返回任何错误,但检索到的值与前一个字段相同。。例如,如果我将表3设置为"HELLO",那么表4也是"HELLO",这有点错误,我想要单独的值。。这是我的密码。。。

我的登录活动:

public class SigninActivity  extends AsyncTask<String,Void,String>{
 private TextView statusField,roleField, sampleField;
 private Context context;
 private int byGetOrPost = 0; 
 //flag 0 means get and 1 means post.(By default it is get.)
 public SigninActivity(Context context,TextView statusField,TextView roleField,TextView sampleField,int flag) {
  this.context = context;
  this.statusField = statusField;
  this.roleField = roleField;
  this.sampleField = sampleField;
  byGetOrPost = flag;
 }
 protected void onPreExecute(){
 }
  @Override
  protected String doInBackground(String... arg0) {
  if(byGetOrPost == 0){ //means by Get Method
     try{
        String username = (String)arg0[0];
        String password = (String)arg0[1];
        String link = "http://XXX.XXX.X.X/XXX/ins.php?username="
        +username+"&password="+password;
        URL url = new URL(link);
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet();
        request.setURI(new URI(link));
        HttpResponse response = client.execute(request);
        BufferedReader in = new BufferedReader
       (new InputStreamReader(response.getEntity().getContent()));
       StringBuffer sb = new StringBuffer("");
       String line="";
       while ((line = in.readLine()) != null) {
          sb.append(line);
          break;
        }
        in.close();
        return sb.toString();
  }catch(Exception e){
     return new String("Exception: " + e.getMessage());
  }
  }
  else{
     try{
        String username = (String)arg0[0];
        String password = (String)arg0[1];
        String link="http://XXX.XXX.X.X/XXX/sel.php";
        String data  = URLEncoder.encode("username", "UTF-8") 
        + "=" + URLEncoder.encode(username, "UTF-8");
        data += "&" + URLEncoder.encode("password", "UTF-8") 
        + "=" + URLEncoder.encode(password, "UTF-8");
        URL url = new URL(link);
        URLConnection conn = url.openConnection(); 
        conn.setDoOutput(true); 
        OutputStreamWriter wr = new OutputStreamWriter
        (conn.getOutputStream()); 
        wr.write( data ); 
        wr.flush(); 
        BufferedReader reader = new BufferedReader
        (new InputStreamReader(conn.getInputStream()));
        StringBuilder sb = new StringBuilder();
        String line = null;
        // Read Server Response
        while((line = reader.readLine()) != null)
        {
           sb.append(line);
           break;
        }
        return sb.toString();
     }catch(Exception e){
        return new String("Exception: " + e.getMessage());
     }
  }
 }
@Override
protected void onPostExecute(String result){
  this.statusField.setText("Login Successful");
  this.roleField.setText(result);
  this.sampleField.setText(result);
}
}

我的select.php文件(sel.php):

<?php
$con=mysqli_connect("localhost","root","","db_name");
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query($con,"SELECT role,sample FROM table1 WHERE
username='$username' and password='$password'");
$row = mysqli_fetch_array($result);
$data = $row[0];
if($data){
echo $data;
}
mysqli_close($con);
?>

这就是您的问题所在:

@Override
protected void onPostExecute(String result){
  this.statusField.setText("Login Successful");
  this.roleField.setText(result);
  this.sampleField.setText(result);
}

如果希望sampleField和roleField的值不同,则应设置不同的值。

更新

我知道你的另一个问题在哪里了。在未更新的PHP源代码中,你从数据库表中选择了rolesample,但你只输出role,因为$data等于$row[0]。如果您也想要sample,那么还需要检索$row[1]

或者,您也可以使用$row["role"]$row["sample"]来获取从数据库表返回的值。

<?php
$con=mysqli_connect("localhost","root","","db_name");
if (mysqli_connect_errno($con))
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query($con,"SELECT role,sample FROM table1 WHERE
username='$username' and password='$password'");
$row = mysqli_fetch_array($result);
if($row){
    // returns a json object in the form
    // {"role":"<role-from-database>","sample":"<sample-from-database>"}
    $output = array("role" => $row["role"] ,"sample" => $row["sample"]);
    echo json_encode($output);
}
mysqli_close($con);
?>

使用更新的PHP源代码,您应该在SigninActivity中处理JSON对象。

更新2

@Override
protected void onPostExecute(String result){
    String role = "", sample = "";
    // read the json object with JsonReader
    JsonReader reader = new JsonReader(new StringReader(result));
    reader.beginObject();
    while (reader.hasNext()) {
      String name = reader.nextName();
      if (name.equals("role")) {
        role = reader.nextString();
      } else if (name.equals("sample")) {
        sample = reader.nextString();
      } else {
        reader.skipValue();
      }
    }
    reader.endObject();
    // set the text here
}

如果这有帮助,请告诉我。