简体   繁体   中英

Undefined index:session LOOP NOT WORKING php, pdo oop

I make users online page using PHP - OOP - PDO

include_once '../database.php'; $db = new database();

$getRows = $db->getRows('select * from visitors_online');
$gr = $db->rowCount();
$online = '';


$getRow = $db->getRow('select * from user_online');
$gr2 = $db->rowCount();

if(!empty($gr2)) {
        try {
            while ($getR = $getRow){
            $getRow = $db->getRow('select * from users where id = ?',[$getR['session']]);
            echo  ', &nbsp <a href="dashboard.php?user='.$getRow['username'].'">'.$getRow['username'].'</a> &nbsp  ';
            }
        } catch (PDOException $e) {
            die('Error :'.  $e->getMessage());
        }
    $total = $gr + $gr2;

The problems is: * Not show any users except Admin, also I got this :

ONLINE 

admin
Notice: Undefined index: session in /Applications/MAMP/htdocs/baws/admin/online.php on line 56 ,
.Users = 0 ,Member = 2 , Register = 2

Who is online list

Here is the function from Database class

// Get row by id, username, or email etc..
    public function getRow($query, $para = []){
        try {
            $this->stmt = $this->datab->prepare($query);
            $this->stmt->execute($para);
            return $this->stmt->fetch();
        } catch (PDOException $e) {
            throw new Exception($e->getMessage());
        }
    }

Any Help

Thanks

I tried to simplify a bit your code as I do not know your class details and it s messy.

The problem is you are not binding stuff properly neither fetching them properly too. Also, you are preparing the second query, each time you loop inside the query 1 results , that is useless. prepare both (withyour class or not) and just bind and execute.

$stmt1 = $db->prepare('select * from user_online where id= ?');
$result1 = getRows($stmt1, "1");
$gr1 = $db->rowCount();

if (!empty($gr1)) {

    $stmt2 = $db->prepare('select * from users where id = ?');

    foreach ($result1 as $key1 => $h1) {
        $stmt2->bindParam(1, $h1['session'], PDO::PARAM_INT);
        $stmt2->execute();
        $result2 = $stmt2->fetchAll(PDO::FETCH_ASSOC);
        if (count($result2) !== 0) {
            foreach ($result2 as $key2 => $r2) {
                echo ', &nbsp <a href="dashboard.php?user=' . $r2['username'] . '">' . $r2['username'] . '</a> &nbsp  ';
            }
        }
    }
}

function getRow($query, $para) {
    $stmt1->bindParam(1, $para, PDO::PARAM_INT);
    try {
        $stmt1->execute($para);
        $result1 = $stmt1->fetchAll(PDO::FETCH_ASSOC);
        return $result1;
    } catch (PDOException $e) {
        throw new Exception($e->getMessage());
    }
}

Please find the database class here

class database {
    public $isConn;
    protected $datab;
    private $stmt;
public function __construct() {
    $this->connect();
}

    // connect to database
    private function connect(){
        $host   = 'localhost';
        $db     = 'baws';
        $user   = 'root';
        $pass   = 'root';
        $option = [];

        $this->isConn = TRUE;
        try {
            $this->datab = new PDO('mysql:host='.$host.';dbname='.$db.';charset=utf8', $user, $pass, $option);
            $this->datab->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->datab->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            echo '<h3>Not connected</h3>' . $e->getMessage();
        }

    }

    // Disconnected from database
    private function disconnect(){
        $this->isConn = NULL;
        $this->datab = FALSE;
    }

    //insert to database
    public function insertRow($query, $para = []){
        try {
            $this->stmt = $this->datab->prepare($query);
            $this->stmt->execute($para);
            return TRUE;
        } catch (PDOException $e) {
            throw new Exception($e->getMessage());
        }
    }

    //update row to database
    public function updateRow($query, $para = []){
        $this->insertRow($query, $para);
    }

    //Delete row from database
    public function deleteRow($query, $para = []){
        $this->insertRow($query, $para);
    }

    // Get row by id, username, or email etc..
    public function getRow($query, $para = []){
        try {
            $this->stmt = $this->datab->prepare($query);
            $this->stmt->execute($para);
            return $this->stmt->fetch();
        } catch (PDOException $e) {
            throw new Exception($e->getMessage());
        }
    }

}

online.php Page

ob_start();
echo "ONLINE <br>";
include_once '../database.php';
$db = new database();

try {
    $session=$_COOKIE['id'];
    $time=time();
    $time_check=$time-300; //SET TIME 10 Minute

    $getRow = $db->getRow("SELECT * FROM user_online WHERE session = ?", [$session]);
    $count =$db->rowCount($getRow);


    if($count == '0'){
        $insertRow = $db->insertRow("INSERT INTO user_online(session, time)VALUES(? , ?)",[$session, $time ]);
    }

    elseif($count != '0'){
        $updateRow = $db->updateRow("UPDATE user_online SET time = ? WHERE session = ?", [$time, $session]);
    }else{
        $deleteRow = $db->deleteRow("DELETE FROM user_online WHERE time < ? ", [$time_check]);
    }
} catch (PDOException $e) {
   die('Error :'.   $e->getMessage());
}


try {
    $ip=$_SERVER['REMOTE_ADDR'];
    $session=$ip;
    $time=time();
    $time_check=$time-300; //SET TIME 10 Minute

    $deleteRow = $db->deleteRow("DELETE FROM visitors_online WHERE time < ? ", [$time_check]);


} catch (PDOException $e) {
    throw new Exception($e->getMessage());

}

$getRows = $db->getRows('select * from visitors_online');
$gr = $db->rowCount();
$online = '';


$getRow = $db->getRow('select * from user_online');
$gr2 = $db->rowCount();

if(!empty($gr2)) {
        try {
            while ($getR = $getRow){
            $getRow = $db->getRow('select * from users where id = ?',[$getR['session']]);
            echo  ', &nbsp <a href="dashboard.php?user='.$getRow['username'].'">'.$getRow['username'].'</a> &nbsp  ';
            }
        } catch (PDOException $e) {
            die('Error :'.  $e->getMessage());
        }
    $total = $gr + $gr2;

} //end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM