使用angularjs中的where子句从数据库中获取数据


fetch data from database using angularjs using where clause

我想使用angularjs从mysql数据库加载数据。

应用程序是这样工作的;用户登录后,他们的用户名存储在cookie中。该用户名显示在首页

我想获得这个值,并通过angularjs传递到php脚本,从表中获取数据基于用户名与where子句

这是我的php脚本
<?php
include_once 'connect.php';
$data = json_decode(file_get_contents("php://input"));

$statement = $conn->prepare('SELECT MessageId, Subject, MessageContent, CONCAT(Date, " , ", Time) AS Date, FromUser, ToUser, MessageType, File, FileName FROM messages where MessageType = "Broadcast" or ToUser=:UserName order by MessageId desc');
$statement->execute(array(
                          'UserName' => $data->UserCookie                          
                          ));
while($row = $statement->fetch()) {
    $data[] = $row;
}
print json_encode($data);
?>

这是我的angular脚本

var app = angular.module('Library', ["ngCookies"]);
app.controller('LibraryController', function($scope, $http, $interval, $cookies) {
        //get cookie user name
        $scope.UserCookie = $cookies.get('cookieUserName');
//set cookie user name
$scope.setCookie = function(val){
    $cookies.put('cookieUserName', val);
}

//display messages    
$scope.loadMessages = function() {
    $http.post('selectMessages.php',{'UserName': $scope.UserCookie})
    .success(function(data) {
        $scope.Messages = data;
    })       
}
//display messages at an interval of 1 seconds
$interval($scope.loadMessages, 1000);
});

这是我的主页

<!DOCTYPE html ng-app="Library" ng-controller="LibraryController">
<html>
<head>
  <title></title>
</head>
<body ng-init="loadMessages()">
      <div class="form-group">
      <label for="Subject">User</label>
        <input type="text" ng-model="UserCookie" name="UserCookie" class="form-control" id="UserCookie" required="required"></input>
      </div>

      <input type="search" class="form-control" ng-model="searchMessage" placeholder="Search"> <br />
      <table class="table table-hover">
        <thead>
          <tr>
            <th>Message (Sender)</th>
          </tr>
        </thead>
        <tbody>
          <tr ng-click="selectMessage(message.MessageId, message.MessageContent, message.Date, message.Time, message.File)" onclick="showCommentDialog()" style="font-size: 16px" ng-repeat="message in Messages | filter:searchMessage | limitTo:20">
           <td>{{ message.Subject }} (<span style="color:green"> {{ message.FromUser }})</span></td>
           <td>
            <button class="btn btn-success" ng-click="selectMessage(message.MessageId, message.MessageContent, message.Date, message.Time, message.File)" onclick="showCommentDialog()" > view </button>
          </td>
        </tr>
      </tbody>
    </table>
</body>
</html>

这是浏览器控制台的getError错误请问我做错了什么?的帮助!

查看此链接获取帮助。在ng-repeat中有重复的键。

根据您更新的答案和您收到的错误,您的代码中有一些隐藏的错误/问题。您正在获得输入,从json解码它并将其保存在$data变量中(json_decode返回对象,只要您不将true传递为第二个参数)。在while循环中,您试图向$data添加新元素,因为它是array,但它不是。

它应该是这样的:

<?php
include_once 'connect.php';
$data = json_decode(file_get_contents("php://input"));
$outputData = [];
if($data && isset($data->UserCookie)) {
    $statement = $conn->prepare('SELECT MessageId, Subject, MessageContent, CONCAT(Date, " , ", Time) AS Date, FromUser, ToUser, MessageType, File, FileName FROM messages where MessageType = "Broadcast" or ToUser=:UserName order by MessageId desc');
    $statement->execute(array(
                              'UserName' => $data->UserCookie
                              ));
    while($row = $statement->fetch()) {
        $outputData[] = $row;
    }
}
print json_encode($outputData);
?>