我学习android并尝试使用PHP脚本和WAMP服务器编写一些代码来验证用户名和密码。我一直在从PHP脚本中获取未定义的索引错误。据我所知,这意味着我的PHP脚本无法访问URL中的数据。这是相关的代码。任何帮助表示赞赏。
//build url data to be sent to server
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username",username));
nameValuePairs.add(new BasicNameValuePair("password",password));
String result = "";
InputStream is = null;
//http post
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/PasswordCheck.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}catch(Exception e){
Log.e("Connection", "Error in http connection "+e.toString());
}
这是我的PHP脚本
<?php
mysql_connect("localhost", "root", "") or die("could not connect to mysql");
mysql_select_db("drop-in") or die("database not found");
$username = $_POST["username"];
$suppliedPassword = $_POST["password"];
$databasePassword = "";
$output = "false";
$query = mysql_query("SELECT Password FROM users WHERE Username = '$username'") or die("query failed");
if(mysql_num_rows($query) > 0){
$row = mysql_fetch_assoc($query);
$databasePassword = $row['password'];
if($databasePassword == $suppliedPassword)
{
$output = "true";
}
}
print($output);
mysql_close();
?>
这是服务器回复的图片
编辑:所以我发现即使PHP脚本给出了这些错误,$ username和$ password变量也包含我的android应用程序试图传递的值。但是,这些错误的存在仍然在弄乱我的代码,因为错误表的HTML会在响应中发送回android应用程序
答案 0 :(得分:1)
对我而言,您的Android代码似乎没有POST“用户名”和“密码”字段,这就解释了为什么PHP脚本无法找到它们。
在您的代码new ArrayList<NameValuePair>();
中,通过查看此代码sample可能会缺少arrayList的长度:它看起来应该是new ArrayList<NameValuePair>(2);
,您应该尝试使用并看看是否解决了这个问题。
答案 1 :(得分:0)
原来这是一个简单的拼写错误。我在循环中使用了'password'一词中的小写'p'而不是大写字母。奇怪的是,它造成了错误。
答案 2 :(得分:0)
您可以在PHP中尝试json_decode()函数:
尝试在您的服务器上创建一个文件,并将android请求的内容放入简单的文本文件中,您将获得数组输出。在那个文件中。
在.php文件中的服务器上写下代码:
<?php
$array=json_decode($data) // remove true for use as an object output.
print_r($array);
?>
如果你不想从文件中读取,你可以直接使用,如果你知道数组名称,在json对象中
const int COUNT = 10;
void (* FUNCTION[COUNT])();
const char * DESCRIPTION[COUNT];
#include "TestFont.h"
一旦你的数组为新变量赋值,并用它们做你想做的任何事情。根据您的requiremnet更新数据库或任何内容