Antes que nada, deciros que no se mucho sobre PHP y menos de POO... Tengo un script en .js que lo que hace es consultar un archivo .php donde se realiza una consulta sql y posteriormente envía los resultados de la consulta... hablando en código...
Aquí tenéis el .js
notify.js
Código HTML:
function Chatter(){ this.getMessage = function(callback, lastTime){ var t = this; var latest = null; $.ajax({ 'url': 'notify.php', 'type': 'post', 'dataType': 'json', 'data': { 'mode': 'get', 'lastTime': lastTime }, 'timeout': 30000, 'cache': false, 'success': function(result){ if(result.result){ callback(result.message); latest = result.latest; } }, 'error': function(e){ console.log(e); }, 'complete': function(){ t.getMessage(callback, latest); } }); }; }; var c = new Chatter(); $(document).ready(function(){ $('#notification').submit(function(e){ e.preventDefault(); var user = $('#postUsername'); var sponsor = $('#postSponsor'); var err = $('#postError'); c.postMessage(user.val(), sponsor.val(), function(result){ if(result){ sponsor.val(''); } err.html(result.output); }); return false; }); c.getMessage(function(message){ var chat = $('#notification').empty(); for(var i = 0; i < message.length; i++){ chat.append( '<a href="#" title="'+i+'"><i class="fa fa-user"></i><b>' + message[i].user + '</b> es tu nuevo referido directo.</a>' ); var n = i; } var number = $('#number').empty(); if( n == 0){ number.append( '1' ); } if( n == 1){ number.append( '2' ); } }); });
Ahora os muestro el código php
notify.php
Código PHP:
<?php
class Chatter{
//change this according to your database setup
protected $server = 'localhost';
protected $username = '';
protected $password = '';
protected $database = '';
//leave this as our database connection later
protected $connection = null;
protected $session = $_SESSION['username'];
public function __construct(){
$this->connection = @mysql_connect($this->server, $this->username, $this->password);
if($this->connection){
if(!mysql_select_db($this->database)) die('database not found');
}
else die('database connection failed. Check your setup');
$mode = $this->fetch('mode');
switch($mode){
case 'get':
$this->getMessage($this->sess);
break;
}
return;
}
function getMessage($session){
$endtime = time() + 20;
$lasttime = $this->fetch('lastTime');
$curtime = null;
while(time() <= $endtime){
$rs = mysql_query("
SELECT *
FROM long_polling
WHERE sponsor LIKE '".$session."'
ORDER BY insertDate desc
LIMIT 2
");
if($rs){
$messages = array();
while($row = mysql_fetch_array($rs)){
$messages[] = array(
'user' => $row['username'],
'sponsor' => $row['sponsor'],
'time' => $row['insertDate']
);
}
$curtime = strtotime($messages[0]['time']);
}
if(!empty($messages) && $curtime != $lasttime){
$this->output(true, '', array_reverse($messages), $curtime);
break;
}
else{
sleep(1);
}
}
}
protected function fetch($name){
$val = isset($_POST[$name]) ? $_POST[$name] : '';
return mysql_real_escape_string($val, $this->connection);
}
protected function output($result, $output, $message = null, $latest = null){
echo json_encode(array(
'result' => $result,
'message' => $message,
'output' => $output,
'latest' => $latest
));
}
}
new Chatter();
index.php
Código HTML:
<script type="text/javascript" src="jquery-1.10.2.min.js"></script> <script type="text/javascript" src="notifyScript.js"></script> <div class="header-alert"> <ul> <li> <a title="" class="notification-btn"> <i class="fa fa-bell"></i> <span id="number"></span> </a> <div class="notification" id="notification"> <p>SIN NOTIFICACIONES</p> </div> </li> </ul> </div>
No hay manera de utilizar protected $session = $_SESSION['username']; ... en cambio, si pongo esto: protected $session = 'usuario'; si que me recoje los datos. Y aquí es donde está todo el problema.
El problema que tengo es que, en la página sobre la que quiero implementar ésto (index.php) hay iniciada una sesión, y quiero recuperar de alguna forma el nombre de usuario de ésa sesión y realizar la consulta sql (noyify.php) utilizando el nombre de usuario y no encuentro ninguna manera de hacerlo... He probado y probado y nada... he buscado y tampoco... he leído algo sobre serialize y unserialize pero no se si ayudaría en éste caso ni tampoco sé implementarlo ... cabe decir que los scripts no los he escrito yo... los he sacado de internet y he cambiado lo que he sabido cambiar... ¿A alguien se le ocurre como puedo solucionar éste problema?