2017-03-01 101 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以查找此代碼中的錯誤的任何人抱歉。