安卓从php服务器得到奇怪的结果


Android getting strange result from php server

我正在尝试允许用户登录我的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);
?>

你得到的是 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 中的数组需要为索引加上引号,否则您将尝试访问常量。

首先停止使用 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。