【问题标题】:Weirdness when data POST to PHP script数据POST到PHP脚本时的怪异
【发布时间】:2012-04-09 17:48:38
【问题描述】:

我正在使用以下代码将数据从 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 脚本,然后将其发送到 SQL 数据库。此数据显示在 SQL 数据库中,但如果我尝试像 echo $username 这样的操作,当我转到 http://xxxx/telejoke.php 时,它不会显示用户名。

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 对发布的数据进行处理。

【问题讨论】:

  • 如果数据可以正常进入数据库,那么我们需要查看 telejoke.php,因为 java 代码没有任何问题。
  • 为什么不发布你的php代码?此客户端代码对您的服务器代码中的问题没有多大帮助
  • 按钮点击是明确的工作。上传后我可以在我的数据库中看到数据。 EditText 笑话用于nameValuePairs.add(new BasicNameValuePair("joke", joke.getText().toString()));

标签: php android mysql post httpclient


【解决方案1】:

我猜 register_globals 是关闭的(这很好)!!!

您必须通过 $_POST['username'](当然在 telepost.php 中)来处理用户名。

好的(在你发布了你的 php 脚本之后,我想我明白了)。 您说“转到http://xxx/telejoke.php 后,我看不到我的用户名,但数据已正确上传”。

--> 是的,这种行为是正确的。 您没有将任何 POST 参数传递给您的 php 脚本,因此 $_POST['username'] 为空。

--> 但是,如果您通过应用程序调用脚本,您会将所需的 POST 参数(用户名、笑话等)传递给您的脚本。因此它可以将您的数据正确写入您的数据库。

此外,您应该优化您的 SQL/脚本以防止 SQL 注入。 不良用户可能会损坏您的网站(例如删除所有笑话等...)

【讨论】:

  • 好吧,当我从我的应用程序调用脚本,然后转到xxx/telejoke.php,它不应该回显上次发布笑话的用户名吗?如果是这种情况,它就不会发生。稍后我会担心用户注入,但感谢您的提醒。
  • 不,因为它是一个新请求(默认情况下 http 状态较少 -> 不存储任何信息),因此您必须将请求参数传递给您的脚本,否则不会发生任何事情。但是您可以创建一个页面 - 比如说 listjokes.php - 您可以在其中看到存储在数据库中的所有笑话。
  • 哦,明白了。感谢您的帮助:P
猜你喜欢
  • 1970-01-01
  • 2021-01-08
  • 2023-03-28
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 2012-04-10
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多