PHP POST变量在Java发送时不等效
我已经花了将近16个小时来研究这个代码,结果对我来说仍然毫无意义
我正在做的是制作一个Java程序,将POST参数发送到URL。我还在用Firefox的表单测试同样的方法
问题是,在Firefox上,我测试发送的值并将其回显。我还根据一个我知道应该相等的值来测试这个值,但是当Java发送这个值时,它返回false,但是Firefox返回true,这是为什么
PHP代码:
$player = array('code' => "code");
$msg = "neither";
if(isset($_POST['player']))
{
$player = getPlayer(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME, DB_TABLE_NAME, $_POST['player']);
$msg = "?player=" . $_POST['player'] . " post";
}
function getPlayer($DbHost, $DbUsername, $DbPassword, $DbName, $DbTableName, $name)
{
try
{
$dsn = "mysql:host=$DbHost;dbname=$DbName"; //Data Source Name = MySQL
$dbc = new PDO($dsn, $DbUsername, $DbPassword); //Connect to DB
$query = "SELECT * FROM $DbTableName WHERE name = :name";
$result = $dbc->prepare($query); //Prepare query
if($name == "pathurs")
{
echo 'true:' . $name;
}
else
{
echo 'false:' . $name;
}
$result->bindParam(':name', $name, PDO::PARAM_STR);
$result->execute(); //Execute Query
while($row = $result->fetchObject()) //Loop through results
{
$array = array();
//Convert stdClass($row) to array($array)
foreach($row as $key => $value)
{
$array[$key] = $value;
}
$dbc = null;
return $array;
}
}
catch(PDOException $e)
{
echo $e->getMessage();
}
}
echo "code:" . $player['code'] . $msg . $_POST['player'];
Java代码:
public String getContent(String url, String params)
{
String result = "";
try
{
this.url = new URL(url);
try
{
URLConnection con = this.url.openConnection();
con.setDoOutput(true);
PrintStream ps = new PrintStream(con.getOutputStream());
ps.println(params);
InputStream is = con.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(is));
String line = "";
while((line = in.readLine()) != null)
{
result += line;
}
System.out.println(result);
}
catch(IOException e)
{
e.printStackTrace();
}
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
return result;
}
Firefox输出:
true:pathurscode:code?player=pathurs postpathurs
Java程序输出:
false:pathurscode:?player=pathurs postpathurs
为什么当我比较$name == "pathurs"
(在第20行的PHP代码中)它在Firefox中为真,而在Java中为假?看到它们都在PHP页面中进行了测试,都是字符串,并且都在回音中输出它们都等于'pathurs'
的一种形式,我觉得这毫无意义
我做错什么了吗?我目前还不明白为什么它只会在Java发送信息时发生,而不是在Firefox发送信息时发生。我的测试是将PDO查询替换为:
$query = "SELECT * FROM $DbTableName WHERE name = 'pathurs'";
它在两种输出上都能完美工作。这让我更加困惑。我希望有人能帮忙
提前谢谢
# 1 楼答案
我在你的代码中看不到在哪里进行比较,但我可以告诉你关于java:
在java中比较两个字符串时,不要使用==,而是使用string类。equals方法,或compareTo之类的。原因是,在java中,两个字符串只有在引用同一个对象时才是==的。当你创建字符串时,Java通常会自己做这件事,如果你创建一个名为“name”的字符串,然后在程序中的其他地方创建另一个名为“name”的字符串,它会环顾四周,说“嘿,他已经创建了一个名为name的字符串,让我们用一个指针指向它”这可能会让人困惑,因为它使==经常是真的,但这是不可靠的
所以我的猜测是,因为其中一个字符串是从程序外部接收的,所以它们不是指同一个字符串对象,因此不是==
如果我误解了这个问题,我道歉:)
# 2 楼答案
这是因为你正在使用:
所以它在参数之后发送一个新行字符,即:
player=pathurs\n
试试看: