Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Ajax php y mysql

Estas en el tema de Ajax php y mysql en el foro de PHP en Foros del Web. Hola les cuento, tengo una pagina digamos index.php, que muestra una serie de imágenes, las cuales tienen un enlace <a href="pagina_foto.php?id=xxx"> y en esta pagina_foto.php, ...
  #1 (permalink)  
Antiguo 11/04/2014, 11:15
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Ajax php y mysql

Hola les cuento, tengo una pagina digamos index.php, que muestra una serie de imágenes, las cuales tienen un enlace <a href="pagina_foto.php?id=xxx"> y en esta pagina_foto.php, aparece toda la información de la foto, esta pagina tendría que tener funcion ajax que muestra inmediatamente la información que se va actualizando en mysql, el problema me surge, que no consigo entrar en la pagina_foto con el id en GET y que se actualice cada x segundos. si que me muestre los cambios al actulizar pero no automáticamente con ajax.
me explico, o lo hago con manzanas?
Millones de gracias si alguien me ayuda.
  #2 (permalink)  
Antiguo 11/04/2014, 11:23
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

1 Kilo de manzanas por favor.

Veamos, tienes un index.php en el que hay imagenes, una galeria.
Luego envian a la página "página foto" en la que se muestran ¿datos asociados con la foto? ...como por ejemplo una imagen de un paciente y si pinchas ves nombre, edad, etc. me imagino.

Quien actualiza la infomación en la base de datos? eso se hace en otro sitio o ese mismo pagina_foto tiene un formulario que se encarga?

Para que es el ajax realmente? para actualizar cada 10 segundos los datos que se muestran con los mas nuevos de la bd?

siento las preguntas tontas, pero quiero tener el concepto claro
  #3 (permalink)  
Antiguo 11/04/2014, 11:30
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Preguntas tontas, para nada.
Bien, vamos a ello, (primer cuarto de kilo)
efectivamente tengo un index que muestra una serie de imágenes que enlazan con la pagina que contiene la información de estas, foto de, comentario, dirección de la foto, votos, ultimo comentario, etc etc.
bien ahora pongámonos en situación, imagina que tu estas viendo la pagina de la foto "X" y en ese instante oto usuario marca una ubicación para esta, pues me gustaría que tu vieses la información de ese usuario sin tener que actualizar.
Te preparo otro cuarto de kilo?
  #4 (permalink)  
Antiguo 11/04/2014, 11:42
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

jajaja no, está bien.

Para hacerlo tiempo real del todo necesitarias otro lenguaje, como node...o usar sockets php, como ratchet (rollazo)

Peeeeero hay una solución que en 10 minutos se pone. Y se llama short polling.
Ojo, está función añade una carga adicional a tu servidor que se multiplica expotencialmente por cada usuario que la visita simultaneamente, pero es lo que hay.

La técnica es la siguiente, un código jquery o ajax o como quieras llamarlo preguntará de manera asíncrona cada 10 segundos al servidor si hay informaciones nuevas, el responderá si o no.

Vas a hacer unos cuantos cambios. ¿Puedes subir el archivo pagina_foto?

Te lo explico por encima: Vas a tener que separar la función que saca los datos del html, en la base de datos mysql vas a añadir una columna de ultima modificacion, que será un DATETIME.

La función debe reconocer si alguien la abre normal o mediante AJAX, para eso, yo tengo un código que uso en mis webs

Código PHP:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
            
$this->is_ajax TRUE;
        else
            
$this->is_ajax FALSE
Ahora, si eso devuelve TRUE, tu pagina_foto.php tiene que hacer la consulta a la base de datos y devolver los datos en formato JSON. Si no es true pues que siga como siempre.

El código ajax es, pues un jquery que saco ahora, pero tiene que ser personalizado a tus necesitades, pues si reconoce cambios debe cambiar el DOM con las cosas nuevas.

Otra cosa, si no quieres volver a tocar, se me acaba de ocurrir que puedes crear un archivo nuevo que tenga simplemente el IF de arriba, la query que saca la información y devuelva el resultado en formado json. Es menos limpio porque se duplica la query pero lo tendrás terminado antes.

Código HTML:
(function pollServerForNewMail() {
  $.getJSON('/poll_newmail.php', function (response) {
    if (response.newMail) {
      alert(
        "You have received a letter, good sir. " + 
        "I will have a quick lie-down and be on my way shortly."
      );
    }
    setTimeout(pollServerForMail, 5000);
  });
}());
Esta es una funcion jquery que muestra cada 5 segundos un alert si recibe como respuesta (en formato json ) un array response->newmail->true.
  #5 (permalink)  
Antiguo 11/04/2014, 11:45
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

Cita:
Iniciado por Qazser Ver Mensaje
jajaja no, está bien.

Para hacerlo tiempo real del todo necesitarias otro lenguaje, como node...o usar sockets php, como ratchet (rollazo)

Peeeeero hay una solución que en 10 minutos se pone. Y se llama short polling.
Ojo, está función añade una carga adicional a tu servidor que se multiplica expotencialmente por cada usuario que la visita simultaneamente, pero es lo que hay.

La técnica es la siguiente, un código jquery o ajax o como quieras llamarlo preguntará de manera asíncrona cada 10 segundos al servidor si hay informaciones nuevas, el responderá si o no.

Vas a hacer unos cuantos cambios. ¿Puedes subir el archivo pagina_foto?

Te lo explico por encima: Vas a tener que separar la función que saca los datos del html, en la base de datos mysql vas a añadir una columna de ultima modificacion, que será un DATETIME.

La función debe reconocer si alguien la abre normal o mediante AJAX, para eso, yo tengo un código que uso en mis webs

Código PHP:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')
            
$this->is_ajax TRUE;
        else
            
$this->is_ajax FALSE
Ahora, si eso devuelve TRUE, tu pagina_foto.php tiene que hacer la consulta a la base de datos y devolver los datos en formato JSON. Si no es true pues que siga como siempre.

El código ajax es, pues un jquery que saco ahora, pero tiene que ser personalizado a tus necesitades, pues si reconoce cambios debe cambiar el DOM con las cosas nuevas.

Otra cosa, si no quieres volver a tocar, se me acaba de ocurrir que puedes crear un archivo nuevo que tenga simplemente el IF de arriba, la query que saca la información y devuelva el resultado en formado json. Es menos limpio porque se duplica la query pero lo tendrás terminado antes.

En la query del archivo nuevo, tienes que añadir una condición WHERE que dice que lo que busque sea lastmodified menor a 5 segundos

Código HTML:
(function pollServerForNewMail() {
  $.getJSON('/poll_newmail.php', function (response) {
    if (response.newMail) {
      alert(
        "You have received a letter, good sir. " + 
        "I will have a quick lie-down and be on my way shortly."
      );
    }
    setTimeout(pollServerForMail, 5000);
  });
}());
Esta es una funcion jquery que muestra cada 5 segundos un alert si recibe como respuesta (en formato json ) un array response->newmail->true.
  #6 (permalink)  
Antiguo 11/04/2014, 15:26
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

OOOOUUUYEAAAA.
Pues que no consigo encontrar la solución, e buscado y buscado pero nada que lo consigo.
por el método que te comente me quede muy cerca de las necesidades. Pero nasti de plasti, seguiré indagando pues me parece que lo que mas se acerca lo que necesito es el metodo ajax como te comente, y si lo que me comentas incrementa la carga del servidor, pruuffffffffffff mal asunto.
mira esto que te dejo se podria adaptar si consiguiera que se recargara cada x tiempo, que por separado lo hace pero no lo consigo junto

Parte que recibe por GET


<html>
<head>
<script>
function showHint(str)
{
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlht tp.responseText;
}
}
xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>

<p><b>Start typing a name in the input field below:</b></p>
<form>
First name: <input type="text" onkeyup="showHint(this.value)">
</form>
<p>Suggestions: <span id="txtHint"></span></p>

</body>
</html>



y aki la parte que se actualiza cada x.
var seconds = 2; // el tiempo en que se refresca
var divid = "contenido"; // 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
}


El problema me surje que no se mezclarlos, vamos ni tampoco si se puede.

  #7 (permalink)  
Antiguo 11/04/2014, 15:36
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

y este codigo que es? me he perdido


tan fácil que te lo deje....T.T

Última edición por Qazser; 11/04/2014 a las 15:45
  #8 (permalink)  
Antiguo 11/04/2014, 15:50
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Son dos ejemplos diferentes.
La primera parte es un ejemplo de mostrar datos con ajax. se cargan en un imput se envía a la parte php y muestra los resultados.
ejemplo: [URL="http://www.w3schools.com/Php/php_ajax_php.asp"]http://www.w3schools.com/Php/php_ajax_php.asp[/URL]

la segunda parte muestra si se cambia algo de los datos de una pagina que no es la que se esta visualizando, digamos yo veo una pagina en blanco, ingreso un dato en phpmyadmin y salen solos en la pagina.
ejemplo: [URL="http://vcomputadoras.com/usa-ajax-para-refrescar-un-tag-div/"]http://vcomputadoras.com/usa-ajax-para-refrescar-un-tag-div/[/URL]

bien pues lo que yo necesito es poner un dato en el input del primer ejemplo y que me muestre el resultado, y a su vez se actualice como pasa en el segundo ejemplo.

vamos que lo ideal seria el primero pero actualizándose.

lógicamente esto es diferente a lo que yo busco, pero se podría adaptar.
  #9 (permalink)  
Antiguo 11/04/2014, 15:52
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

mmmmm esto....mmmmm

Y la solución que te dejé yo?
  #10 (permalink)  
Antiguo 11/04/2014, 15:53
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Lo siento pero es que no se como adaptarlo, me pasas un kilito de manzanas please
  #11 (permalink)  
Antiguo 11/04/2014, 15:56
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Yo llevo varios años en el tema de la programación, pero aprendo a base de búsquedas, probar, horas de ordenata, y las partes técnicas no las pillo.
vamos que soy como un ladrillo
  #12 (permalink)  
Antiguo 11/04/2014, 15:59
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

No te preocupes, por algo es un foro de soporte...Este es mi primer dia aquí xd

Primer paso

1.Creas la columna en la base de datos que te decia
2.Copias y duplicas el archivo de imagen_info.php, lo llamaremos imgjson.php
3.En imgjson cambias la query para añadir que busque donde la fecha sea en menos de los últimos 10 segundos, le quitas la parte del html y le dices que lo saque en formato JSON...comando json_encode();

Ahora en el archivo de imagen_info
1. Incluyes el archivo de jquery
2.incluyes el codigo que te pasé antes para el ajax

Con el último paso, que seria actualizar los campos del html con las novedades, te ayudo cuando llegues hasta aquí

Cualquier paso que te pierdas avisa y te ayudo

Última edición por Qazser; 11/04/2014 a las 16:12
  #13 (permalink)  
Antiguo 12/04/2014, 01:47
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Y si utilizo este método y la imagen que se actualiza es otra diferente a la que estamos visualizando, no cambiara se mezclan los datos, si la que se actualiza es la WHERE (ultima actualización)
  #14 (permalink)  
Antiguo 12/04/2014, 02:05
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 5 meses
Puntos: 123
Respuesta: Ajax php y mysql

Cita:
Iniciado por keko32 Ver Mensaje
Y si utilizo este método y la imagen que se actualiza es otra diferente a la que estamos visualizando, no cambiara se mezclan los datos, si la que se actualiza es la WHERE (ultima actualización)
No se tiene por que mezclar si haces la consulta correcta

WHERE id_img

Y consultas que si se ha modificado el campo actualización de esa imagen en concreto
  #15 (permalink)  
Antiguo 12/04/2014, 04:32
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

Exacto, como dice xeri...Yo no dije que quites el where y pongas el mio, sino que añadas una condicion más a tu query que es por debajo de 10 segundos...así el archivo php nuevo te devolverá siempre si hay o no hay datos de esa imagen.

Una cosa....Yo mi sugerencia de hacerlo paso por paso a "mi manera" no es por dar órdenes, no me entiendas mal. Pero has puesto 2 códigos de ajax en javascript puro que hasta a mi me cuesta seguirlo, y yo prefiero que hagas código corto, eficiente y limpio que TU entiendas para en un futuro volver a utilizarlo. Si mezclas códigos pero no sabes su funcionamiento, mas que programas haz hecho copy paste al voleo...y pienso que es mejor aprender con cada paso.

Enves de hacer 1 biblia para un ajax, pues 4 lineas en jquery estan mejor y mas entendible.

Avisa cuando vuelvasa estar en duda con algo.

Última edición por Qazser; 12/04/2014 a las 04:42
  #16 (permalink)  
Antiguo 12/04/2014, 08:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Ordenes para nada, pe parece que lo que dices es una verdad como un templo.
Vale me pongo manos a la obra, pero......
no lo veo o no lo entiendo, la condición de los 10 segundos? ande andará?
WHERE id = %s AND lastmodified<subtime(now(),'0:0:10')
estaría así?
y otra cosa como lo saco en formato json?
  #17 (permalink)  
Antiguo 12/04/2014, 09:15
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Madre del amor hermoso.
a ver en mi archivo copio
Código PHP:
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'
            
$this->is_ajax TRUE
        else 
            
$this->is_ajax FALSE
agrego

Código PHP:
<script type="text/javascript" src="../js/foto.js"></script> 
en la copia de foto.php osea en fotojson.php le pongo la condicion de los 10 segundos.

y en foto.js

Código PHP:
(function actualiza() {
  $.
getJSON('../online/foto.php', function (response) {
    if (
response.newMail) {
      
alert(
        
"You have received a letter, good sir. " 
        
"I will have a quick lie-down and be on my way shortly."
      
);
    }
    
setTimeout(actualiza5000);
  });
}()); 
  #18 (permalink)  
Antiguo 12/04/2014, 09:21
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

Voy a hacerte una función para que lo veas por encima

Código PHP:
<?php

function update_ajax($tu_id)
{
    
    if(!isset(
$_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')  
       return 
false;


     
//aqui haces la consulta sql -- Limit 1 porque buscamos 1 solo perfil
    
$mysqli->query("Select * FROM ... WHERE id='$tu_id' AND lastmodified > (now() - INTERVAL 10 SECOND) LIMIt 1 ");
    
    
//Comprobamos si hubo un cambio
    
if ($mysqli->num_rows == 0) return false;
    
    
//Guardamos en $row el resultado de la query, si hubo un cambio
    
$row $mysqli->fetch_assoc();
    
    
//Imprimimos en pantalla el array del resultado
    
echo json_encode($row);
}
Te lo he dejado comentado...una cosa

Yo en la query supuse que guardas todas las informaciones en 1 fila, si son varias puedes tienes que pasarle con un while los datos de la consulta mysql a la variable row, y debes quitar el limit 1, no se como tienes tu base de datos...pero para comenzar esto es suficiente.



EDITO:

Con respecto a tu segundo mensaje:

index.php la dejas tal cual
en fotojson.php metes la funcion que te pase y la adaptas a tu gusto
en pagina_foto.php metes el archivo js que creastes Y añades esta linea por encima
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>

Última edición por Qazser; 12/04/2014 a las 09:29
  #19 (permalink)  
Antiguo 12/04/2014, 09:30
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Nada que no lo pillo, y cada vez me estoy liando mas, gracias por tu tiempo, pero no voy a ser capaz de hacerlo, si ya me liaba ahora tengo un taco de flipar.
zapatero a tus zapatos, por que no me entra ni con embudo.
  #20 (permalink)  
Antiguo 12/04/2014, 09:31
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

pacieeeencia, ve poco a poco.

Ánimos!!!!!!!

dime donde te lias..a lo mejor fui yo que puse demasiado muy resumido
  #21 (permalink)  
Antiguo 14/04/2014, 09:18
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql


Intente entrar en el mundo node.js
Intentando con los datos que me habeis pasado
No lo consigo de ninguna de las maneras
  #22 (permalink)  
Antiguo 14/04/2014, 09:55
 
Fecha de Ingreso: abril-2014
Ubicación: Canarias!
Mensajes: 150
Antigüedad: 9 años, 11 meses
Puntos: 10
Respuesta: Ajax php y mysql

Y el código que te he dejado por MP? La parte del servidor te la habia dejado hecha practicamente =/

Nodejs ya es un mundo aparte
__________________
Pautas php:
No usar libreria mysql, usa mysqli; Separar siempre los controladores de la vista; Procedual es feo, ama los objetos
  #23 (permalink)  
Antiguo 29/04/2014, 03:37
 
Fecha de Ingreso: marzo-2012
Mensajes: 25
Antigüedad: 12 años
Puntos: 1
Respuesta: Ajax php y mysql

Lo he conseguido resolver un poco a capón. pero para las funciones que necesito me va perfecto, si alguien tiene el mismo problema se lo podría aclarar.

Etiquetas: ajax, mysql
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 16:34.