【问题标题】:POST parameter to php using AsyncHttpClient使用 AsyncHttpClient 将参数 POST 到 php
【发布时间】:2015-09-04 14:13:32
【问题描述】:

我想使用 MySQL 从我的数据库中删除一行。我需要将要从我的 Android 应用程序中删除的参数传递给 php 脚本。我正在使用 AsyncHttpClient 但没有任何反应,我在日志中收到一条 OK 消息。

我尝试将我的 php 脚本中的值 username="$name" 更改为表中的现有值,它可以正常工作,该行被删除。我认为我的错误在于将值从 Android 传递给 php。

deleteuser.php 脚本:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysql_error());
}

$name = $_GET["username"];

$sql = 'DELETE FROM usuarios
        WHERE username="$name"';

mysql_select_db('etsiitcast_db');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
  die('Could not delete data: ' . mysql_error());
}
echo "Deleted data successfully\n";
mysql_close($conn);
?>

安卓代码:

 final AsyncHttpClient client = new AsyncHttpClient();

        Button delete = (Button) rootView.findViewById(R.id.delete);
        delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                RequestParams params = new RequestParams();
                params.put("username", user);

                client.post("http://" + IP_Server + "/etsiitcast_db/deleteuser.php", params, new AsyncHttpResponseHandler() {

                    @Override
                    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                        Log.d("OK", "Usuario eliminado");
                        getActivity().finish();
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                        Log.d("ERROR", "Se ha producido un error al eliminar al usuario");
                    }
                });
            }
        });

其中user 是一个字符串,其值为用户名:

Bundle extras = getActivity().getIntent().getExtras();

if (extras != null){
   user = extras.getString("user");
} else {
   user = "error";
}

更新:

在我的 Android 代码中,我更改了这一行:

client.get("http://" + IP_Server + "/etsiitcast_db/deleteuser.php", params, new AsyncHttpResponseHandler() { [...] }

新的php脚本:

<?php
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'root';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('Could not connect: ' . mysqli_error());
}

$name = $_GET["username"];
$name = $mysqli->real_escape_string($name);

$sql = 'DELETE FROM usuarios
        WHERE username="$name"';

mysqli_select_db('etsiitcast_db');
$retval = mysqli_query( $sql, $conn );
if(! $retval )
{
  die('Could not delete data: ' . mysqli_error());
}
echo "Deleted data successfully\n";
mysqli_close($conn);
?>

【问题讨论】:

  • 请注意,您使用的是已弃用的 MySQL 命令 - 使用 mysqli_* 而不是 mysql_*。此外,您的 PHP 脚本会暴露于 SQL 注入(不要将 $name 原样传递给查询!确保首先使用 mysqli_real_escape_string 对其进行过滤)。

标签: php android mysql delete-row asynchttpclient


【解决方案1】:

在您的 Android 应用程序上,您正在使用 client.post,它会向网络服务器生成 POST 命令。但是,在您的 PHP 脚本中,您正在寻找 $_GET 值。

您应该将您的 Android 应用程序更改为执行 client.get 或将您的 PHP 脚本更改为访问 $_POST['username']

【讨论】:

  • 我已经尝试了两种方法,但它不起作用。我添加了$name = $mysqli-&gt;real_escape_string($name); 并将mysql_* 更改为mysql_*
  • 您能否更新您的问题以反映您所做的更改?
  • mysqli_query 具有相反的参数顺序。使用mysqli_query($conn, $sql); 而不是您当前的呼叫,并检查您的 php 错误日志以查看是否有其他错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
相关资源
最近更新 更多