2017-03-01 84 views
-1

我有一种方法可以根据用户名从数据库中删除多个用户。用户名可以作为用户名或电子邮件提取,如果提供的话。我正在使用由作曲家构建的路线。当测试从邮差的路线,它工作得很好,但从我的网页调用路由时,我得到错误PHP - 不识别对象

{“invalid_email”:[],“invalid_username”:[“”]}
注意:试图让非对象的财产/Path/model/users.php上线

我不知道为什么,因为我从我的用户拉对象,它在之前的测试中起作用。

这是路由呼叫:

$app->delete("/multiple_users", function($request, $response, $args){ 
    $body = $request->getParsedBody(); 
    $sessionKey = $request->getQueryParams()['session_key']; 
    $sessionID = $request->getQueryParams()['session_id']; 
    $users = $body['users']; 
    global $database; 
    $statement = $database->prepare("SELECT * FROM session WHERE session_key = AND id = ?"); 
    $statement->execute(array($sessionKey, $sessionID)); 
    if($statement->rowCount()==0){ 
     return send_error($response, "invalid admin session", 403); 
    } 
    $deletion_progress = User::delete_multiple_students($users); 
    return $response->withJSON($deletion_progress); 
}); 

这是该方法示数:

public static function delete_multiple_students($users){ 
    $invalid_users = array("invalid_email" => array(), "invalid_username" => array()); 
    $usernames = explode(",", $users); 

    foreach($usernames as $username){ 
     if (strpos($username, '@') !== false) { 
      if(!preg_match("/@email.address$/", $username)){ 
       array_push($invalid_users["invalid_email"], $username); 
      }else{ 
       $name = preg_replace("/@.+/", "", $username); 
       $user_id = self::get_by_username($name)->user_id; // error is right here when first in the list is a email 
       if (!$user_id){ 
        array_push($invalid_users["invalid_email"], $username); 
       } 
       self::delete_student($user_id); 
      } 
     }else{ 
      $user_id = self::get_by_username($username)->user_id; // error is right here when first in the list is a username 
      if (!$user_id){ 
       array_push($invalid_users["invalid_username"], $username); 
      } 
      self::delete_student($user_id); 
     } 
    } 
    return $invalid_users; 
} 

这是参考所述get_by_username():

public static function get_by_username($username){ 
    global $database; 
    $statement = $database->prepare("SELECT * FROM users WHERE username = ?"); 
    $statement->execute(array($username)); 
    $row = $statement->fetch(PDO::FETCH_ASSOC); 
    $statement->closeCursor(); 
    if($row){ 
     $user = new User($row); 
     return $user; 
    } else { 
     return null; 
    } 
} 
+0

哪条线与错误有关? – nogad

+0

您是否可以复制并粘贴原始错误信息 – eeetee

+0

@nogad我评论了错误与哪条线相关 –

回答

0

进一步经过广泛的测试,但事实证明,尽管后端php代码中出现错误,但真正的问题是AngularJS不是通过快捷方式发送删除请求体。 对于花费尽可能多时间研究php以查找此代码中的错误的任何人抱歉。