1

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

?>

以下是数据库中的条目:

D b

这是我的 logCat:

I/RESPONSE(4591): SELECT * FROM messages WHERE touser='r'

I/RESPONSE(4591): { "邮箱":[{"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)的 touser 条目。我对这种行为的解释是,当代码运行时,$from 变量实际上是“r”(这就是它正确保存在 logcat 中的原因),但是在代码执行之后,$from 中目前没有任何值,所以它只是输出 $from = null 的结果。

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

已编辑

这一切的重点是使用我从这里得到的 JSONParser 代码,从数据库中获取特定的行,并将它们放入 android 的数据库中的特定字段中。我已经尝试修改我的 JSONParser 代码以像这样使用 BackgroundTask ,你可以看看这个

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

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

4

2 回答 2

3

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

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

有很多解决方案...

  1. 重组您的流程,以便您不需要以这种方式保留消息 - 只是从删除它们的脚本中返回消息?或者让第一个脚本返回消息并将消息 ID 传递给第二个脚本以删除。最后一点也可能“更安全”,因为在您知道应用程序已收到任何内容之前,您不会删除任何内容。

  2. 找到一种方法来记住 cookie 并将它们与后续请求一起发送。 如何在 Android 上使用 cookie 发出 http 请求?可能对此有用。

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

最后两个对于 API 来说不是很好的实践,因为我们的目标是 API 是无状态的,但它们可能对你有用。

于 2013-04-14T15:15:48.050 回答
0

是的,我看到了这个问题,很奇怪我以前没有遇到过这个问题,但看起来你可以在你的 SQL 语句中添加一些东西来纠正它......

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

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

于 2013-04-13T20:41:04.473 回答