我正在尝试允许用户登录我的Android应用。当我将用户名和密码发送到服务器时,它应该返回一个带有用户详细信息的JSON数组。它返回数组但也加载了HTML代码。有谁知道为什么会这样,以及如何解决它?感谢
以下是服务器的响应。这是重复5次的同一块HTML,然后是我需要的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 :(得分: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中的数组需要为索引提供引号,否则您将尝试访问常量。
答案 1 :(得分:1)
首先停止使用mysqli_ *。它已被弃用并且非常安全。移动到PDO极其安全。
您也忘记为$ user添加引号。
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通常无法获取这样的信息,而且您拥有的唯一Echo标记是$ User标记。
我不太了解Javascript,所以我只能对你的Javascript有一个敏锐的洞察力。