Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Estas en el tema de AJAX - Cargar datos en un div con AJAX dentro de un WHILE php en el foro de PHP en Foros del Web. Buenas estoy haciendo una web con comentarios y el tiempo transcurrido de cada comentario, lo que deseo actualizar cada 5 segundos es el tiempo transcurrido ...
  #1 (permalink)  
Antiguo 14/01/2014, 09:04
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Buenas
estoy haciendo una web con comentarios y el tiempo transcurrido de cada comentario, lo que deseo actualizar cada 5 segundos es el tiempo transcurrido de cada comentario usando AJAX, pero al imprimir los datos, el tiempo solo se muestra en el ultimo resultado del WHILE, no en todos..

Este es el código que uso:

--------------------------------------- index.php ---------------------------------------

<script src="ajax.js"></script>
<?php
//include("conec.php");
$comentarios=mysql_query("SELECT * FROM comentarios ORDER BY id DESC",$link);
while($rowcomentarios = mysql_fetch_array($comentarios)) { ?>

codigo...

<!-- Aca sigue el tiempo !-->
<div id="time"><div name="timediv" id="timediv"></div></div>

<?php } ?>


--------------------------------------- ajax.js ---------------------------------------


var seconds = 5; // el tiempo en que se refresca

var divid = "time"; // el div que quieres actualizar!

var url = "tiempo.php"; // el archivo que ira en el div



function refreshdiv(){



// The XMLHttpRequest object



var xmlHttp;

try{

xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari

}

catch (e){

try{

xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer

}

catch (e){

try{

xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

}

catch (e){

alert("Tu explorador no soporta AJAX.");

return false;

}

}

}



// Timestamp for preventing IE caching the GET request

var timestamp = parseInt(new Date().getTime().toString().substring(0, 10));

var nocacheurl = url+"?t="+timestamp;



// The code...



xmlHttp.onreadystatechange=function(){

if(xmlHttp.readyState== 4 && xmlHttp.readyState != null){

document.getElementById(divid).innerHTML=xmlHttp.r esponseText;

setTimeout('refreshdiv()',seconds*1000);

}

}

xmlHttp.open("GET",nocacheurl,true);

xmlHttp.send(null);

}



// Empieza la función de refrescar



window.onload = function(){

refreshdiv(); // corremos inmediatamente la funcion

}

--------------------------------------- tiempo.php ---------------------------------------

function tiempo_transcurrido($fecha) {
if(empty($fecha)) {
return "No hay fecha";
}

$intervalos = array("segundo", "minuto", "hora", "dí*a", "semana", "mes", "año");
$duraciones = array("60","60","24","7","4.35","12");

$ahora = time();
$Fecha_Unix = strtotime($fecha);

if(empty($Fecha_Unix)) {
return "Fecha incorrecta";
}
if($ahora > $Fecha_Unix) {
$diferencia = $ahora - $Fecha_Unix;
$tiempo = "Hace";
} else {
$diferencia = $Fecha_Unix - $ahora;
$tiempo = "Dentro de";
}
for($j = 0; $diferencia >= $duraciones[$j] && $j < count($duraciones)-1; $j++) {
$diferencia /= $duraciones[$j];
}

$diferencia = round($diferencia);

if($diferencia != 1) {
$intervalos[5].="e"; //meses... la magia del español
$intervalos[$j].= "s";
}

return "$tiempo $diferencia $intervalos[$j]"; }
?>

<p class="social-time-publication"><?php echo tiempo_transcurrido("2014-01-14 07:58:00"); ?> <i class="icon-globe"></i></p>

Ese sería el codigo
Gracias de ante mano
  #2 (permalink)  
Antiguo 14/01/2014, 10:17
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

No sé si entendí bien, pero para qué haces las peticiones si la hora del comentario siempre es la misma, no va a cambiar. Lo podés hacer con el dato que ya tenes e ir actualizandolo cada cierto tiempo, como los 5 segundos que ya tenes.

Hay una libreria, no me acuerdo como se llama que te pone "hace unos segundos" "hace 2 minutos" "hace una hora" como facebook, si eso es lo que querés.

Las peticiones por ajax no entiendo bien porque las hacés.
  #3 (permalink)  
Antiguo 14/01/2014, 10:23
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Hola, gracias por responder, te explico:

Sí deseo hacer los comentarios como Facebook, que el tiempo transcurrido se actualice cada cinco segundos. (Solo el tiempo)

en index.php tengo un WHILE donde llamo a los comentarios

y en medio de ese WHILE tengo un DIV que se actualiza con el AJAX y me jala a tiempo.php

En tiempo.php es donde está la función que me calcula el tiempo transcurrido

Todo me funciona perfecto PERO.....

cuando imprimo todo, solo me sale el tiempo transcurrido del ultimo comentario del WHILE

No sé como hacer para que el tiempo me aparezca en todos los registros del While

Agradezco si me ayudas
  #4 (permalink)  
Antiguo 14/01/2014, 10:27
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

El principal problema es que en tu while() repites varios elementos con el mismo ID, de entrada eso ya está mal.

Seguramente la función que tienes para calcular el tiempo trabaja sobre un ID, pero como deben ser únicos no funcionará para todos, eso es claro.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 14/01/2014, 10:35
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Esta es una imagen de como se ve todo

Sí me imprime los comentarios pero el tiempo solo me lo muestra en el ultimo comentario

  #6 (permalink)  
Antiguo 14/01/2014, 10:39
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Mi código del WHILE es el siguiente:
Donde primero llamo a los comentarios y después hago otro WHILE para jalar los datos del usuario que esta haciendo ese comentario

//include("conec.php");
$comentarios=mysql_query("SELECT * FROM comentarios ORDER BY id DESC",$link);
while($rowcomentarios = mysql_fetch_array($comentarios)) { ?>

$user_comentario=mysql_query("SELECT * FROM perfil_usuarios where id = '".$rowcomentarios["id_usuario"]."'",$link);
while($row_user_comentario = mysql_fetch_array($user_comentario)) {

<!-- Este es el div que se actualiza cada 5 segundos !-->
<div id="time">
</div>


<?php } } ?>




Esta es la pagina que se carga en el div gracias a AJAX


<?php
function tiempo_transcurrido($fecha) {
if(empty($fecha)) {
return "No hay fecha";
}

$intervalos = array("segundo", "minuto", "hora", "dí*a", "semana", "mes", "año");
$duraciones = array("60","60","24","7","4.35","12");

$ahora = time();
$Fecha_Unix = strtotime($fecha);

if(empty($Fecha_Unix)) {
return "Fecha incorrecta";
}
if($ahora > $Fecha_Unix) {
$diferencia = $ahora - $Fecha_Unix;
$tiempo = "Hace";
} else {
$diferencia = $Fecha_Unix - $ahora;
$tiempo = "Dentro de";
}
for($j = 0; $diferencia >= $duraciones[$j] && $j < count($duraciones)-1; $j++) {
$diferencia /= $duraciones[$j];
}

$diferencia = round($diferencia);

if($diferencia != 1) {
$intervalos[5].="e";
$intervalos[$j].= "s";
}

return "$tiempo $diferencia $intervalos[$j]"; }
?>


AQUI DEBE IR EL CAMPO FECHA JALADO DESDE LA BASE DE DATOS
<?php echo tiempo_transcurrido("2014-01-14 10:00:00"); ?>
  #7 (permalink)  
Antiguo 14/01/2014, 10:50
Avatar de Cuervoo  
Fecha de Ingreso: octubre-2013
Mensajes: 165
Antigüedad: 10 años, 6 meses
Puntos: 43
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Pero en vez de hacerlo por ajax porque no modificas solamente ese texto?

Lo que me ocurre es esto: suponete que tenes el div contenedor con el id #comentarios, y dentro de cada bloque de los comentarios mostras el tiempo en un span con la clase "tiempo" y un atributo time o como quieras llamarlo, para hacerlo rápido y entiendas la idea.

Nos queda esto:

Código HTML:
Ver original
  1. <div id="#comentarios">
  2.  
  3.     <div class="un-comentario">
  4.         <!-- HTML del bloque... -->
  5.         <span class="tiempo" time="7652785">Hace 10 segundos</span>
  6.        <!-- ...sigue HTML del bloque-->
  7.     </div>
  8.  
  9.     <div class="un-comentario">
  10.         <!-- HTML del bloque... -->
  11.         <span class="tiempo" time="333333">Hace 53 minutos</span>
  12.        <!-- ...sigue HTML del bloque-->
  13.     </div>
  14.  
  15. </div>

Donde el atributo "time" es la fecha en que se hizo el comentario en segundos. Después cada 5 segundos ejecutas un bucle que lo recorre y va actualizando ese texto.

Código Javascript:
Ver original
  1. $('#comentarios .tiempo').each(function() {
  2.     $(this).html(tiempo_transcurrido($($this).attr('time')));
  3. });

Obviamente tiempo_transcurrido la tenes que pasar a javascript también. Y asi te ahorras tantas llamadas a la base de datos y solucionas directamente ese problema que no te imprime esa parte.
  #8 (permalink)  
Antiguo 14/01/2014, 11:34
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Gracias Cuervoo,
si te entiendo,

La fecha y hora del comentario la guardo en un campo Datetime en la base de Datos
El formato de Hora y fecha es: 2014-01-14 10:33:06

Entonces... Digamos que no lo hago con AJAX
Coloco la función arriba de mi WHILE y
Cuando imprimo los datos, quedaría:

//Acá pongo la función para calcular el tiempo
function tiempo_transcurrido($fecha) {........}


// EMPIEZA WHILE PARA JALAR LOS COMENTARIOS
<?php
include("conec.php");
$comentarios=mysql_query("SELECT * FROM comentarios ORDER BY id DESC",$link);
while($rowcomentarios = mysql_fetch_array($comentarios)) { ?>

// ACA JALO OTROS DATOS COMO IMAGEN DEL PERFIL Y OTROS
$user_comentario=mysql_query("SELECT * FROM perfil_usuarios where id = '".$rowcomentarios["id_usuario"]."'",$link);
while($row_user_comentario = mysql_fetch_array($user_comentario)) { ?>


<!-- Acá imprimo la fecha, sin AJAX, solo la imprimo, y llamo a la función de Tiempo_Transcurrido !-->


<?php echo tiempo_transcurrido($rowcomentarios['fecha']); ?>



<?php } } ?>



Ok.
Cómo realizo el bucle que me recomiendas para actualizar solamente ese dato ?
  #9 (permalink)  
Antiguo 14/01/2014, 11:36
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

no sé como pasar la función Tiempo_transcurrido de php a Javascripts
  #10 (permalink)  
Antiguo 14/01/2014, 11:37
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Cita:
Iniciado por carvaec Ver Mensaje
no sé como pasar la función Tiempo_transcurrido de php a Javascripts
No hace falta que la pases si no tienes los conocimientos necesarios, para eso existen muchas librerías al respecto.

Te sugiero usar Moment.js => http://momentjs.com/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 14/01/2014, 11:47
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Bueno, muchas gracias, voy a investigar y seguir intentando
Les avisaré si logro resolverlo
  #12 (permalink)  
Antiguo 14/01/2014, 11:57
 
Fecha de Ingreso: abril-2009
Mensajes: 37
Antigüedad: 15 años
Puntos: 0
Respuesta: AJAX - Cargar datos en un div con AJAX dentro de un WHILE php

Cita:
Iniciado por pateketrueke Ver Mensaje
El principal problema es que en tu while() repites varios elementos con el mismo ID, de entrada eso ya está mal.

Seguramente la función que tienes para calcular el tiempo trabaja sobre un ID, pero como deben ser únicos no funcionará para todos, eso es claro.
Hola
Qué propones para mejorar el código ?

Etiquetas: ajax, fecha, html, mysql, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:56.