0

This is the code for my private server realmeye http://www.thenoxusproject.org/realmeye/index.php And I keep receiving this error, and I do not know how to fix it, please help?

Fatal error: Call to a member function query() on a non-object in /home/noxus/public_html/realmeye/index.php on line 112

===============================================================

index.php code is below

<?php 

require_once('template/config.php');
// database info
define('HOST','MY VPS IP');
define('DB','rotmg');
define('USER','root');
define('PASS','DB PASSWORD');
function connect_db()
{
    $pdo = new PDO('mysql:host='.HOST.';dbname='.DB,USER,PASS);
    return $db;
}
?>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, target-densityDpi=device-dpi">
    <title>Player List</title>
    <link rel="shortcut icon" href="img/favicon.ico">
    <meta name="msapplication-config" content="none">
    <link rel="canonical" href="/top-players-by-fame">
    <meta name="keywords" content="realm of the mad god, rotmg, statistics, stats,top players,by fame">
    <meta name="description" content="Top Players in Realm of the Mad God by fame 1-101.">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="css/bootstrap-theme.min.css" rel="stylesheet">
    <link href="css/typeahead.js-bootstrap.css" rel="stylesheet">
    <link href="css/tablesorter.css" rel="stylesheet">
    <link href="css/realmeye.css" rel="stylesheet">
    <style id="swaggy">
        #plscenterme {
            text-align: center;
        }
    </style>
</head> 
<body>
<?php require_once('template/navbar.php'); ?>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            <div id="plscenterme">
                <h1><?= SERVER_NAME . ' - Player list' ?></h1>
                <p>Noxus Player List</p>
            </div>
        </div>
        <nav class="text-center">
            <ul class="pagination">
                <li <?= $type == 'all' ? "class='active'" : '' ?>><a href="index.php?type=all">All</a></li>

            </ul>
        </nav>
        <div class="table-responsive">
            <style type="text/css">
                #c th:nth-child(1), #c td:nth-child(1), #c th:nth-child(4), #c td:nth-child(4), #c th:nth-child(5), #c td:nth-child(5), #c th:nth-child(6), #c td:nth-child(6), #c th:nth-child(7), #c td:nth-child(7), #c th:nth-child(8), #c td:nth-child(8), #c th:nth-child(9), #c td:nth-child(9) {
                    text-align: right
                }
            </style>
            <table id="c" class="table table-striped tablesorter">
                <thead>
                <tr>
                    <th class="header"></th>
                    <th class="header">Name</th>
                    <th class="header">Guild</th>
                    <th class="header">Fame</th>
                    <th class="header">Exp</th>
                    <th class="header">
                        <abbr title="Rank">R</abbr>
                    </th>
                    <th class="header">
                        <abbr title="Chars">C</abbr>
                    </th>
                    <th class="header">
                        <abbr title="Avg. Fame / Char">AF/C</abbr>
                    </th>
                    <th class="header">
                        <abbr title="Avg. Exp / Char">AE/C</abbr>
                    </th>
                    <th class="header">Last seen</th>
                    <th class="header">
                        <abbr title="Server">Srv.</abbr>
                    </th>
                </tr>
                </thead>
                <tbody>
                <?php
        $count = 1;
                $accounts = $type == 'all' ? get_accounts() : get_accounts();
                while ($row = $accounts->fetch_assoc())
                { ?>
                    <tr>
                        <!-- Number -->
                        <td><?=$count . '.' ?></td>
                        <td>
                            <div class="star-container">
                                <!-- Name -->
                                <a href="player.php?player=<?=$row['name'] ?>"><?=$row['name'] ?></a>
                                <!-- Rank/Stars -->
                                <div class="star star-white"></div>
                            </div>
                        </td>
                        <!-- Guild -->
                        <td><?php
                            $currentGuildID = $row1['guild'];
                            $guildName = "";
                            $table = "SELECT * FROM 'guilds' WHERE 'id'=$currentGuildID";
                            $query = $pdo->query($table) or die ('An error occurred.');
                            while ($row1 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $guildName = $row1['name'];
                            }
                            if ($currentGuildID == 0)
                                echo "None";
                            echo $guildName;
                            ?></td>
                        <!-- Fame/FameHistory-->
                        <td><?php
                            $currentFame = "";
                            $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "SELECT * FROM `characters` WHERE `accId`=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row2 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $currentFame = $currentFame + $row2['fame'];
                            }

                            if ($currentFame == 0 or $currentFame == null) {
                                echo "0";
                            }else {
                                echo $currentFame;}
                            ?></td>
                        <!-- EXP -->
                        <td><?php
                            $currentEXP = "";
                            $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "SELECT * FROM `characters` WHERE `accId`=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row3 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $currentEXP = $currentEXP + $row3['exp'];
                            }
                            if ($currentEXP == 0 or $currentEXP == null) {
                                echo "0";
                            }else {
                            echo $currentEXP;}
                            ?></td>
                        <!-- Rank -->
                        <td><?php
                            $currentRank = "";
                            $accId = get_id_from_name($row['name']) -> fetch_assoc()['id'];
                            $table = "SELECT `rank` FROM `accounts` WHERE `id`=$accId";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row4 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $currentRank += $row4['rank'];
                            }
                            echo $currentRank;
                            ?></td>
                        <!-- Characters -->
                        <td><?php
                            $charamount = 0;
                            $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "select * from characters where accId=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row5 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $charamount++;
                            }
                            echo $charamount;
                            ?></td>
                        <!-- Average Fame/Char -->
                        <td><?php
                            $allFameAddedUp = 0;
                            $charCount = 0;
                $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "select * from characters where accId=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row6 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $allFameAddedUp += $row6['fame'];
                                $charCount++;
                            }
                            if ($allFameAddedUp == 0) {
                                echo "0";
                            }else {
                            echo $allFameAddedUp / $charCount;
                            }
                            ?></td>
                        <!-- Average EXP/Char -->
                        <td><?php
                            $allEXPAddedUp = 0;
                            $charCount1 = 0;
                $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "select * from characters where accId=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row7 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $allEXPAddedUp += $row7['exp'];
                                $charCount1++;
                            }
                            if ($allEXPAddedUp == 0) {
                                echo "0";
                            }else {
                                echo $allEXPAddedUp / $charCount1;
                            }
                            ?></td>
                        <!-- Last seen-->
                        <td>
                            <abbr title="<?= SERVER_NAME ?>">
                                FSOD
                            </abbr>
                        </td>
                    </tr>
                    <?php $count++; } ?>
                </tbody>
            </table>
        </div>
    </div>
</div>
<script src="js/jquery-1.11.2.min.js"></script>
<script src="js/typeahead.bundle.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.timeago.js"></script>
<script src="js/jquery.timeago.en-short.js"></script>
<script src="js/definition.js"></script>
<script src="js/jquery.tablesorter.js"></script>
<script src="js/realmeye.js"></script>
<script type="text/javascript">
    $(function () {
            initializeSearch("a");
        }
    );
    initializeClickHandlerWithAction("b", {
            "type": "POST",
            "url": "\/logout",
            "data": {}
        }
    );
    makeSortable("c", {
            0: {
                "sorter": "digit"
            }
            ,
            1: {
                "sorter": "text"
            }
            ,
            2: {
                "sorter": "text"
            }
            ,
            3: {
                "sorter": "digit"
            }
            ,
            4: {
                "sorter": "digit"
            }
            ,
            5: {
                "sorter": "digit"
            }
            ,
            6: {
                "sorter": "digit"
            }
            ,
            7: {
                "sorter": "digit"
            }
            ,
            8: {
                "sorter": "digit"
            }
            ,
            9: {
                "sorter": "text"
            }
            ,
            10: {
                "sorter": "text"
            }
        }
    );
    renderNumeric("c", 1);
    renderNumeric("c", 4);
    renderNumeric("c", 5);
    renderNumeric("c", 6);
    renderNumeric("c", 7);
    renderNumeric("c", 8);
    renderNumeric("c", 9);
</script>
<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(["_setAccount", "UA-36039145-1"]);
    _gaq.push(["_setSiteSpeedSampleRate", 10]);
    _gaq.push(["_setSampleRate", "80"]);
    _gaq.push(["_gat._anonymizeIp"]);
    _gaq.push(["_setCustomVar", 1, "ssl", /^https/.test(window.location.href) ? "yes" : "no"]);
    _gaq.push(["_trackPageview"]);

    (function () {
        var ga = document.createElement("script");
        ga.type = "text/javascript";
        ga.async = true;
        ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>
</body>
</html>
Rasclatt
  • 12,498
  • 3
  • 25
  • 33
  • Possible duplicate of [mysql\_fetch\_array() expects parameter 1 to be resource (or mysqli\_result), boolean given](http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects-parameter-1-to-be-resource-or-mysqli-result-boole). There are numerous possible duplicates to this question. – Jay Blanchard Oct 16 '15 at 15:12
  • There is no object reference on line 112. There would be a bigger chance to give an answer if you would highlight the line in quest. However, looks like your database connection does not succeed. – syck Oct 16 '15 at 15:14
  • You never call `connect_db()`. – Barmar Oct 16 '15 at 15:14
  • @Barmar so I would put "connect_db()" below function connect_db()? – Organized Chaos Oct 16 '15 at 15:15

3 Answers3

7

If you notice, 1) you have no connect_db() in your script and 2) your function is creating $pdo yet returning $db so even if you use connect_db() it would return nothing:

function connect_db()
{
    $pdo = new PDO('mysql:host='.HOST.';dbname='.DB,USER,PASS);
    // You need to return $pdo not $db
    return $pdo;
}

EDIT: Because you may or may not be using the connection throughout your page, you may want to create your function at the top and feed it into any functions you are using, specifically this part: $accounts = $type == 'all' ? get_accounts() : get_accounts();

This ternary doesn't make any sense, by the way, you are assigning the function on true or false either way:

// You are saying if 'all', use 'get_accounts()' but if not 'all' use it 'get_accounts()' as well...
$accounts = $type == 'all' ? get_accounts() : get_accounts();

To fix, just do:

$con = connect_db();
$accounts = get_accounts($con);

I noticed you are using $pdo down the page so, you may want to change to $pdo instead:

$pdo = connect_db();
$accounts = get_accounts($pdo);
Rasclatt
  • 12,498
  • 3
  • 25
  • 33
2

You need to do :

$pdo = connect_db()

before you can use the $pdo variable.

You also need to fix connect_db() so it returns the same variable that it assigned.

Barmar
  • 741,623
  • 53
  • 500
  • 612
  • So the code for this would be? Sorry I've spent a lot of work on this and I'm just over worked and confused atm. – Organized Chaos Oct 16 '15 at 15:19
  • `$accounts = $type == 'all' ? get_accounts() : get_accounts(); while ($row = $accounts->fetch_assoc())` but getaccounts() (which should return a result handle) is not included in the code. – syck Oct 16 '15 at 15:21
  • @OrganizedChaos Change `return $pdo` to `return $db` – Barmar Oct 16 '15 at 17:50
1

connect_db() is never called, so your $pdo variable is left uninitiallized. When you first call $pdo->query(), PHP complains $pdo is not an object.

Aaron
  • 24,009
  • 2
  • 33
  • 57