Jack Finan
Jack Finan

Reputation: 109

Android getting strange result from php server

I'm trying to allow users to log in to my Android app. When I send the username and password to the server it should return a JSON array with the user's details. It is returning the array but also loads of HTML code. Does anyone know why this is happening and how to fix it? Thanks

Here is the response from the server. It's the same block of HTML repeated 5 times, followed by the JSON array that I need.

<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"}

This is my Java code:

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);
    }
}
}

And the 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);
?>

Upvotes: 0

Views: 616

Answers (2)

user6079847
user6079847

Reputation:

First of all stop using mysqli_*. It is deprecated and very in-secure. Move to PDO as its EXTREMELY secure.

You also forgot to add the Quotes for $user.

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

I can confirm that the Javascript is what is outputting the HTML as the PHP generally cant get information like that and the only Echo tag you have is for the $User tag.

I dont know Javascript very well so all I can say is just take a keen eye on your Javascript.

Upvotes: 1

Jon
Jon

Reputation: 4736

You are getting the HTML because you have errors in the PHP. If you read the blocks of HTML, you'll see the error is within your while loop. change it to:

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

The array in PHP need to have quotes for the index, otherwise you are trying to access a constant.

Upvotes: 4

Related Questions