Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Ejecutar código php desde jquery

Estas en el tema de Ejecutar código php desde jquery en el foro de Jquery en Foros del Web. Buenas, Me explico. Tengo varias imágenes en una página. Al hacer click en una de ellas, quiero que aparezca una pantalla encima, con un pase ...
  #1 (permalink)  
Antiguo 25/11/2014, 12:07
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 11 meses
Puntos: 4
Ejecutar código php desde jquery

Buenas,
Me explico. Tengo varias imágenes en una página. Al hacer click en una de ellas, quiero que aparezca una pantalla encima, con un pase de fotos.

Lo que hago es lo siguiente:
Código HTML:
Ver original
  1. <img class="wowFoto" id="wowFoto1" src="foto1.jpg" alt="aa" title="aa"/>

En jquery controlo el click a la imagen, y quiero llamar al fichero php, indicándole las fotos para el pase:
Código Javascript:
Ver original
  1. $(".wowFoto").click(function() {
  2.             var foto1 = $("#wowFoto1").attr("src");
  3.             var foto2 = '#' + $("#wowFoto2").attr("src");
  4.             var foto3 = '#' + $("#wowFoto3").attr("src");
  5.             var foto4 = '#' + $("#wowFoto4").attr("src");
  6.             var foto5 = '#' + $("#wowFoto5").attr("src");
  7.             var foto6 = '#' + $("#wowFoto6").attr("src");
  8.             $.post('includes/inc_passe.php',{prmFotos:foto1+foto2+foto3+foto4+foto5+foto6},function(data){$(".wowFoto").html(data);})
  9.         })

Y en inc_passe.php, pongo mensajes de alerta, pero creo que no llega a ejecutarse.
Código PHP:
Ver original
  1. <?php
  2.         $param = $_REQUEST["prmFotos"];
  3.         $arrPrm = explode('#', $param);
  4.         $foto1 = $arrPrm[0];
  5.         $foto2 = $arrPrm[1];
  6.         $foto3 = $arrPrm[2];
  7.         $foto4 = $arrPrm[3];
  8.         $foto5 = $arrPrm[4];
  9.         $foto6 = $arrPrm[5];
  10.         echo "<br>foto1: ".$foto1."<br>";
  11.         echo "<br>foto2: ".$foto2."<br>";
  12.         echo "<br>foto3: ".$foto3."<br>";
  13.         echo "<br>foto4: ".$foto4."<br>";
  14.         echo "<br>foto5: ".$foto5."<br>";
  15.         echo "<br>foto6: ".$foto6."<br>";
  16.     ?>

Estoy empezando jquery, y no sé si realmente esta es la mejor manera de ejecutar el código php una vez echo el click a la imagen.
Gracias
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #2 (permalink)  
Antiguo 25/11/2014, 16:05
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Ejecutar código php desde jquery

No llegan los valores como esperas ya que no estás enviando una query string correcta. Por otra parte, es tan ineficiente lo que haces, pues, imaginemos que tuvieras 50 imágenes, ¿vas a declarar 50 variables? Definitivamente eso no tendría sentido.

Como lo que buscas obtener es un slider de imágenes, basta con que tengas a todas tus imágenes ya sea en el documento y ocultas exceptuando a la primera y con cada clic en alguna flecha o botón que hayas dispuesto para realizar el cambio de imágenes, o bien teniendo las rutas en un array y tomándolas una por una con cada clic en la flecha o botón. Así es como se suelen hacer los slider de imágenes y, además, evitas hacer constante en innecesarias consultas al lado del servidor para realizar algo que puedes hacer fácilmente en el lado del cliente.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 25/11/2014, 16:12
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 11 meses
Puntos: 4
Respuesta: Ejecutar código php desde jquery

Gracias Alexis88, es correcto lo que dices en cuanto al planteamiento. Pero sigo sin intender porqué el query string es incorrecto. Serías tan amable de decirme por qué?
Gracias.
__________________
Qué fácil cuando lo sabes y qué difícil cuando no
  #4 (permalink)  
Antiguo 25/11/2014, 20:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Ejecutar código php desde jquery

Por esto:

Código Javascript:
Ver original
  1. prmFotos:foto1+foto2+foto3+foto4+foto5+foto6

Lo más probable es que esté llegando algo similar a esto:

Código PHP:
Ver original
  1. $_POST['prmFotos']; //foto1.jpgfoto2.jpgfoto3.jpgfoto4.jpgfoto5.jpgfoto6.jpg

Fíjate en la manera en la que estás concatenando los valores, unos seguidos de otros, sin algo que los separe, llegando así una sola cadena al lado del servidor.

Si quieres enviar todos los valores, podrías hacerlo mediante un array:

Código Javascript:
Ver original
  1. var data = [];
  2.  
  3. $.each($("[id^=wowFoto]"), function(){
  4.     data.push($(this).prop("src"));
  5. });
  6.  
  7. $.post('includes/inc_passe.php', {
  8.     prmFotos: {
  9.         fotos: data
  10.     }
  11. }, function(data){
  12.     $(".wowFoto").html(data);
  13. });

Y, en tu archivo PHP, recibes al array de valores así:

Código PHP:
Ver original
  1. $_POST['prmFotos']['fotos'];

Al enviar al array a través de un objeto literal, este puede ser tratado en su forma original de array en el archivo PHP.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 26/11/2014, 01:39
 
Fecha de Ingreso: enero-2002
Ubicación: Sabadell
Mensajes: 565
Antigüedad: 22 años, 11 meses
Puntos: 4
Respuesta: Ejecutar código php desde jquery

Gracias Alexis88, pero finalmente he podido comprobar que sí que envio bien los valores. De hecho, están separados por el carácter '#'
Pero he de reconecer que es más elegante tu solución, por lo que lo estoy implementando. He tenido que cambiar algo, pues no me iba bien.

Ha quedado así:

Código Javascript:
Ver original
  1. $(".wowFoto").click(function() {
  2.             var data = [];
  3.             $.each($('.wowFoto'), function () {
  4.                 data.push(this.src);
  5.             });
  6.             $.post("inc_passe.php",{prmFotos:{fotos: data}}, function(data){$('.wowFoto').html(data);});
  7.         })

Y en inc_passe.php, lo siguiente:

Código PHP:
Ver original
  1. $fotos = $_POST["prmFotos"]['fotos'];

Pero pasa una cosa muy curiosa. Si en inc_fotos.php pongo un script para lanzar un mensaje con un literal fijo, sale a la primera, en cambio, si en vez del litoral, pongo un elemento del array fotos, sale al segundo click.
Es decir, partiendo de este script:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.         alert ("hola");
  3.         alert("<?php echo 'fotos: '.$fotos[0]?>");
  4.     </script>

Al primer click a la foto inicial, sale:
- un mensaje con "hola"
- un mensaje con "fotos: [
Al segundo click:
- un mensaje con "hola"
- un mensaje con "fotos: y la ruta

Alguien sabe por qué me va bien al segundo click y no al primero?

Gracias de nuevo.
__________________
Qué fácil cuando lo sabes y qué difícil cuando no

Última edición por mblascog; 26/11/2014 a las 05:35
  #6 (permalink)  
Antiguo 26/11/2014, 12:10
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Ejecutar código php desde jquery

Pues, no sé qué representa $fotos, pero, al parecer, lo que estás obteniendo es una cadena y no al array, la cual tendría una forma como esta: ["foto1.jpg", "foto2.jpg", "foto3.jpg"]. Cuando probé este código, en el archivo PHP, hice lo siguiente para imprimir los datos del array uno debajo de otro:

Código PHP:
Ver original
  1. echo implode("\r\n", $_POST['prmFotos']['fotos']);

Y el resultado en consola, era similar a este:
Código HTML:
Ver original
  1. http://localhost/foto1.jpg
  2. http://localhost/foto2.jpg
  3. http://localhost/foto3.jpg
  4. http://localhost/foto4.jpg

No sé si lo que recibes del archivo PHP es un array, un objeto JSON o uno de los elementos, de modo que es complicado saber por qué ocurre lo que te sucede. Podrías hacer un $_POST['prmFotos']['fotos'] en tu archivo PHP para saber qué información es la que llega.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: 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 21:33.