Llevo varias horas buscando la manera de solucionar lo siguiente y no he encontrado ninguna solución... A ver si aquí me podéis ayudar:
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'
);
}
});
});
Podéis ver la consulta a notify.php mediante ajax (jquery 1.10.2)... al final envía los resultados al div con id "#notification"
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();
Por último en index.php, donde hay una sesión iniciada, llamo a los js necesarios y creo el div con id notification
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?