2

Got the following function and the getteampoints value wasn't declared anywhere before. Tried to follow other redececlare error problems but none of the worked. How can i fix this?

function getTeamPoints($team)
    {
        $query = mysql_query("SELECT * FROM Team_comp WHERE t_id='$team'");
        $team_array = array();

        while($a = mysql_fetch_array($query))
        {
            $team_array = array(            'home_won'  =>  $a['home_win'],
                                            'home_draw' =>  $a['home_tie'],
                                            'home_lost' =>  $a['home_lost'],
                                            'away_won'  =>  $a['away_win'],
                                            'away_draw' =>  $a['away_tie'],
                                            'away_lost' =>  $a['away_lost'],
                                            'home_games'=>  $a['home_games'],
                                            'away_games'=>  $a['away_games']);
        }

        return $team_array;
    }

    function calculateTeamPoints($team, $type)
    {
        $teamPts = getTeamPoints($team);

        if($type == 'home')
        {
            $homem = $teamPts['home_games'];
            $homew = $teamPts['home_won'];
            $percent = ($homew * 100) / $homem;

            $remaining = $homem - $homew;

            $per = ($remaining * 100) / $homem;
            $percent += $per / 2;
        }
        elseif($type == 'away')
        {
            $homem = $teamPts['away_games'];
            $homew = $teamPts['away_won'];
            $percent = ($homew * 100) / $homem;

            $remaining = $homem - $homew ;

            $per = ($remaining * 100) / $homem;
            $percent += $per / 2;
        }

        return $percent;
    }

    function getpercent($hometeamid, $awayteamid)
    {
        $hometeampts = calculateTeamPoints($hometeamid, 'home');
        $awayteampts = calculateTeamPoints($awayteamid, 'away');


        $homepercent = floor(($hometeampts - $awayteampts) + 50);
        $awaypercent = 100-$homepercent;


    }

    //demo
    getpercent($hometeamid, $awayteamid);
    ?>
Svetoslav
  • 4,686
  • 2
  • 28
  • 43

2 Answers2

3

Putt the how function getTeamPoints inside IF condition..

if(!function_exists('getTeamPoints')){ 
    function getTeamPoints()....

}

Its not possible too declare 1 function more than once!

You have to write different name if you declare it more than 1 time, if you just include that file more than 1time (which is wrong..) this IF function exists check will work fine.

Svetoslav
  • 4,686
  • 2
  • 28
  • 43
  • @GamblerHeaven - Please up vote if above trick resolve your issue. – Sanjay Khatri Apr 10 '13 at 10:50
  • You ***should*** prevent conditional function declaration as suggested here. It comes with a high price. Instead use the `function_exists` function in troubleshooting/debugging to find out what causes your problem originally. See http://stackoverflow.com/a/15923978/2261774 – M8R-1jmw5r Apr 10 '13 at 11:03
  • @M8R-1jmw5r I know that he have problem somewhere in his script but we cant guess where is it .. + there are more functions in this file and if its required many times they should throw errors too.. – Svetoslav Apr 10 '13 at 11:21
  • One way to find out is to [produce a backtrace when the error occurs](http://stackoverflow.com/q/1159216/2261774). The function redeclare error in 99.9% of the time is a sign of a different problem. Your answer effectively prevents getting the fatal error but it is not dealing with its original cause. Instead it makes the code conditional which increases complexity and makes the application more prone to errors. So as you already have the smell in your nose that there is an underlying problem, follow your nose. That will improve your coding. – M8R-1jmw5r Apr 10 '13 at 11:28
0

Seeing a function redeclare error is a sign that you have included - directly or indirectly - the same file a second time.

Apart from the error message itself, this signals a problem in your application workflow.

The most straight forward solution is to find out when and why the function was loaded a second time and then fixing the workflow.

You can find out more with things like:

if(!function_exists('getTeamPoints')) {
    throw new Exception('Function getTeamPoints() already declared.');
}

include('getteampoints.php');

Throwing an exception will not only allow you to catch it later (not possible with a fatal error), but it will also show a backtrace so that you can find out more easily where (and why) the file is executed a second time.

You can also temporarily negate the condition and throw the exception the first time the function is loaded if you're unsure about that end.

M8R-1jmw5r
  • 4,896
  • 2
  • 18
  • 26