我的Logcat向我显示了(正确地)我要返回的所有消息,但是当我要求代码在另一个php页面上显示相同的内容时,它就会彻底崩溃。

请注意,这段代码是$ from =“ r”和$ to =“”。

这是我的代码:

<?php

session_start();

/* connect to database */
$db = mysql_connect("localhost", "root", "root");

if (!$db)
    die('could not connect');

mysql_select_db('androidp2p')
    or die("could not select database");

/* variables */
$from = mysql_real_escape_string($_POST['from']);
$to = mysql_real_escape_string($_POST['to']);
$message = mysql_real_escape_string($_POST['message']);

/* conditional code */
if (isset ($POST['to']))
{
    /* user wants to send a message */
    $query = "INSERT INTO messages (fromuser, touser, message) VALUES ('$from', '$to', '$message')";

    mysql_query($query)
        or die("\n\ndatabase error!\n". mysql_error());

    echo "ok. Messages have been saved.";
}
else //if (!isset ($POST['to']))
{
    /* user wants to retrieve his messages */
    $query = "SELECT * FROM messages WHERE touser='$from'";

    /* echo test 1 */
    echo $query;

    $result = mysql_query($query)
        or die("\n\ndatabase error!\n". mysql_error());

    $mailbox = array();

    while($row = mysql_fetch_assoc($result))
    {
    $mailbox[] = $row;
    }

    /* echo test 2 */
    echo "{ \"mailbox\":".json_encode($mailbox)." }";

    $name = "{ \"mailbox\":".json_encode($mailbox)." }";

    $_SESSION['myValue']=$name;
}

?>


在第2页(test.php):

<?php

session_start();

echo $_SESSION['myValue'];

?>


这是数据库中的条目:



这是我的logCat:

I / RESPONSE(4591):SELECT * FROM消息,其中touser ='r'

I / RESPONSE(4591):{“ mailbox”:[{“ id”:“ 117”,“ fromuser”:“ qw”,“ touser”:“ r”,“ message”:“ zx”,“ timestamp”: “ 2013-04-13 01:30:59”}]}

现在在上面,我希望您看到touser是r。我想返回该条目(在数据库中),即字段“ touser”包含值“ r”的所有条目。

现在,这是我的test.php页面:

{“邮箱”:[{“ id”:“ 132”,“ fromuser”:“ r”,“ touser”:“”,“ message”:“”,“ timestamp”:“ 2013-04-13 15:45 :03“},{” id“:” 123“,” fromuser“:” r“,” touser“:”“,” message“:”“,” timestamp“:” 2013-04-13 13:41: 23“},{” id“:” 122“,” fromuser“:” r“,” touser“:”“,” message“:”“,” timestamp“:” 2013-04-13 13:30:53 “},{” id“:” 133“,” fromuser“:”“,” touser“:”“,” message“:”“,” timestamp“:” 2013-04-13 15:45:21“} ]}

编辑:

如您所见,它返回了所有空白(或null)的用户条目。我对此行为的解释是,在代码运行时,$ from变量实际上为'r'(这就是为什么将它正确保存在logcat中的原因),但是在代码执行之后,$ from中目前没有值,因此它只是输出$ from = null的结果。

php应该这样做吗?我以为当时执行和回显的任何代码都会在页面上输出并停留在该页面上,直到我重新运行代码为止。对于如何解决这个问题,有任何的建议吗?

已编辑

所有这些的关键是使用从here获得的JSONParser代码,从数据库中获取特定的行,并将其放入android的数据库中的特定字段中。我已经尝试过修改JSONParser代码以使用this之类的BackgroundTask,您可以看看this

这是项目要实现的目标:第一个用户可以向服务器数据库发布一条消息,其中包含“ from”(将是user1的单元格编号),“ to”(将是目的地或user2的编号)以及一个消息(这是他的位置)。第二个用户使用轮询服务来定期从数据库中检索他的消息,即他的号码在“收件人”字段中的数据库中的所有条目,并将这些条目存储到手机上的数据库中(并自动从中删除这些条目。服务器的数据库)。我认为,除了我从服务器的数据库中获得特定条目的那一部分以外,其他所有东西基本上都在工作。

我决定使用JSONParsing,因为它可以接收db条目的数组,并从每个条目中创建一个字符串,从而更易于存储在我的android db中。但这是它缺乏的地方。找到一种方法来检索数据库的特定条目。我还没有找到执行此操作的方法。有什么帮助我指出正确的方向吗?

最佳答案

会话被设计为对于每个访问者来说都是唯一的,这是通过在cookie中记住会话来完成的。您的计算机将具有与Android不同的会话。实际上,除非您使用共享Cookie的方法,否则您计算机上的每个浏览器都会有不同的会话。

此外,脚本化请求(如Android代码)不会自动记住cookie并在请求之间发送,因此它们可能会为每个请求启动一个新会话,并丢失上一个会话的信息。

有很多解决方案...


重组您的流程,以使您不需要以这种方式保留消息-只是从删除消息的脚本返回消息即可?或者让第一个脚本返回消息,并向第二个脚本传递要删除的消息ID。最后一点也可能是“安全的”,因为在您知道应用程序已收到它之前,不要删除任何内容。
找到一种方法来记住cookie并将其与后续请求一起发送。 How do I make an http request using cookies on Android?可能对此有用。
从PHP获取会话ID,并将其与所有请求一起发送。您可以使用session_id()在PHP中获取并设置会话ID。


对于API,最后两个并不是很好的做法,因为我们的目标是将API设为stateless,但它们可能对您有用。

关于java - 为什么php页面在LogCat中没有显示相同的内容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15992497/

10-10 03:12