0

次のコードを使用して、Android アプリから PHP スクリプトにデータを投稿しています。

public class Upload extends Activity implements OnClickListener {
EditText joke;
Button upload = (Button) findViewById(R.id.bUpload);
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.upload);
    upload.setOnClickListener(this);
}
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.bUpload:
        uploadJoke();
        break;
    }

}
private void uploadJoke() {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://xxxx/telejoke.php");

    try {
        // Add your data
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("username", "test"));
        nameValuePairs.add(new BasicNameValuePair("joke", joke.getText().toString()));
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        // Execute HTTP Post Request
        HttpResponse response = httpclient.execute(httppost);

    } catch (ClientProtocolException e) {
    } catch (IOException e) {
    }
}

このコードはデータを PHP スクリプトに送信し、PHP スクリプトはそのデータを SQL データベースに送信します。このデータは SQL データベースに表示されますが、 http://xxxx/telejoke.phpecho $usernameにアクセスしたときにユーザー名が表示されないようなことをしようとすると、

PHP スクリプト:

<?php
  include 'DBConnect.php';
  include 'JokeValidate.php';

  $username = $_POST['username'];
  $joke = $_POST['joke'];
  $dbname = 'Telejoke';
  mysql_select_db($dbname);

  echo $username. " " . $joke;

  if (validate()){
    $query = "INSERT INTO jokes (username, joke) VALUES ('$username','$joke')";
    mysql_query($query) or die('Error, insert query failed');
  }
  mysql_close($conn);
?>

助けてください。データベースに送信するだけでなく、投稿されたデータをPHPで処理したい。

4

1 に答える 1

2

register_globalsがオフになっていると思います(これで問題ありません)!!!

$ _POST ['username'](もちろんtelepost.php)を介してユーザー名をアドレス指定する必要があります。

OKAY(php-scriptを投稿した後、私はそれを手に入れたと思います)。「http://xxx/telejoke.phpにアクセスした後、ユーザー名が表示されませんが、データは正しくアップロードされています」とおっしゃいました。

->ええ、その振る舞いは正しいです。phpスクリプトにPOSTパラメータを渡さないため、$ _POST['username']は空です。

->ただし、アプリケーションを介してスクリプトを呼び出す場合は、必要なPOSTパラメーター(ユーザー名、ジョークなど)をスクリプトに渡します。したがって、データベースにデータを正しく書き込むことができます。

さらに、SQLインジェクションを防ぐためにSQL/スクリプトを最適化する必要があります。悪いユーザーはあなたのウェブサイトに損害を与えるかもしれません(例えば、すべてのジョークを削除するなど...)

于 2012-04-09T18:00:27.460 に答える