2016-03-20 4 views
0

Я пытаюсь разрешить пользователям входить в мое приложение для Android. Когда я отправляю имя пользователя и пароль на сервер, он должен возвращать массив JSON с данными пользователя. Он возвращает массив, но также загружает HTML-код. Кто-нибудь знает, почему это происходит и как это исправить? ThanksAndroid получает странный результат от php-сервера

Это ответ с сервера. Это тот же блок HTML, который повторяется 5 раз, а затем массив JSON, который мне нужен.

<br /> 
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Notice: Use of undefined constant student_id - assumed 'student_id' in C:\wamp64\www\fetchuserdata.php on line <i>17</i></th></tr> 
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> 
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> 
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>241296</td><td bgcolor='#eeeeec'>{main}()</td><td title='C:\wamp64\www\fetchuserdata.php' bgcolor='#eeeeec'>...\fetchuserdata.php<b>:</b>0</td></tr> 
    </table></font> 
<br /> 
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Notice: Use of undefined constant student_id - assumed 'student_id' in C:\wamp64\www\fetchuserdata.php on line <i>17</i></th></tr> 
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> 
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> 
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>241296</td><td bgcolor='#eeeeec'>{main}()</td><td title='C:\wamp64\www\fetchuserdata.php' bgcolor='#eeeeec'>...\fetchuserdata.php<b>:</b>0</td></tr> 
    </table></font> 
<br /> 
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Notice: Use of undefined constant student_id - assumed 'student_id' in C:\wamp64\www\fetchuserdata.php on line <i>17</i></th></tr> 
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> 
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> 
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>241296</td><td bgcolor='#eeeeec'>{main}()</td><td title='C:\wamp64\www\fetchuserdata.php' bgcolor='#eeeeec'>...\fetchuserdata.php<b>:</b>0</td></tr> 
    </table></font> 
<br /> 
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Notice: Use of undefined constant student_id - assumed 'student_id' in C:\wamp64\www\fetchuserdata.php on line <i>17</i></th></tr> 
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> 
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> 
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>241296</td><td bgcolor='#eeeeec'>{main}()</td><td title='C:\wamp64\www\fetchuserdata.php' bgcolor='#eeeeec'>...\fetchuserdata.php<b>:</b>0</td></tr> 
    </table></font> 
<br /> 
    <font size='1'><table class='xdebug-error xe-notice' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
    <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Notice: Use of undefined constant student_id - assumed 'student_id' in C:\wamp64\www\fetchuserdata.php on line <i>17</i></th></tr> 
    <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> 
    <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> 
    <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0005</td><td bgcolor='#eeeeec' align='right'>241296</td><td bgcolor='#eeeeec'>{main}()</td><td title='C:\wamp64\www\fetchuserdata.php' bgcolor='#eeeeec'>...\fetchuserdata.php<b>:</b>0</td></tr> 
    </table></font> 
{"student_id":10381109,"fname":"Jack":"lname":"Finan","username":"123","password":"123"} 

Это мой Java-код:

public class MainActivity extends AppCompatActivity implements View.OnClickListener 
{ 

TextView responseView; 
EditText etUsername; 
EditText etPassword; 
ProgressBar progressBar; 
Button bLogin; 
static final String SERVER_ADDRESS = "http://192.168.1.11:8080/"; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    responseView = (TextView) findViewById(R.id.responseView); 
    etUsername = (EditText) findViewById(R.id.etUsername); 
    etPassword = (EditText) findViewById(R.id.etPassword); 
    progressBar = (ProgressBar) findViewById(R.id.progressBar); 
    bLogin = (Button) findViewById(R.id.bLogin); 
    bLogin.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) 
{ 
    switch(v.getId()){ 
     case R.id.bLogin: 
      String username = etUsername.getText().toString(); 
      String password = etPassword.getText().toString(); 

      User user = new User(username, password); 

      getUser(user); 
      break; 
    } 
} 

public void getUser(User user) 
{ 
    new GetJSONData(user).execute(); 
} 

class GetJSONData extends AsyncTask<Void, Void, String> // class to fetch javascript object data 
{ 
    User user; // variable 

    GetJSONData(User user) // constructor 
    { 
     this.user = user; 
    } 

    protected void onPreExecute() // methods below 
    { 
     progressBar.setVisibility(View.VISIBLE); 
     responseView.setText(""); 
    } 

    protected String doInBackground(Void... urls) 
    { 

     HttpURLConnection connection = null; 
     BufferedReader reader = null; 

     try { 
      URL url = new URL(SERVER_ADDRESS + "fetchuserdata.php"); // the server we hit and the course code we want entered 
      connection = (HttpURLConnection) url.openConnection(); // open connection 
      connection.setRequestMethod("POST"); 

      Uri.Builder builder = new Uri.Builder().appendQueryParameter("username", user.username).appendQueryParameter("password",user.password); 
      String query = builder.build().getEncodedQuery(); 
      OutputStream os = connection.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os,"UTF-8")); 
      writer.write(query); 
      writer.flush(); 
      writer.close(); 
      os.close(); 

      connection.connect(); // connect 

      InputStream stream = connection.getInputStream(); // create input stream of data 
      reader = new BufferedReader(new InputStreamReader(stream)); // create buffered reader to help read input stream of data 

      StringBuilder buffer = new StringBuilder(); 
      String line; 

      while ((line = reader.readLine()) != null) { 
       buffer.append(line).append("\n"); 
      } 

      return buffer.toString(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      if(connection != null) 
      { 
       connection.disconnect(); 
      } 
      try 
      { 
       if(reader != null) 
       { 
        reader.close(); 
       } 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

    protected void onPostExecute(String result) 
    { 
     if(result == null) { 
      result = "THERE WAS AN ERROR"; 
     } 
     progressBar.setVisibility(View.GONE); 
     Log.i("INFO", result); 
     responseView.setText(result); 
    } 
} 
} 

И PHP:

<?php 
$con=mysqli_connect('localhost','root','164f9ogC!','user'); 

$username = $_POST["username"]; 
$password = $_POST["password"]; 

$statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ? AND password = ?"); 
mysqli_stmt_bind_param($statement, "ss", $username, $password); 
mysqli_stmt_execute($statement); 

mysqli_stmt_store_result($statement); 
mysqli_stmt_bind_result($statement, $student_id, $fname, $lname, $username, $password); 

$user = array(); 

while(mysqli_stmt_fetch($statement)){ 
    $user[student_id] = $student_id; 
    $user[fname] = $fname; 
    $user[lname] = $lname; 
    $user[username] = $username; 
    $user[password] = $password; 
} 

echo json_encode($user); 

mysqli_stmt_close($statement); 

mysqli_close($con); 
?> 
+0

Этот html-результат является предупреждением. Прочтите. Вы увидите, где появляется часть, которая вызывает это предупреждение. – Raizal

ответ

3

Вы получаете HTML, потому что у вас есть ошибки в PHP. Если вы прочитаете блоки HTML, вы увидите, что ошибка находится в пределах вашего цикла while. измените его на:

while(mysqli_stmt_fetch($statement)){ 
    $user['student_id'] = $student_id; 
    $user['fname'] = $fname; 
    $user['lname'] = $lname; 
    $user['username'] = $username; 
    $user['password'] = $password; 
} 

Массив в PHP должен иметь кавычки для индекса, в противном случае вы пытаетесь получить доступ к константе.

+0

Yup, все. Большое спасибо. –

1

Прежде всего прекратите использовать mysqli_ *. Он устарел и очень безопасен. Переходите к PDO как его ЧРЕЗВЫЧАЙНО безопасно.

Вы также забыли добавить котировки для пользователя $.

while(mysqli_stmt_fetch($statement)){ 
    $user['student_id'] = $student_id; 
    $user['fname'] = $fname; 
    $user['lname'] = $lname; 
    $user['username'] = $username; 
    $user['password'] = $password; 
} 

Я могу подтвердить, что Javascript является то, что вывод HTML как PHP вообще не может получить информацию, как, что и только эхо тегов у вас есть для $ User тега.

Я не очень хорошо разбираюсь в Javascript, поэтому все, что я могу сказать, просто заглядывает в ваш Javascript.