Tema: Sesiones?
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2014, 16:19
gapaceon
 
Fecha de Ingreso: mayo-2014
Mensajes: 2
Antigüedad: 9 años, 10 meses
Puntos: 0
Sesiones?

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?