Foros del Web » Programando para Internet » Javascript »

Problema al combinar php y javascript

Estas en el tema de Problema al combinar php y javascript en el foro de Javascript en Foros del Web. Hola a todos Estoy haciendo un pequeño programa en el que necesito combinar javascript con php. Y llego a un problema que no se cómo ...
  #1 (permalink)  
Antiguo 01/03/2013, 03:59
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 3
Problema al combinar php y javascript

Hola a todos

Estoy haciendo un pequeño programa en el que necesito combinar javascript con php.

Y llego a un problema que no se cómo resolver. Agradecería la ayuda de alguien que pudiera darme ideas de cómo solucionarlo.

Os cuento.

En el pequeño programa escribo varios parrafos en pantalla.

Para ello utilizo unos eventos onclick de javascript con un contador.

Despues pongo unas imagenes (unas flechas) para pasar al programa anterior o siguiente. También con eventos onclick de javascript y gracias a la ayuda recibida por aquí (muchas gracias)

Y justo antes de saltar/enlazar con el programa anterior o siguiente necesito hacer una grabación de datos en la base de datos.

Esta grabación de datos la tengo ya hecha en php.

Pero no sé como hacer que esta última parte, la grabación de datos, se haga al final del programa, justo antes de saltar al siguiente o anterior programa y no antes.

Mi pregunta :

¿Cómo se puede hacer para que una parte del programa php (escritura en base de datos) se haga al final, despues de que el usuario haya leido los distintos parrafos y los onclick de javascript hayan incrementado el contador?

¿Algún consejo o idea?

Muchas gracias
  #2 (permalink)  
Antiguo 01/03/2013, 04:52
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema al combinar php y javascript

Buenas.

No acabo de entender bien la mecánica que explicas...

Según entiendo, tu muestras una página con flechas, y al pulsar el contenido cambia.

Al cambiar el contenido quieres que la página interactue con una base de datos. ¿Es así?

Si es así, lo que tendrías que hacer sería una llamada AJAX a la página PHP que interactua con la base de datos, y después cambiar el contenido.

Espero te ayude.

Saludos.
  #3 (permalink)  
Antiguo 01/03/2013, 05:29
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Problema al combinar php y javascript

Gracias por tu respuesta DoHITB

*

Aunque no es eso lo que intento hacer.

Intento explicarme mejor.

Quiero poner un texto en la pantalla. Pongamos que es la Pagina2.php. Son varios parrafos. Un contador en javascript los va contando.

Cuando ese contador llega a un valor (que se han visto ya todos los parrafos) pongo en la pantalla unas flechas adelante atras, para saltar al programa siguiente o al anterior, que serían Pagina3.php y Pagina1.php, respectivamente.

Justo antes de poner las flechas y de que pueda producirse el salto adelante atras quiero grabar unos datos en la base de datos.

En concreto guardar que se ha visto la Pagina2.php

Luego ya el usuario pincha encima de las flechas y salta al otro .php

¿Alguna idea?

Gracias por la ayuda

Última edición por Loboblanco2; 01/03/2013 a las 05:35
  #4 (permalink)  
Antiguo 01/03/2013, 05:41
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema al combinar php y javascript

Vale, ahora me queda mucho más claro.

En principio (creo) que si desde JS quieres acceder a una base de datos no tendrás otra que usar AJAX.

Entonces, deberías hacer algo como:

Código:
function cuentaParrafos(){
 if(contador == max){
   muestraFlechas();
 }
}

function muestraFlechas(){
  doAJAX();//hacemos una llamada AJAX
  document.getElementById('')...//muestras las flechas
}
Supongo que tus funciones serán diferentes a estas, lo he hecho así para que veas un poco a grosso modo la idea.

Entonces, si lo que quieres es que (literalmente) HASTA que no se hayan grabado los datos NO mostrar las flechas, podrías hacer que el AJAX fuera asincrónico.

De esta manera, el script "se detiene" hasta que la petición AJAX ha concluído.

Usar AJAX de esa manera es útil para estos casos. Para ello, cuando hagas el request tienes que hacer algo como:

Código:
req.open("POST", url, false);
Ese "false" indica que espera a que termine la ejecución.

Supongo que eso te ayudará.

Saludos
  #5 (permalink)  
Antiguo 01/03/2013, 05:55
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Problema al combinar php y javascript

De nuevo muchas gracias DoHITB

Como me temía, ahora que ya empezaba a manejarme con php y javascript, voy a tener que ponerme a estudiar Ajax

En fin, supongo que lo conseguiré.

Y que no hay forma de hacer esto que quiero hacer solo con php, html y javascript.
  #6 (permalink)  
Antiguo 01/03/2013, 06:17
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 1 mes
Puntos: 33
Respuesta: Problema al combinar php y javascript

Bueno, AJAX es Asyncronic JavaScript And XML, por lo que sabiendo JS te servirá...

Verás, yo leí un libro de JS, AJAX y PHP, y venía con un CD que tenía funciones hechas para lanzar AJAX. Te dejo aquí las funciones y te explico un poco:

Código:
myreq=new AJAXREQ(); //creamos un objeto AJAXREQ

//constructor para AJAXREQ
function AJAXREQ(){
    this.req=createREQ();
    this.onreadystatechange=null;
    this.check=function(){if(!this.req){/*sitio sin ajax*/}};
    this.check();
}

//función que crea el request
function createREQ(){
  try{
    req=new XMLHttpRequest();
  }catch(err1){
    try{
      req=new ActiveXObject("Msxml2.XMLHTTP");
    }catch (err2){
        try{
          req=new ActiveXObject("Microsoft.XMLHTTP");
        }catch (err3){
          req=false;
        }
      }
    }
  
  return req;
}

//función que envía el request
function requestPOST(url, query, req){
  req.open("POST", url, false);
  req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  req.send(query);
}

//función para lanzar AJAX
function doAjax(url,query,getxml,dtc,ev){
  myreq.req.onreadystatechange=function(){
    if(myreq.req.readyState==4){
      if(myreq.req.status==200){
        var item=myreq.req.responseText;

        if(getxml==1){
          item=myreq.req.responseXML;
        }

         print(item, dtc,ev);
       }
     }else{
       printWait(dtc,0);
     }
   };

  requestPOST(url, query, myreq.req);
}

//función para evaluar el resultado
function print(item, dtc, ev){
  if(ev==1){
    eval('('+item+')');
  }else{
    document.getElementById(dtc).innerHTML=item;
  }
}

//función que muestra mensajes de espera
function printWait(dtc,i){
  if(printMessage(i)!=document.getElementById(dtc).innerHTML){
    document.getElementById(dtc).innerHTML='';
    document.getElementById(dtc).innerHTML=printMessage(i)
  }
}

//función para mostrar mensajes
function printMessage(i){
  l='';
  l=navigator.userLanguage;

  if(l==null){
    l=navigator.language;
  }

 t=['Cargando...', 'Su navegador no permite AJAX', 'Error inesperado'];

  if(l.indexOf('es') == -1){
    t=['Loading...', "Your browser doesn't allow AJAX", 'Unexpected error'];
  }

  return ''; //aquí pones un código html, como una imagen y el texto "t[i]"
}
Entonces, para hacer una llamada AJAX, deberás hacer algo así:

Código:
doAjax('url_de_destino', 'datos_post', 0, 'div_a_cambiar', 0);
Te comento: "url_de_destino" sería, en este caso, la página PHP que te maneja la base de datos. "datos_post" serían los datos post (si los hay) que tuvieras que mandar. El formato es el mismo que se usa para los datos GET (var=val&var2=val2) sin el "?". "div_a_cambiar" puede ser un elemento que no exista (será un id de elemento), aunque ahora te comento una cosa...

He pensado que lo que podrías hacer sería, aprovechando que AJAX puede arrojar resultados, hacer lo siguiente:

- Haces la llamada AJAX
- Dentro del PHP que maneja la base de datos, haces la gestión
- Retornas el HTML correspondiente a las flechas
- ¡Voliá!

Yo uso estas funciones "por defecto" para hacer AJAX. Cualquier cosa no dudes en comentar!

Saludos!

---

EDITO:

Hay otra forma de hacerlo sin AJAX, pero es algo más "alternativo".

Sería hacer lo siguiente:

Al llegar el momento de gestionar el tema de las flechas, mediante JS creas un form con "action=paginaQueGestionaLaBaseDeDatos.php", pasándole los datos necesarios.
Entonces le haces un submit(), y ahí gestionas la base de datos, y reenvías a la página anterior con algún tipo de flag para que muestre las flechas...

Como te digo es muy "alternativo"... pero si lo ves viable y no quieres usar AJAX... xD
  #7 (permalink)  
Antiguo 01/03/2013, 06:21
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Problema al combinar php y javascript

Muchas, muchas gracias DoHITB

Leeré con detalle lo que me comentas y haré pruebas.

Si tengo problemas lo comentaré por aquí para que los que sabeís más que yo me echeís una mano, agradeciendoslo mucho
  #8 (permalink)  
Antiguo 03/03/2013, 06:15
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 6 meses
Puntos: 3
Respuesta: Problema al combinar php y javascript

De nuevo muchas gracias DoHITB

Veré también con detenimiento la segunda forma que me comentas
  #9 (permalink)  
Antiguo 03/03/2013, 08:29
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: Problema al combinar php y javascript

Si tus diferentes páginas php leen el contenido de la base de datos, podés evitar el uso de Ajax, ya que en principio, no necesitas evitar la recarga, porque de hecho te vas a otra página
hay un punto en que se te genera una flecha "siguiente", esa flecha llevará un evento de javascript

var contador= 0;

// los clicks en los diferentes párrafos incrementan tu contador

function irApagina(){
window.location.href = "pagina2.php?cuenta=" + contador;
}



Ahora , página 2 recibe por get cuenta, utiliza este valor para hacer un update a la base de datos, luego generás el cóntenido de la pagina 2 definiendo los valores iniciales de las variables de javascript para pasarlas a la página 3

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: combinar, php
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:02.