2015-09-04 44 views
0

我想使用MySQL从我的数据库中删除一行。我需要将我想从我的Android应用程序中删除的参数传递给php脚本。我使用的是AsyncHttpClient,但没有发生,我在日志中收到了一条确定的消息。使用AsyncHttpClient将参数POST参数到

我已经尝试将我的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); 
?> 

的Android代码:

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"; 
} 

UPDATE:

在我的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); 
?> 
+0

请注意,您正在使用不推荐的MySQL命令 - 使用mysqli_ *而不是mysql_ *。你的PHP脚本也暴露给SQL注入(不要像查询那样传递$ name!请确保先用mysqli_real_escape_string过滤它)。 – uri2x

回答

0

在你的Android应用程序,你使用client.post产生一个POST命令到Web服务器。但是,在您的PHP脚本中,您正在查找$_GET值。

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

+0

我已经尝试了两种方式,但它不工作。我添加了'$ name = $ mysqli-> real_escape_string($ name);'并将'mysql_ *'改为'mysql_ *'。 –

+0

您是否可以更新您的问题以反映您所做的更改? – uri2x

+0

我已更新我的问题。 –