Reputation: 109
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
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
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