2014-10-29 3 views
0

Я использовал для кодирования старым способом в php и был представлен через этот форум для POO. Я переписываю скрипт, который был в mysql в PDO. Этот скрипт должен показывать числа и имена подключенных участников на веб-сайте. До сих пор он отображает только номер, но не список имен подключенных членовПоказать номера и имена пользователей

что сценарий обновлен:

<?php 

session_start(); 

if(isset($_SESSION['nom'])){ 
    include('class.connect.php'); 
    include('class.user.php'); 

    $db = new DBEngine(); 

    //verify if the name is already in the table 
    $log = $db->con->prepare('SELECT COUNT(nom) AS name FROM members_connected WHERE nom=?'); 
    $log->execute(array($_SESSION['nom'])); 


    $count = $log->fetchColumn(0); 
    $time = time(); 
    if ($count == 0) 
    { 

     // the user is not in the new table, i add him 
     $log = $db->con->prepare('INSERT INTO members_connected (nom,timestamp) VALUES(?,?)'); 
     $log->execute(array($_SESSION['nom'],$time)); 
    } 

    //name already in the table, update the timestamp 
    else 
    { 

     $log = $db->con->prepare('UPDATE members_connected SET timestamp=? WHERE nom=?'); 

     $log->execute(array($_SESSION['name'],$time)); 
    } 

    //5 min earlier's timestamp 
    $timestamp_5min = time() - (60 * 5); 

    $log = $db->con->prepare('DELETE FROM members_connected WHERE timestamp < ?'); 
    $log-> execute(array($timestamp_5min)); 

    $log = $db->con->prepare('SELECT nom FROM members_connected'); 
    $log->execute(); 
    $row = $log->fetch(PDO::FETCH_ASSOC); 

    echo $count ; 

    //show the list of connected    
    if($count > 0) 
    { 
     $i=0; 
     while($count = $log->fetch(PDO::FETCH_ASSOC)); 
     { 
      $i++; 
      echo $count['nom']; 
      if($i<$row) 
      { 
       //space between names 
       echo ','; 
      } 
     } 
    } 
} 

>

    ` 

Любые мысли пожалуйста?

+2

POO? Ну, это заставило меня усмехнуться. ;-) – Strawberry

+0

Ну, какая ошибка? – Eliel

+0

@Eliel это эта Неустранимая ошибка: использование $ this, когда не в контексте объекта в C: \ Program Files (x86) \ wamp \ www \ Bladuo \ html \ connected_members.php в строке 10 – Kuma

ответ

1

Создать класс TimeStamp, который будет извлекать и обновлять вашу базу данных следующим образом:

class TimeStamp 
    { 
     protected $db; 

     public $row_count; 
     public function __construct($db) 
      { 
       $this->db = $db; 
      } 

     // This should grab all users connected 
     public function Fetch($_user, $interval = '1') 
      { 
       // This is just checking a time range and collecting names 
       // You may want to make a new function that will then take the return list and query your user info table to get the user info 
       $connected = $this->db->con->prepare("select * FROM members_connected WHERE timestamp > DATE_SUB(NOW(), INTERVAL $interval MINUTE)"); 
       $connected->execute(array($_user)); 

       if($connected->rowCount() > 0) { 
         while($result = $connected->fetch(PDO::FETCH_ASSOC)) { 
           $users[] = $result; 
          } 

        } 

       // This should get the count 
       $this->row_count = (isset($users))? count($users):0; 

       // Return if users are available 
       return (isset($users))? $users:0; 
      } 

     public function Record($_user) 
      { 
       $connected = $this->db->con->prepare("INSERT INTO members_connected (nom, timestamp) VALUES (:nom,NOW()) ON DUPLICATE KEY UPDATE timestamp = NOW()"); 
       $connected->bindParam(':nom', $_user); 
       $connected->execute(); 
      } 
    } 


include('class.connect.php'); 
include('class.user.php'); 

$db  = new DBEngine(); 

if(isset($_SESSION['nom'])) { 
     // Start the timestamp, feed database 
     $u_check = new TimeStamp($db); 

     // Record into db 
     $u_check->Record($_SESSION['nom']); 

     // Check db, print users 
     $users = $u_check->Fetch($_SESSION['nom']); 
     print_r($users); 

     // Display count 
     echo "USERS: ".$u_check->row_count; 
    } 
2

попробуйте добавить следующее после второго включения;

$db = new DBEngine(); 

Затем в коде, где у вас есть

$this->db->con->prepare(... 

изменить что

$db->con->prepare(... 

UPDATE В ответ на ваш второй ошибки, это выглядит, как вам нужно установить переменные типы в ваших привязках.

например.

$log->bindParam(1, $_SESSION['name'], PDO::PARAM_STR, 25); 
$log->bindParam(2, time(), PDO::PARAM_STR, 20); 

Кроме того, вы не должны связывать переменные, как, что и вы могли бы передать их непосредственно в execute как так (это то, что вы имеете в своем первом запросе кстати)

$log->execute(array($_SESSION['name'], time())); 
+0

Ну, я исправил несколько ошибок, которые у меня были, а не то, что я хочу, но спасибо! – Kuma

Смежные вопросы