Java 为什么php页面在LogCat中不显示相同的内容?

Java 为什么php页面在LogCat中不显示相同的内容?,java,php,android,echo,logcat,Java,Php,Android,Echo,Logcat,我的Logcat正确地显示了我想要返回的所有消息,但是当我要求代码在另一个php页面上显示相同的内容时,它会变得非常古怪 请注意,这是一段代码,$from=r和$to= 这是我的密码: <?php session_start(); /* connect to database */ $db = mysql_connect("localhost", "root", "root"); if (!$db) die('could not connect'); mysql_selec

我的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'];

?>
以下是数据库中的条目:

这是我的日志:

I/RESPONSE4591:从touser='r'所在的消息中选择*

I/RESPONSE4591:{邮箱:[{id:117,fromuser:qw,touser:r,message:zx,时间戳:2013-04-13 01:30:59}]}

现在,我想让你们看到图瑟是r。db中的这个条目是我想要返回的,即字段touser包含值r的所有条目

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

{邮箱:[{id:132,fromuser:r,touser:,消息:,时间戳:2013-04-13 15:45:03},{id:123,fromuser:r,touser:,消息:,时间戳:2013-04-13 13 13:41:23},{id:122,fromuser:r,touser:,消息:,时间戳:2013-04-13 13:30:53},{id:133,fromuser:,touser:,消息:,消息:,时间戳:2013-04-13 15:45:21}

编辑:

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

php应该这样做吗?我认为无论什么代码在当时被执行和响应,都会被输出到页面上,并一直保持在那里,直到我重新运行代码。有没有关于如何解决这个问题的建议

编辑

所有这些的要点是使用我从中获得的JSONParser代码,从数据库中获取特定行,并将它们放入android数据库中的特定字段中。我已经尝试修改我的JSONParser代码以使用BackgroundTask,如,您可以查看

这就是该项目试图实现的目标:第一个用户可以向服务器db发布一条消息,其中包含“from”表示用户1的手机号码,“to”表示目的地或用户2的号码,以及一条表示其位置的消息。第二个用户使用轮询服务定期从数据库检索其消息,即数据库中其号码位于to字段的所有条目,并将这些条目存储到其手机上的数据库中,并自动从服务器的数据库中删除这些条目。我认为,除了从服务器的数据库中获取特定条目的部分外,其他部分基本上都正常工作


我决定使用JSONParsing,因为它可以获取一个db条目数组,并从每个条目中生成一个字符串,从而更容易存储在android的db中。但这正是它所缺少的..找到一种方法来检索数据库的特定条目..我还没有找到一种方法来这样做。有什么可以帮我指出正确的方向吗?

是的,我看到了这个问题,这很奇怪,我以前没有遇到过这个问题,但似乎您可以在SQL语句中添加一些内容来更正它

SELECT * FROM messages WHERE touser='$from' AND WHERE touser IS NOT NULL

我认为这将防止显示空行。IS NOT NULL应该是键

会话被设计为每个访问者都是唯一的,这是通过在cookie中记住会话来实现的。您的计算机将具有与Android不同的会话。事实上,计算机上的每个浏览器都有不同的会话,除非它们有共享cookie的方式

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

有很多解决方案

重新构造您的流程,这样您就不需要以这种方式保留消息——只是从删除消息的脚本返回消息?或者让第一个脚本返回消息,并向第二个脚本传递要删除的消息ID。最后一点可能更安全,因为在知道应用程序已收到任何内容之前,您不会删除任何内容

找到一种方法来记住cookies,并将其与后续请求一起发送。这可能有用

从PHP获取会话ID,并将其与所有请求一起发送。您可以使用获取和设置PHP中的会话ID


最后两个对于API来说不是很好的实践,因为我们的目标是API,但它们可能适合您。

由于test.php结果中的所有用户都是空白的,所以感觉没有$from值。。。您确定要在脚本中发布from吗?@PhillSparks-是的$from确实有一个值,这可以从logcat:I/RESPONSE4591:SELECT*from消息中看出,其中touser='r'…r'是$from。@PhillSparks-但另一方面,当我将'$from'替换为'r'时,在php代码中:$query=SELECT*FROM消息,其中touser='$FROM';然后test.php输出正确的内容。当您使用test.php和logCat时,您的做法有什么不同?你在发帖吗
我想这就是logCat的所在?在浏览器中打开test.php?如果您只是在浏览器中打开test.php,那么您没有发布,因此$\u POST将没有任何值。@PhillSparks-好的,您的所有问题都是正确的。我已经修改了我的问题,如果您愿意阅读结尾。错误消息:从touser=和touser非NULL的消息中选择*数据库错误!您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解第1行“WHERE touser IS NOT NULL”附近使用的正确语法。您不希望在和之后使用WHERE。@PhillSparks-我知道,我试过了,但仍然没有改变任何东西,因为正如你所说的,$\u POST没有任何价值。@StuartWickenden-顺便说一句,谢谢你的解释。我将进行调查,今天我将实施其中的一项,这样项目才能最终完成!