Foros del Web » Programando para Internet » PHP »

Actualizar PHP+AJAX

Estas en el tema de Actualizar PHP+AJAX en el foro de PHP en Foros del Web. hola amigos del foro, tengo una gran duda yo tengo un sistema de comentario la cuales los usuario publican millones de comentarios;ahora la duda es ...
  #1 (permalink)  
Antiguo 21/12/2011, 10:36
 
Fecha de Ingreso: marzo-2011
Ubicación: Punta de Mata
Mensajes: 106
Antigüedad: 13 años, 1 mes
Puntos: 0
Actualizar PHP+AJAX

hola amigos del foro, tengo una gran duda yo tengo un sistema de comentario la cuales los usuario publican millones de comentarios;ahora la duda es que el javascript actuliuza cada 10segundos y me pregunto abra una manera de actualizar solo cuando en la base de datos hay nuevos registro, nuevo comentarios este es el codigo que utilizo para actualizar
Código Javascript:
Ver original
  1. <script type="text/javascript">$(function(){var refreshTime = 0;function  refresh(){$.get('comentarios.php',{},function(callback){$('#comentarios').html(callback);refreshTime = setTimeout(refresh,10000);});}function cancelRefresh(){clearTimeout(refreshTime);}refresh();});</script>
  2. <script type="text/javascript">
y este
Código PHP:
Ver original
  1. var RequestObject = false;
  2.   var Archivo = 'http://localhost/Comentarios/ajax.php'; //directorio donde tenemos el archivo ajax.php
  3.   window.setInterval("actualizacion_reloj()", 2000); // el tiempo X que tardará en actualizarse
  4.   if (window.XMLHttpRequest) //
  5. RequestObject = new XMLHttpRequest();
  6. if (window.ActiveXObject)  
  7.   RequestObject = new ActiveXObject("Microsoft.XMLHTTP");
  8. function ReqChange() {
  9. // Si se ha recibido la información correctamente
  10.   if (RequestObject.readyState==4) {
  11.   // si la información es válida
  12.   if (RequestObject.responseText.indexOf('invalid') == -1)
  13.   {
  14.   // obtener la respuesta
  15.   var msgs = RequestObject.responseText.split('|');
  16.   // Buscamos la div con id online
  17.   document.getElementById("online").innerHTML = msgs[0];
  18.   }
  19.   else {
  20.   // Por si hay algun error
  21.   document.getElementById("online").innerHTML = "Error llamando";
  22.   }
  23.   }
  24.   }
  25. function llamadaAjax() {
  26.  // Mensaje a mostrar mientras se obtiene la información remota...
  27.   document.getElementById("online").innerHTML = "";
  28.   // Preparamos la obtención de datos
  29.   RequestObject.open("GET", Archivo , true);
  30.   RequestObject.onreadystatechange = ReqChange;
  31.   // Enviamos
  32.   RequestObject.send(null);
  33.   }
  34.   function actualizacion_reloj() {
  35.   llamadaAjax();
  36.   }
busco una forma que actualice si hay nuevos registro en la base de datos y no hay nada se queda igual como esta!
porfavor necesito una gran ayudase lo agradezco
  #2 (permalink)  
Antiguo 21/12/2011, 11:00
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Actualizar PHP+AJAX

Hola, revise muy rapidamente tu código así que no te podria decir si esta bien o mal del todo. Sin embargo coloco algunas observaciones:

Si los comentarios los estas guardando en una base de datos tipo mysql pues simplemente con la sentencia select * from comentarios podrias asegurar que siempre se van a mostrar todos los comentarios.

En esta linea:

Código HTML:
 RequestObject.open("GET", Archivo , true);
Supongo que la palabra archivo se referira a la página php que usas para procesar, en estos momentos no veo que le estes pasando ningun parámetro que confirme que se coloco un nuevo comentario. Yo en lugar de activar esta función con un temporizador la haria con la respuesta de un boton. En este boton estaria el parametro que se deberia pasar por GET y que confirme que se ha introducido nueva información. Luego en la pagina archivo valido la información para evitar ataques varios (que podrian meter codigo malicioso a la pagina). En caso de que pasen los controles realizo el insert de los datos y finalmente los despliego.

Espero que te haya sido de utilidad la información.
  #3 (permalink)  
Antiguo 21/12/2011, 11:31
 
Fecha de Ingreso: marzo-2011
Ubicación: Punta de Mata
Mensajes: 106
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Actualizar PHP+AJAX

gracias amigo por tu respuesta pero, yo puse dos codigo a ver cuales de los dos sera mas facil para responder a mi duda pero yo utilizo mas es el primero, pero creo que no explique bien, yo busco una forma de que en el javascript busque los comentario como lo hace pero que en vez de estar actualizando cada segudo actualice en el momento que en la base de datos este un nuevo registro unos nuevos datos y asi el actualiza, le agradezco si me responde a mi duda gracias
  #4 (permalink)  
Antiguo 21/12/2011, 11:34
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Actualizar PHP+AJAX

no me queda muy claro.
supongamos lo siguiente

tenes una página que muestra los comentarios (en un div que carga la consulta con ajax) y debajo un form para agregarlos.
Si un usuario agrega una entrada, la accion del form (que tambien la haces x ajax) realiza dos cosas, hace un insert en la BD y actualiza el div superior.
Hasta aqui no hay ninguna "actualización" automática, pero obviamente, el resto de los usuarios que simplemente están navegando y leyendo los comentarios, no van a ver los cambios que introdujo el usuario que si agregó un comentario.

Ahora, necesitarías recargar esa ese div automaticamente si es que hubo algun agregado, pero para ello necesitarías una script que se ejecute automaticamente, chequee el id del ultimo registro (supongamos que es un autoincrement, contar los registros no bastaría si es que en algún momento eliminas), la compare contra un numero previamente almacenado en alguna parte , y si se agregó un registro, actualizar el div.

no dejo de mencionar que eso de "millones de registros" para un sistema de comentarios me sorprende un poco

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 21/12/2011, 12:11
 
Fecha de Ingreso: marzo-2011
Ubicación: Punta de Mata
Mensajes: 106
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Actualizar PHP+AJAX

hola amigo gracias por tu respuesta,te voy a mostrar los codigo para ver si me ayudas por favor
tengo un archivo llamado index.php
Código PHP:
Ver original
  1. <form action="#" method="post" name="comentarios" id="comentarios">    <?php   include("funciones/funciones.php");
  2.           include("funciones/connect.php");
  3.     $conexion = mysql_connect($host, $usuario, $clave);
  4.     if(!$conexion) {
  5.     die("Error al intentar conectar: ".mysql_error());
  6.     }
  7.     $conectar = mysql_select_db($base, $conexion);
  8.     if(!$conectar) {
  9.     die('Error al intentar seleccionar la base de datos'. mysql_error());
  10.     }
  11.     if(isset($_POST['enviar']) && $_POST['enviar'] == 'Comentar'){
  12.     if(!empty($_POST['comentario'])){
  13.     $username = "$username";
  14.     $comentario = inyeccion(mysql_real_escape_string($_POST['comentario']));
  15.     $consulta = mysql_query("INSERT INTO Comentarios (fecha, username, comentario)
  16.    VALUES (CURRENT_TIMESTAMP(), '$username', '$comentario')", $conexion)
  17.     or die(mysql_error());
  18.     echo "Tu comentario fue agregado.";
  19.     }else{
  20.     print "Debe llenar todos los campos";
  21.     }
  22.     }?>[HIGHLIGHT="HTML"]  <table width="455" border="0" align="center" cellpadding="0" cellspacing="0">
  23. <tr>
  24.               <td height="14" colspan="2" valign="top">
  25.                 <div align="left">Nombre de usuario:</div></td>
  26.             </tr><tr>
  27.               <td height="22" colspan="2" valign="top"><input name="usuario" type="text" class="text-field" id="usuario" style="width: 455px;" value="" /></td>
  28. </tr>
  29.             <tr>
  30.               <td width="79%" height="19" valign="middle">Mensaje:</td>
  31.               <td width="21%" valign="top"><img src="imagenes/bold.gif" width="24" height="20" onclick="bbcode('b');"/><img src="imagenes/italic.gif" width="24" height="20" onclick="bbcode('i');"/><img src="imagenes/under.gif" width="24" height="20" onclick="bbcode('u');"/><img src="imagenes/url.gif" width="24" height="20" onclick="bbcode('url');"/></td>
  32.           </tr>
  33.             <tr>
  34.               <td height="50" colspan="2" valign="top"><textarea style="width: 455px; height: 50px;" name="comentarios" id="comentarios" class="text-field"></textarea></td>
  35.             </tr>
  36.             <tr>
  37.               <td height="24" colspan="2" valign="top"><input type="submit" class="boton" name="enviar" value="Comentar" /></td>
  38.             </tr>
  39.       </table>
  40.       </form>
  41. <div id='centercomen'></div>
[/HIGHLIGHT]
entonces el javascript que muestra los comentarios desde otro achivo que es
Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect($host, $user, $clave);
  3. if(!$conexion) {
  4. die("Error al intentar conectar: ".mysql_error());
  5. }
  6. $conectar = mysql_select_db($base, $conexion);
  7. if(!$conectar) {
  8. die('Error al intentar seleccionar la base de datos'. mysql_error());
  9. }
  10.  $registrostope=20;
  11.  if(isset($_GET['a'])){
  12.   $inicio=($_GET['a']-1)*$registrostope;
  13.   $pagina=$_GET['a'];
  14.  }else{
  15.   $inicio=0;
  16.   $pagina=1;
  17.  }
  18.  
  19. $resultados=mysql_query("SELECT * FROM Comentarios ORDER BY ID DESC LIMIT $inicio, $registrostope");
  20. $i = 0;
  21. echo "<table width='463' border='0' align='center' cellpadding='5' cellspacing='2' bgcolor='#FFFFFF'>";
  22.  while($datos=mysql_fetch_array($resultados)){
  23. $color = ($i % 2 == 0) ? '#edeff4' : '#d8dfea';
  24. echo "<tr><td bgcolor='$color'><span style='color: #006699;'><strong>$datos[usuario]</strong></span> @ <span title='". fecha($datos['fecha']) ."'>". nl2br(tiempofecha($datos['fecha'])) ."</span><br>". nl2br(bbcode($datos['comentarios'])) ."<br /></td></tr>";
  25. $i++;
  26.  }
  27.  echo "</table>";
  28.  
  29.  $total=mysql_num_rows(mysql_query("SELECT * FROM Comentarios"));
  30.  $anterior=$pagina-1;
  31.  $siguiente=$pagina+1;
  32.  $ultimo=$total/$pagina;
  33.  
  34.  
  35.  $rest=$total%$pagina;
  36.  
  37.  if($rest>0) $ultimo=floor($ultimo)+1;
  38.  
  39.  
  40.  echo "<div align='center'>";
  41.  echo "<a style=\"cursor: pointer;\" onclick=\"pagina('1')\">Primero</a> - ";
  42.  if($pagina>1) echo "<a style=\"cursor: pointer;\" onclick=\"pagina('$anterior')\">Anterior</a> ";
  43.  echo "<strong>".$pagina."/".$ultimo."</strong>";
  44.  if($pagina<$ultimo)  echo " <a style=\"cursor: pointer;\" onclick=\"pagina('$siguiente')\">Siguiente</a> ";
  45.  echo " - <a style=\"cursor: pointer;\" onclick=\"pagina('$ultimo')\">Ultimo</a>";
  46.  echo "</div>";
  47. ?>
entonces el script hace esta desde el index.php los usuarios escriben sus comentarios y elscript muestra el otro archivo que es donde busca en la base de datos sus comentarios, pero el script actualiza cada Xsegundo y lo que busco es que el sripto solo actualice cuando hay nuevos registros,comentarios en la base de datos
porfavor ayudenmeT_T
  #6 (permalink)  
Antiguo 21/12/2011, 18:38
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 12 años, 10 meses
Puntos: 181
Respuesta: Actualizar PHP+AJAX

Cita:
entonces el script hace esta desde el index.php los usuarios escriben sus comentarios y elscript muestra el otro archivo que es donde busca en la base de datos sus comentarios, pero el script actualiza cada Xsegundo y lo que busco es que el sripto solo actualice cuando hay nuevos registros,comentarios en la base de datos
porfavor ayudenmeT_T
Si entiendo lo que quieres hacer, es mas o menos parecido a lo que uno hace en you tube, escribe un comentario y al instante sale los resultados y en este caso con paginador por si son muchos.

Para mi no tiene ningun sentido usar un umbral de tiempo, con un simple boton al colocar el comentario se puede hacer todo, recibir los datos, validar que sean datos correctos, actualizar la base de datos y desplegar los resultados. Si no es lo que quieres hacer, mas no puedo colaborar porque no entiendo donde esta la dificultad.
  #7 (permalink)  
Antiguo 09/01/2012, 14:34
 
Fecha de Ingreso: marzo-2011
Ubicación: Punta de Mata
Mensajes: 106
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Actualizar PHP+AJAX

hola ahora neceto su ayuda aqui esta un codigo que revise y probe y reacciona perfctamente pero solo fncia con un archov de texteo y quiero que reaccione con uno de php aqui estanm los codigo:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. var Comet = Class.create();
  3. Comet.prototype = {
  4.  
  5.   timestamp: 0,
  6.   url: 'backend.php',
  7.   noerror: true,
  8.  
  9.   initialize: function() { },
  10.  
  11.   connect: function()
  12.   {
  13.     this.ajax = new Ajax.Request(this.url, {
  14.       method: 'get',
  15.       parameters: { 'timestamp' : this.timestamp },
  16.       onSuccess: function(transport) {
  17.         // handle the server response
  18.         var response = transport.responseText.evalJSON();
  19.         this.comet.timestamp = response['timestamp'];
  20.         this.comet.handleResponse(response);
  21.         this.comet.noerror = true;
  22.       },
  23.       onComplete: function(transport) {
  24.         // send a new ajax request when this request is finished
  25.         if (!this.comet.noerror)
  26.           // if a connection problem occurs, try to reconnect each 5 seconds
  27.           setTimeout(function(){ comet.connect() }, 5000);
  28.         else
  29.           this.comet.connect();
  30.         this.comet.noerror = false;
  31.       }
  32.     });
  33.     this.ajax.comet = this;
  34.   },
  35.  
  36.   disconnect: function()
  37.   {
  38.   },
  39.  
  40.   handleResponse: function(response)
  41.   {
  42.     $('content').innerHTML += '<div>' + response['msg'] + '</div>';
  43.   },
  44.  
  45.   doRequest: function(request)
  46.   {
  47.     new Ajax.Request(this.url, {
  48.       method: 'get',
  49.       parameters: { 'msg' : request }
  50.     });
  51.   }
  52. }
  53. var comet = new Comet();
  54. comet.connect();
  55. </script>
aqui esta el php llamada backend.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. $filename  = dirname(__FILE__).'/data.txt';
  4.  
  5. // store new message in the file
  6. $msg = isset($_GET['msg']) ? $_GET['msg'] : '';
  7. if ($msg != '')
  8. {
  9.   file_put_contents($filename,$msg);
  10.   die();
  11. }
  12.  
  13. // infinite loop until the data file is not modified
  14. $lastmodif    = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
  15. $currentmodif = filemtime($filename);
  16. while ($currentmodif <= $lastmodif) // check if the data file has been modified
  17. {
  18.   usleep(10000); // sleep 10ms to unload the CPU
  19.   $currentmodif = filemtime($filename);
  20. }
  21.  
  22. // return a json array
  23. $response = array();
  24. $response['msg']       = file_get_contents($filename);
  25. $response['timestamp'] = $currentmodif;
  26. echo json_encode($response);
  27.  
  28. ?>
ahora no se y e intentado pero no da resultado por favor ayudenme!!

Etiquetas: javascript+php, php+ajax
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 12:30.