0

Android を学習し、PHP スクリプトと WAMP サーバーを使用してユーザー名とパスワードを確認するコードを作成しようとしています。PHP スクリプトから未定義のインデックス エラーが発生し続けます。私が確認できる限り、これは私の PHP スクリプトが URL からのデータにアクセスできないことを意味します。関連するコードは次のとおりです。どんな助けでも大歓迎です。

//build url data to be sent to server
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("username",username));
        nameValuePairs.add(new BasicNameValuePair("password",password));

        String result = "";
        InputStream is = null;
        //http post
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/PasswordCheck.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
        }catch(Exception e){
            Log.e("Connection", "Error in http connection "+e.toString());
        }

ここに私のPHPスクリプトがあります

<?php
mysql_connect("localhost", "root", "") or die("could not connect to mysql");
mysql_select_db("drop-in") or die("database not found");

$username = $_POST["username"];
$suppliedPassword = $_POST["password"];
$databasePassword = "";
$output = "false";
$query = mysql_query("SELECT Password FROM users WHERE Username = '$username'") or die("query failed");
if(mysql_num_rows($query) > 0){
    $row = mysql_fetch_assoc($query); 
    $databasePassword = $row['password'];
    if($databasePassword == $suppliedPassword)
    {
        $output = "true";
    }
}
    print($output);
    mysql_close();
?>

そして、ここにサーバーの応答の写真があります

http://imgur.com/sQStI2D

編集: PHP スクリプトがこれらのエラーを出していても、$username 変数と $password 変数には、Android アプリが渡そうとした値が含まれていることがわかりました。ただし、これらのエラーの存在は、エラー テーブルの HTML が応答で Android アプリに送り返されるため、コードをいじっています。

4

3 に答える 3

1

私には、Android コードが「ユーザー名」フィールドと「パスワード」フィールドを POST していないように見えます。これは、PHP スクリプトがそれらを見つけられない理由を説明しています。

あなたのコードでは、このコードサンプルを見るnew ArrayList<NameValuePair>();と、arrayList の長さが欠落している可能性があります。new ArrayList<NameValuePair>(2);

于 2013-08-21T01:46:44.133 に答える
0

単純なスペルミスであることがわかりました。ループ内の単語「password」に、大文字ではなく小文字の「p」を使用しました。それがエラーを引き起こしたのは奇妙です。

于 2013-08-21T04:11:39.490 に答える
0

PHP で json_decode() 関数を試すことができます。

サーバー上にファイルを作成し、Android リクエストのコンテンツを単純なテキスト ファイルに入れると、配列出力が得られます。そのファイルで。

サーバーの .php ファイルに次のコードを記述します。

<?php
$data=file_put_content(collect.txt, $_POST);
 // if you got to know object or array name from txt file use it.
$array=json_decode($data, true) // for array output.
print_r($array);
?>

ファイルから読み取りたくない場合は、配列名がわかっている場合はjsonオブジェクトで直接使用できます

<?php

$array=json_decode($data) // remove true for use as an object output.
print_r($array);
?>

配列を取得したら、値を新しい変数に割り当てて、それらを使って好きなことをします。必要に応じてデータベースまたは何かを更新します

于 2015-08-31T17:41:49.567 に答える