PHP显示空输出

时间:2013-04-10 14:57:31

标签: php android

我正在编写一个Android应用程序,用于检索属于特定用户的数据。我正在Activity2中使用Activity1的SharedPreference。

这是我在Activity1中存储的SharedPreference

SharedPreferences sp = getSharedPreferences("login details", 0);
SharedPreferences.Editor spedit = sp.edit();
spedit.putString("sPhone",sPhone);              
spedit.putString("sPassword", sPassword);
spedit.commit();

我在Activity2中使用上面的SharedPreference并将其作为String发送到PHP文件: Activity2代码:

SharedPreferences prefs = getSharedPreferences("login details", 0);
String str = prefs.getString("sPhone", "");

nameValuePairs.add(new BasicNameValuePair("userid", str));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httppost.setHeader("Content-type", "application/json");
response = httpclient.execute(httppost);
entity = response.getEntity();
is = entity.getContent();

这是PHP代码:

<?php
mysql_connect("localhost","root","");
mysql_select_db("assigndroid");
header('content-type=application/json; charset=utf-8');

//$userID = isset($_POST['userid']) ? $_POST['userid'] : '';
$userID = mysql_real_escape_string($_POST['userid']);   

$sql=mysql_query("select * from newassignment where issuedBy='$userID';");
while($row=mysql_fetch_assoc($sql))
    $output[]=$row;
print(json_encode($output));
mysql_close();
?>

但SQL查询返回'null'。我收到错误提示“未定义的变量输出”。由于这个空值,应用程序通过说“FATAL EXCEPTION AsyncTask#1”在模拟器上崩溃。

2 个答案:

答案 0 :(得分:1)

在尝试向其附加值之前,需要在PHP中声明数组:

// ...

$output = array(); // Add this line
while($row=mysql_fetch_assoc($sql))
    $output[]=$row;

// ...

如果这样做,错误将消失,输出将不再是无效的JSON。

但请注意,您应该在生产中禁用display_errors,因为错误可能会泄露有关您的应用程序的信息,从而可能会将攻击媒介暴露给恶意用户。

您还将请求内容类型设置为application/json,但您传递的数据的实际类型为application/x-www-form-urlencoded。 PHP不会解码您发送的数据,并且不会填充$_POST。更改请求内容类型:

httppost.setHeader("Content-type", "application/x-www-form-urlencoded");

答案 1 :(得分:0)

DaveRandom首先说明了如何声明你的数组,但你也应该检查查询是否实际成功。是的,它可以在您手动运行时运行,但这并不能保证其他东西出错,比如从Android客户端获取奇怪的数据。

例如:

if( $sql = mysql_query("select * from newassignment where issuedBy='$userID';") ) {
  while($row = mysql_fetch_assoc($sql)) {
    $output[] = $row;
  }
  print(json_encode($output));
} else {
  print(json_encode('query failed: ' . mysql_error()));
}
mysql_close();

此外,请停止使用mysql_*个功能。 Blah blah不赞成使用SQL注入,你知道整个歌曲和舞蹈......