有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

它在两种输出上都能完美工作。这让我更加困惑。我希望有人能帮忙

提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    我在你的代码中看不到在哪里进行比较,但我可以告诉你关于java:

    在java中比较两个字符串时,不要使用==,而是使用string类。equals方法,或compareTo之类的。原因是,在java中,两个字符串只有在引用同一个对象时才是==的。当你创建字符串时,Java通常会自己做这件事,如果你创建一个名为“name”的字符串,然后在程序中的其他地方创建另一个名为“name”的字符串,它会环顾四周,说“嘿,他已经创建了一个名为name的字符串,让我们用一个指针指向它”这可能会让人困惑,因为它使==经常是真的,但这是不可靠的

    所以我的猜测是,因为其中一个字符串是从程序外部接收的,所以它们不是指同一个字符串对象,因此不是==

    如果我误解了这个问题,我道歉:)

  2. # 2 楼答案

    这是因为你正在使用:

    ps.println(params);
    

    所以它在参数之后发送一个新行字符,即:player=pathurs\n

    试试看:

    ps.print(params);