Foros del Web » Programando para Internet » Javascript »

Comentarios comet

Estas en el tema de Comentarios comet en el foro de Javascript en Foros del Web. Buenas Tengo un problema con un formulario, el caso es que quería hacer un comet que me encontre por internet pero al ponerle un campo ...
  #1 (permalink)  
Antiguo 18/04/2013, 06:37
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Comentarios comet

Buenas
Tengo un problema con un formulario, el caso es que quería hacer un comet que me encontre por internet pero al ponerle un campo de formulario, nose si se puede hacer de otra forma pero se me actualiza y no me deja escribir es decir pongo para escribir y cuando yevo un rato se actualiza y borra el contenido del textarea nose como se hace de otra forma ni si lo ago bien ya os digo que fue un codigo que encontre ace tiempo este es el codigo.
index.php
Código PHP:
Ver original
  1. <?php  
  2. if($_POST)    
  3. {
  4.     set_time_limit(0);      
  5.     header("Edge-control: no-store");  
  6.     sleep(1);
  7.     include('config.php');
  8.     $notificaciones=mysql_query("select * from messages",$conexion);
  9.     while($rs=mysql_fetch_assoc($notificaciones))
  10.     {
  11.     $imgs=mysql_query("select * from usuarios where id='$rs[user_id]'",$conexion);
  12.       while($im=mysql_fetch_array($imgs))
  13.     {
  14.         echo '<div style="width:50%; background:#CCCCCC; border-bottom:solid; border-bottom-color:#FFFFFF;">';
  15.         echo '<img src="'.$im['imagen'].'" height="8%"> ';
  16.         echo   $rs['estado']."<br>";
  17.         echo '<form name="nuevo_empleado1" action="" onSubmit="enviarDatosEmpleado1(); return false" style="margin-left:2%; margin-top:2%;">
  18. <textarea name="nombres1" type="text" cols="50" style="resize: none;"></textarea>
  19. <input type="submit" name="Submit" value="Compartir" />
  20. </form>';
  21.         echo '</div>';
  22.     }
  23.     $coment_de_comen=mysql_query("Select * from coment where id_comentario='$rs[msg_id]'",$conexion);
  24.     while($come=mysql_fetch_array($coment_de_comen))
  25.     {
  26.         echo "abra ssmss";
  27.     }
  28.     }  
  29.     mysql_close($conexion);    
  30.     exit();
  31.    
  32. }
  33. ?>
  34. <html>
  35. <head>    
  36. </head>
  37. <body style="">
  38. <div style="border:solid 1px; border-top-color:#666666; width:45%; background-color:#CCCCCC; height:10%;"><form name="nuevo_empleado" action="" onSubmit="enviarDatosEmpleado(); return false" style="margin-left:2%; margin-top:2%;">
  39. <textarea name="nombres" type="text" cols="50" style="resize: none;"></textarea>
  40. <input type="submit" name="Submit" value="Compartir" />
  41. </form></div>
  42.  
  43.  <div id="content">Cargando...</div>
  44. <script type="text/javascript" src="comet.js"></script>
  45. </body>
  46. </html>
comet.js
Código Javascript:
Ver original
  1. function objetoAjax(){
  2.  
  3. var xmlhttp=false;
  4.  
  5. try {
  6.  
  7.  
  8. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  9.  
  10. } catch (e) {
  11.  
  12. try {
  13.  
  14. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  15.  
  16. } catch (E) {
  17.  
  18. xmlhttp = false;
  19.  
  20. }
  21.  
  22.  
  23. }
  24. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  25.  
  26.   xmlhttp = new XMLHttpRequest();
  27.  
  28.   }
  29.  
  30.   return xmlhttp;
  31.  
  32.   }
  33. function enviarDatosEmpleado(){
  34.  
  35.   //donde se mostrará lo resultados
  36.  
  37.  
  38.  
  39.  
  40.   //valores de los inputs
  41.  
  42.   nom=document.nuevo_empleado.nombres.value;
  43.  
  44.  
  45.   //instanciamos el objetoAjax
  46.  
  47.   ajax=objetoAjax();
  48.  
  49.   //uso del medotod POST
  50.  
  51.   //archivo que realizará la operacion
  52.  
  53.   //registro.php
  54.  
  55.  
  56.   ajax.open("POST", "registro.php",true);
  57.  
  58.   ajax.onreadystatechange=function() {
  59.  
  60.   if (ajax.readyState==4) {
  61.  
  62.   //mostrar resultados en esta cap
  63.  
  64.  
  65.   //llamar a funcion para limpiar los inputs
  66.  
  67.   LimpiarCampos();
  68.  
  69.   }
  70.  
  71.   }
  72.  
  73.   ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  74.  
  75.  
  76.   //enviando los valores
  77.  
  78.   ajax.send("nombres="+nom)
  79.  
  80.   }
  81.  
  82. function LimpiarCampos(){
  83.  
  84.  
  85.   document.nuevo_empleado.nombres.value="";
  86.   document.nuevo_empleado.nombres.focus();
  87.  
  88.   }
  89.   function enviarDatosEmpleado1(){
  90.  
  91.   //donde se mostrará lo resultados
  92.  
  93.  
  94.  
  95.  
  96.   //valores de los inputs
  97.  
  98.   nom1=document.nuevo_empleado1.nombres1.value;
  99.  
  100.  
  101.   //instanciamos el objetoAjax
  102.  
  103.   ajax1=objetoAjax();
  104.  
  105.   //uso del medotod POST
  106.  
  107.   //archivo que realizará la operacion
  108.  
  109.   //registro.php
  110.  
  111.  
  112.   ajax1.open("POST", "registro.php",true);
  113.  
  114.   ajax1.onreadystatechange=function() {
  115.  
  116.   if (ajax1.readyState==4) {
  117.  
  118.   //mostrar resultados en esta cap
  119.  
  120.  
  121.   //llamar a funcion para limpiar los inputs
  122.  
  123.   LimpiarCampos1();
  124.  
  125.   }
  126.  
  127.   }
  128.  
  129.   ajax1.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  130.  
  131.  
  132.   //enviando los valores
  133.  
  134.   ajax1.send("nombres1"+nom1)
  135.  
  136.   }
  137.  
  138. function LimpiarCampos1(){
  139.  
  140.  
  141.   document.nuevo_empleado1.nombres1.value="";
  142.   document.nuevo_empleado1.nombres1.focus();
  143.  
  144.   }
  145.  
  146. var xmlhttp = function()
  147. * * {
  148. * * * * var a;try{a = new XMLHttpRequest();}
  149. * * * * catch(e){try{a = new ActiveXObject('Msxml2.XMLHTTP');}
  150. * * * * catch(e){try{a = new ActiveXObject('Microsoft.XMLHTTP');}
  151. * * * * catch(e){alert('Your browser doesn\'t support ajax');a=false;}
  152. * * * * }}return a;
  153. * * };*
  154. * * window.onload = function()
  155. * * {
  156. * * * * var a = new comet();
  157. * * };*
  158. * * var comet = function()
  159. * * {
  160. * * * * var a = new xmlhttp();
  161. * * * * a.open('post',window.location+"?"+Math.random()+"="+Math.random(), true);
  162. * * * * a.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  163. * * * * a.onreadystatechange = function()
  164. * * * * {
  165. * * * * * * if(a.readyState == 4)
  166. * * * * * * {
  167. * * * * * * * * document.getElementById('content').innerHTML = a.responseText;
  168. * * * * * * * * window.setTimeout(function(){
  169. * * * * * * * * * * a = new comet();* * * * * * * * * *
  170. * * * * * * * * });
  171. * * * * * * * *
  172. * * * * * * }
  173. * * * * };
  174. * * * * a.send('algo=algo');* * * * * * * *
  175. * * };
y por ultimo este es el registro.php
Código PHP:
Ver original
  1. <?php
  2.  
  3. //Configuracion de la conexion a base de datos
  4.  
  5.   $bd_host = "localhost";
  6.  
  7.   $bd_usuario = "root";
  8.  
  9.  
  10.   $bd_password = "";
  11.  
  12.   $bd_base = "db";
  13.  
  14. $con = mysql_connect($bd_host, $bd_usuario, $bd_password);
  15.  
  16. mysql_select_db($bd_base, $con);
  17.  
  18. //variables POST
  19.  
  20.   $nom=$_POST['nombres'];
  21.   $nom1=$_POST['nombres1'];
  22.  
  23. if($nom!='')
  24. {//registra los datos del empleados
  25. $sql="INSERT INTO messages (estado,user_id) VALUES ('$nom','1')";
  26.  
  27. mysql_query($sql,$con);
  28. }
  29. else
  30. {
  31. $sql="INSERT INTO coment (estado) VALUES ('$nom1')";
  32. mysql_query($sql,$con);
  33. }
  34.  ?>
Nose si lo hago bien o que es lo que le pasa pero estaría muy agradecido si me ayudaraís gracias un saludo.
  #2 (permalink)  
Antiguo 19/04/2013, 05:16
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comentarios comet

Nadie puede ayudarme?? gracias un saludo.
  #3 (permalink)  
Antiguo 29/04/2013, 04:01
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comentarios comet

exactamente e analizado lo que kiero acer y sería un comentario con comentarios y lo que quiero que salgan al istante son los comentarios de ese comentario, como podria acerlo porque tambien tendrian un campo de comentario para segir comentando y si lo ago como lo de arriba no me deja escribir xq se actualiza, espero que me puedan dar ideas. un saludo.
  #4 (permalink)  
Antiguo 29/04/2013, 11:01
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: Comentarios comet

Comet. longPolling, websockets, son los métodos para mantener conexiones abiertas con el server, en tu caso más bien es una petición con ajax que se repite ciclicamente. Por lo que veo al hacer esto
Código:
        window.setTimeout(function(){
         a = new comet();      
        });
y no pasar un parámetro de tiempo al setTimeout(), eso se te ejecuta sin pausa.
Código:
        window.setTimeout(function(){
         a = new comet();      
        },1000);
Como las tecnologías que te mencioné requieren configuraciones en el server que no siempre están disponibles, yo utilizo esto, analizalo por si te sirve
http://emprear.com/polling/
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 30/04/2013, 03:22
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comentarios comet

gracias x el aporte lo mirare haber si me vale pero tiene buena pinta. esto entonces no recarga la pag?? o como funciona el codigo?? si yo pensaba que eso era comet ya que lo mire en una web y ponia que era tal cosa. un saludo y gracias.
  #6 (permalink)  
Antiguo 30/04/2013, 11:10
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: Comentarios comet

Cita:
Iniciado por edie8 Ver Mensaje
gracias x el aporte lo mirare haber si me vale pero tiene buena pinta. esto entonces no recarga la pag?? o como funciona el codigo?? si yo pensaba que eso era comet ya que lo mire en una web y ponia que era tal cosa. un saludo y gracias.
No recarga la página solo un elemento. Basicamente es Ajax con una petición cada x segundos, la diferencia es que el div no se recarga a menos que haya cambios en la BD y se incluye la notificación.
Probala y lee las instrucciones, es de esas aplicaciones que la mejor forma de entenderlas es viendo la ejecución. Creo que en algún lado lo comento, pero por las dudas repito. El ejemplo no hace validaciones muy estrictas y además no es la idea hacer peticiones cada intervalos muy breves, le puse 5 segundos solo a efectos de la demostración, 30, 45 segundos es un tiempo razonable

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 06/05/2013, 04:16
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comentarios comet

muchas gracias creo que si que me vale y funciona a la perfección. un saludo.
  #8 (permalink)  
Antiguo 07/05/2013, 07:33
 
Fecha de Ingreso: noviembre-2011
Mensajes: 516
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Comentarios comet

tengo un problema con el codigo de php-lonpolling es tuyo?? es que lo modifique y me sale cada dos por tres el mensaje de notificacion y se refresca nose que debi modificar mal... este es el codigo que modifique:
Código PHP:
Ver original
  1. <?php
  2. include('conectar.php');
  3. $consulta = "SELECT * FROM polling_demo ORDER BY id_polling DESC";
  4. $req = mysql_query($consulta);
  5. $res = mysql_num_rows($req);
  6. $_SESSION['reg_actuales'] = $res;
  7. while($row = mysql_fetch_array($req)){
  8.         $id = $row['nombre'];
  9.         $mensaje =$row['mensaje'];
  10.         $comen=$row['id_polling'];
  11.         $usuari="SELECT * FROM usuarios where id='$id'";
  12.         $resp=mysql_query($usuari);
  13.         while($rew=mysql_fetch_array($resp))
  14.         {
  15.         $nombre=$rew['usuarios'];
  16.         echo '<div style="background:#76C0FE; border-bottom:solid #FFFFFF;">';
  17.         echo"$id - $nombre - $mensaje<br />\n";
  18.         $consul="Select * from comentarios where id_comentario='$comen'";
  19.         $re=mysql_query($consul);
  20.         while($raw=mysql_fetch_array($re))
  21.         {
  22.             echo $raw['comentario']."<br>";}
  23.         ?><form action="<?php $_SERVER['SCRIPT_NAME']; ?>" method="post">
  24. <input type="hidden" value="1" name="insertar1" />
  25. <input type="hidden" value="2" name="id" id="nombre" class="texto" /><br />
  26. <input type="hidden" value="<?php echo "edgg"?>" name="nombre"/>
  27. <label for="mensaje">mensaje</label><input type="text" value="" name="mensaje" id="mensaje" class="texto" /><br />
  28. <label><!-- fix --></label><input type="submit" name="procesar" value="Insertar nuevo registro" class="procesar" />
  29. </form><?php
  30.         echo "</div>";
  31.         }
  32.     }
  33.  
  34. ?>
Código PHP:
Ver original
  1. <?php session_start(); ?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <title>Polling Ajax/Php :: insertar registros</title>
  7. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  8. <style type="text/css">
  9. /*<![CDATA[*/
  10. body{font-size: 10pt;font-family: verdana, sans-serif;color: #332B22;}
  11. .texto{width: 180px;}
  12. label{display: inline-block; width: 100px;}
  13. .procesar{background-color:#552922; margin: 10px 0; color: #FFFFFF; width: 185px;}
  14. .procesar:hover{background-color:#8E2E04; cursor: pointer;}
  15. h1{font-size: 14pt; font-weight: bold;}
  16. /*]]>*/
  17. </style>
  18. </head>
  19. <body>
  20. <h1>Polling Ajax/Php :: insertar registros</h1>
  21. <div>
  22. <form action="<?php $_SERVER['SCRIPT_NAME']; ?>" method="post">
  23. <input type="hidden" value="1" name="insertar" />
  24. <input type="hidden" value="2" name="id" id="nombre" class="texto" /><br />
  25. <input type="hidden" value="<?php echo "edgg"?>" name="nombre"/>
  26. <label for="mensaje">mensaje</label><input type="text" value="" name="mensaje" id="mensaje" class="texto" /><br />
  27. <label><!-- fix --></label><input type="submit" name="procesar" value="Insertar nuevo registro" class="procesar" />
  28. </form>
  29. </div>
  30. <?php
  31. if(isset($_POST['insertar'])){
  32. include('conectar.php');
  33. $nombre = str_replace('|',' ', $_POST['id']);
  34. $user= str_replace('|',' ', $_POST['nombre']);
  35. $mensaje = str_replace('|',' ', $_POST['mensaje']);
  36. $consulta = "INSERT INTO polling_demo (nombre, mensaje) VALUES ('$nombre', '$mensaje')";
  37. $req = mysql_query($consulta);
  38. $consulta = "SELECT * FROM polling_demo ORDER BY id_polling DESC";
  39. $req = mysql_query($consulta);
  40. $res = mysql_num_rows($req);
  41. file_put_contents('control_cambios.txt', "$res|$nombre|$mensaje|$user|" . $_SESSION['reg_actuales'], LOCK_EX);
  42. }
  43. elseif(isset($_POST['insertar1'])){
  44.     include('conectar.php');
  45.     $nombre = str_replace('|',' ', $_POST['id']);
  46.     $user= str_replace('|',' ', $_POST['nombre']);
  47.     $mensaje = str_replace('|',' ', $_POST['mensaje']);
  48.     $consulta = "INSERT INTO comentarios (id,id_logueado,id_comentario, comentario) VALUES ('null','$nombre','1', '$mensaje')";
  49.     $req = mysql_query($consulta);
  50.     $consulta = "SELECT * FROM comentarios ORDER BY id DESC";
  51.     $req = mysql_query($consulta);
  52.     $res = mysql_num_rows($req);
  53.     file_put_contents('control_cambios.txt', "$res|$nombre|$mensaje|$user|" . $_SESSION['reg_actuales'], LOCK_EX);
  54. }
  55. ?>
  56.  
  57. </body>
  58. </html>
gracias de nuevo un saludo.

Etiquetas: ajax, campos, comentarios, formulario, funcion, html, input, js, php, select
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 15:35.