Jak dodać warunek if

0

Dzień dobry,

Mam problem, mianowicie nie wiem jak dodać warunek aby został sprawdzany. Mam kod odnośnie meczów piłkarskich, pierwszy kod pozwala na wysłanie zaproszenia na mecz. Drugi kod odpowiada za akceptacje lub odrzucenie zaproszenia. Oba kody działają ale brakuje mi w drugim kodzie sprawdzania czy użytkownik, który nadesłał zaproszenie już rozgrywa mecz tego dnia. Reasumując, chce osiągnąć aby każdy użytkownik mógł zagrać jeden mecz dziennie.

Kod do wysyłania zaproszenia

//verify number of friendlies available
        $possibleFS = $this->_websoccer->getConfig("friendlies_per_day");
        $ownFS = FriendliesDataService::countFriendlyMatches($this->_websoccer, $this->_db, $teamId, $day, $month, $year);
        $ownTmpFS = FriendliesDataService::countTmpFriendlyMatches($this->_websoccer, $this->_db, $teamId);
        $opponentFS = FriendliesDataService::countFriendlyMatches($this->_websoccer, $this->_db, $opponentId, $day, $month, $year);
        $opponentTmpFS = FriendliesDataService::countTmpFriendlyMatches($this->_websoccer, $this->_db, $opponentId);
        $opponentType = FriendliesDataService::checkIfNationalteam($this->_websoccer, $this->_db, $opponent);
        
        $myFS = $ownFS;
        $rivalFS = $opponentFS;
    
        if($myFS >= $possibleFS) {
            throw new Exception($this->_i18n->getMessage("friendly_schedule_err_own_fs", $this->_websoccer->getConfig("friendlies_per_day")));
        }
        if($rivalFS >= $possibleFS) {
            throw new Exception($this->_i18n->getMessage("friendly_schedule_err_opponent_fs", $this->_websoccer->getConfig("friendlies_per_day")));
        } 

Kod akceptujący zaproszenia

public function executeAction($parameters) {
        
        // check if feature is enabled
        if (!$this->_websoccer->getConfig("friendlies_on_off")) {
            return;
        }
        
        $user = $this->_websoccer->getUser();
        $teamId = $user->getClubId($this->_websoccer, $this->_db);
        $myTeam = TeamsDataService::getTeamById($this->_websoccer, $this->_db, $teamId);
        $myNationalTeamId = NationalteamsDataService::getNationalTeamManagedByCurrentUser($this->_websoccer, $this->_db);
        $myNationalTeam = TeamsDataService::getTeamById($this->_websoccer, $this->_db, $myNationalTeamId);
        
        //get necessary params
        $matchId = $parameters["id"];
        $action = $parameters["action"];
        
        $matches = array();
        //check for selected match
        $count = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);
        
        if ($count) {
            
            $matches = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);
            $matchInfo = call_user_func_array('array_merge', $matches);

            //if action is accepting the match
            if($action=="accept") {
                
                //insert accepted game in _spiel table
                $this->insertIntoMatchTable($matchInfo);
                //delete match from temporary table after insertion
                $this->deleteFromFriendlyTmpTable($matchId);
                
                // success message
                if ($myTeam['team_id'] == $matchInfo['home_id'] || $myNationalTeam['team_id'] == $matchInfo['home_id']) {
                    $opponentTeam = TeamsDataService::getTeamById($this->_websoccer, $this->_db, $matchInfo['guest_id']);
                    if($myTeam['team_id'] == $matchInfo['home_id']) {
                        $team_name = $myTeam['team_name'];
                    } else {
                        $team_name = $myNationalTeam['team_name'];
                    }
                    $str = $team_name." vs. ".$opponentTeam['team_name'];
                 } else {
                    $opponentTeam = TeamsDataService::getTeamById($this->_websoccer, $this->_db, $matchInfo['home_id']);
                    if($myTeam['team_id'] == $matchInfo['guest_id']) {
                        $team_name = $myTeam['team_name'];
                    } else {
                        $team_name = $myNationalTeam['team_name'];
                    }
                    $str = $opponentTeam['team_name']." vs. ".$team_name;
                } 

Wydaje mi się, że potrzeba warunku w if($action="accept") ale nawet jak dodaje warunek to i tak go omija i akceptuje mecz.

czyli

if($action=="accept") {

if($meczprzeciwnik >= 1){ 

break;
}

}
1

break przerywa pętlę, a nie wychodzi z funkcji. Albo daj return (słabe), albo rzuć wyjątkiem.
BTW spaghetti code i niespójna składnia. Ponadto meczprzeciwnik? Raczej todaysMatchCount albo jeszcze lepiej canUserPlayMatch().

0

To był akurat tylko przykład.

Tylko dlaczego mój warunek jest jakby pomijany i dalsza część kodu się wykonuje? A właśnie chce aby po kliknięciu akcji accept sprawdziło mój warunek.

0

Patrząc na ten kod, jeśli warunek z 'action' jest pomijany, oznacza to ni mniej ni więcej że poprzedni warunek nie jest spełniony.

        $count = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);

        if ($count) {

            $matches = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);
            $matchInfo = call_user_func_array('array_merge', $matches);

            //if action is accepting the match
            if($action=="accept") {

W tym przypadku jest to $count. Prawdopodobnie $count == NULL dlatego też warunek nie jest spełniony.

Ewentualnie też jest opcja że $action wcale nie jest równe "accept".

0
wsite napisał(a):

Ale heh...mi chodzi o warunek gdy $action=accept i tutaj aby sprawdzało czy mecz może zostać zaakceptowany czy nie.

Ciężko będzie to osiągnąć nie znając struktury tabeli. Poza tym, dlaczego dwa razy pobierasz te same wyniki?

$count = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);
$matches = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);

Powinno to wyglądać tak:

        $matches = FriendliesDataService::getFriendlyMatchById($this->_websoccer, $this->_db, $matchId, $user);

        if ($matches) {
            $matchInfo = call_user_func_array('array_merge', $matches);
        // ...

Pytanie co zwraca metoda getFriendlyMatchById? Nazwa sugeruje na jeden mecz, natomiast nazwa zmiennej sugeruje że metoda ta zwraca więcej niż jeden mecz. Występuje tutaj konflikt nazewnictwa.

wsite napisał(a):

Reasumując, chce osiągnąć aby każdy użytkownik mógł zagrać jeden mecz dziennie.

Mając ID zawodnika możesz zapodać metodę która sprawdzi liczbę meczy danego dnia, zgaduje że możesz to osiągnąć tą metodą:

$count = FriendliesDataService::countFriendlyMatches($this->_websoccer, $this->_db, $user, $day, $month, $year);

Jeżeli $count > 0 oznacza to że dany dzień jest już zajęty i możesz wyświetlić komunikat o braku wolnego terminu.

        $matchId = $parameters["id"];
        $action = $parameters["action"];

        $matches = array();
        //check for selected match
        $count = FriendliesDataService::countFriendlyMatches($this->_websoccer, $this->_db, $user, $day, $month, $year);

        if ($count) {
            // komunikat o zajętości, przerywasz funkcje
        } else {
            // akceptujesz mecz
        }
0

getFriendlyMatchById zwraca dane z bazy danych odnośnie meczu, czyli id,data, hometeam, guestteam itd.

Właśnie jak dałem także warunek w if ($count) to go pominęło. I mogłem kliknąć akceptuj i utworzyło drugi mecz.

Warunek $count sprawdza czy są mecze do rozegrania i zwraca tablicę z otwartymi zaproszeniami gdzie mogę kliknąć akceptuj bądź anuluj.

Kod nie jest mój ale wykorzystuję go na swoje potrzeby i trochę mnie zaskoczył.

1 użytkowników online, w tym zalogowanych: 0, gości: 1