【问题标题】:PHP ForEach loop doesn't iterate / countPHP ForEach 循环不迭代/计数
【发布时间】:2014-04-26 16:17:57
【问题描述】:

我正在尝试使用 Web 服务以 JSON 格式将值返回给 Android 应用程序。出于某种原因,我的代码只返回“无效登录,请重试”。我很肯定正在输入用户名,并且我很肯定任务正在正确返回。使用我作为注释行包含的测试代码,我验证该服务将向应用程序返回一组数据。看来问题出在我的 foreach 循环上,但我不知道如何。这是很简单的东西。显然它没有迭代,或者我的计数会增加并且我不会收到 Invalid Login 错误。我唯一能想到的是我需要使用一个嵌套 foreach 循环,但我也没有取得太大的成功。

提前感谢各位的帮助!

这是 foreach 循环...

//for reach task returned, add to array for later output
            foreach ($row2['Description'] as $t)
            {
            $taskDisplay = array('task' => $t);
            $taskCount++;
            }

还有伯爵……

if ($taskCount > 0)    
{
echo json_encode($taskDisplay);
}
else
{
echo "Invalid login, please try again";
}

这是完整的代码

$taskDisplay = array();
$taskCount = 0;

//do this portion if app gives key value "PART_ONE"
if ($result['part'] == "PART_ONE")

{   
    //if username was entered, check user credentials
    if(array_key_exists('user', $result)) {

        $usercheck = $con->prepare("Select * from Employee
                        Where usr = ?
                        and pass = ?");
        $usercheck -> execute(array($result['user'], $result['password']));
        $row = $usercheck -> fetch();

        //if username was verified, select tasks from database
        if($row['usr'])
        {

            $task = $con->prepare("Select * from Tasks
                        where Assigned_Employee = ?");
            $task -> execute(array($result['user']));
            $row2 = $task -> fetch();
            $statusCode = "Success";
            //$taskDisplay = $row2['Description'];

            //for reach task returned, add to array for later output
            foreach ($row2['Description'] as $t)
            {
            $taskDisplay = array('task' => $t);
            $taskCount++;
            }   

        }


    else
    {
    $statusCode = "Fail";
    //bail if invalid username entered
    exit;
    }


    //$arr = array('task' => $taskDisplay, 'status_code' => $statusCode);
    //echo json_encode($arr);

    if ($taskCount > 0) 
    {
    echo json_encode($taskDisplay);
    }
    else
    {
    echo "Invalid login, please try again";
    }

}
}

【问题讨论】:

  • 我认为可能是您在 foreach 中的问题,并且 $row2['Description'] 没有值,这就是计数不增加的原因。
  • $row2['Description'] 可能不是数组。
  • 感谢您的建议,但我已经仔细检查了 SQL 是否返回了正确的值。在注释掉的代码中,我可以将单个值返回给我的 android 应用程序。

标签: php android json web-services foreach


【解决方案1】:

在您需要fetchAll() 的所有行中发送至foreach。然后你想访问每一行中的Description 列:

$row2 = $task->fetchAll();

// etc...

foreach ($row2 as $t)
{
    $taskDisplay[] = array('task' => $t['Description']);
    $taskCount++;
}  

【讨论】:

  • 这行得通,尽管它仍然只返回一个结果。它应该从数据库中返回两组数据。
  • 已编辑。需要$taskDisplay[]
  • 是的,完美!这将返回数组。实际上,我仍然无法将列表填充到我的 android 应用程序中,但这对于另一篇文章来说是个问题。感谢您的帮助!
猜你喜欢
  • 2011-09-07
  • 2013-03-23
  • 2012-11-10
  • 2021-01-26
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
相关资源
最近更新 更多