PHP - javascript dentro de php no funciona como desearía

 
Vista:
sin imagen de perfil

javascript dentro de php no funciona como desearía

Publicado por Toniet (4 intervenciones) el 09/11/2013 11:03:24
Hola amigos. Estoy haciendo una aplicación para gestión de una biblioteca. Llevo atascado unos días en un problemilla de mezcla de código PHP y JavaScript que me hace pensar no entiendo bien cómo interpreta php lo que se le manda.
Va un extracto y después comento:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<script>
    var varjs = "loquesea";    // Variable JavaScript.
</script>
 
// EJEMPLO 1 -OK-: La variable PHP recoge el valor de la variable JavaScript.
<?php
    $varphp1 = '<script>document.write(varjs);</script>';
    echo $varphp1;
?>
 
// EJEMPLO 2 -OK-: JavaScript muestra correctamente una variable PHP
<script>
    <?php $varphp2 = "ejemplo2";?>
    document.write('<?php echo $varphp2;?>');
</script>
 
// EJEMPLO 3 -ERROR-: El Navegador dispara un error JavaScript y no muestra el valor de $varphp3.
<script>
    <?php
        $varphp3 = '<script>document.write(varjs);</script>';
        echo $varphp
    ?>
</script>
El tercer trozo de código, como se observa es un script javascript que contiene un trozo php. A su vez, este trozo php contiene una variable php que quisiera que recogiera el valor de una variable JavaScript, por lo que le inserto las etiquetas <script></script>, pero esta última me cierra todo el script. Creo que es éso lo que sucede (se ve en la consola javascript del navegador) y también creo que no debería ser así. Lo que recibe PHP debería procesarse independientemente del HTML o JavaScript que hay fuera. Aquí no entiendo por qué no funciona igual que el trozo de código 1. ¿Alguno de ustedes podría explicarmelo?. Les agradezco mucho su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

javascript dentro de php no funciona como desearía

Publicado por xve (6935 intervenciones) el 09/11/2013 18:37:20
Hola Toniet, creo que tienes un error de concepto...

El código PHP se ejecuta únicamente en el servidor, nunca en el navegador.
El código JavaScript se ejecuta únicamente en el navegador, nunca en el servidor.

La única manera de enviar información del javascript al PHP o del PHP al javascript es refrescando la pagina o con ajax.

En el ejemplo1, defines una variable que contiene código de javascript, como podría contener código de java. En el momento que haces el echo $varphp1;, ese contenido es enviado al navegador el cual analiza y ejecuta.

En el ejemplo3, defines la variable varphp3 y haces un echo de varphp

Espero que te sirva... coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

javascript dentro de php no funciona como desearía

Publicado por Toniet (4 intervenciones) el 10/11/2013 03:10:09
Gracias xve por tu comentario. he visto lo mal que posteé el código. Lo posteo de nuevo junto con una imagen con los mensajes de la consola de errores y el HTML devuelto por el servidor (WampServer con Apache 2.4.4 y PHP 5.4.12).
Se ve claro cómo se produce un error en el ejemplo 3 que me tiene perplejo ya que el PHP no se interpreta como estoy habituado a verlo. Algo se me escapa. Adjunto también una imagen muy aclaratoria. Por favor, si no se ve la imagen al completo ya sabes.... boton derecho->ver imagen.
Gracias Amigos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>ERROR</title>
</head>
 
<body>
<p>
 
<!-- EJEMPLO 1 -OK-: La variable PHP recoge el valor de la variable JavaScript. -->
<script>
    var varjs1 = "ejemplo1"; // Variable JavaScript. 
</script>
<?php
    $varphp1 = '<script>document.write(varjs1);</script>';
    echo $varphp1;
?>
 
<!-- EJEMPLO 2 -OK-: JavaScript muestra correctamente una variable PHP. -->
<br />
<script>
    <?php
        $varphp2 = "ejemplo2";
    ?>
    document.write('<?php echo $varphp2;?>');
</script>
 
<!-- EJEMPLO 3 -ERROR-: El Navegador dispara un error JavaScript y no muestra el valor de $varphp3. -->
<br />
<script>
    var varjs3 = "ejemplo3";
    <?php
		// ¡¡ $varphp3 no recoge el valor de varjs3
		// porque el script se cierra !!
        $varphp3 = '<script>document.write(varjs3);</script>';
    ?>
    document.write(<?php echo $varphp3; ?>);
</script>
 
</p>
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

javascript dentro de php no funciona como desearía

Publicado por xve (6935 intervenciones) el 10/11/2013 09:58:15
Hola Toniet, ahora lo veo claro... muchas gracias...

El problema, es que el contenido de la instrucción document.write() tiene que ir entre comillas, y cualquier barra de dividir, tiene que ir escapada (con una contrabarra delante)..

1
2
3
4
5
6
7
8
9
<script>
    var varjs3 = "ejemplo3";
    <?php
        // ¡¡ $varphp3 no recoge el valor de varjs3
        // porque el script se cierra !!
        $varphp3 = '<script>document.write(varjs3);<\/script>';
    ?>
    document.write("<?php echo $varphp3; ?>");
</script>

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

javascript dentro de php no funciona como desearía

Publicado por Toniet (4 intervenciones) el 10/11/2013 22:41:43
Hola xve. Gracias por tus comentarios. Ya comprendo lo que está pasando. En ningún caso la variable PHP está tomando el valor de la variable JS. Sólo toma el valor literal de la cadena que se le asigna. El ejemplo 1 funciona porque al hacer el echo se inserta en la página el texto, que contiene <script>document.write(varjs);</script> y claro, muestra varjs, pero la variable PHP nunca tomó el valor de la variable JS. El ejemplo 2 no funciona porque el html generado resulta en un script dentro de otro script.
El tema del Post lo doy por solucionado. Sin embargo voy a abrir otro para ver si alguien me explica cómo pasar el valor de una variable JS a una variable PHP. Lo hago así para ceñirme al título del post.
Muchas gracias de nuevo y... espero verte en mi nuevo post !!!! jajajaj
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isau Miguel

javascript dentro de php no funciona como desearía

Publicado por Isau Miguel (14 intervenciones) el 11/11/2013 05:03:53
Explicame que quieres hacer pues hay muchas formas sencillas en que puedes interactuar entre php y js, tengo muchas funciones que utilizo en mi sistemas de facturacion, inventarios y colegios , explicame para poder ayudare
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

javascript dentro de php no funciona como desearía

Publicado por Elier (92 intervenciones) el 11/11/2013 16:43:46
Para poder pasar una variable (datos) desde javascript del cliente navegador (firefox, ie, chrome, etc) al servidor PHP tienes que hacer una llamada asincrona (AJAX), porque PHP lo que haces es devolver codigo HTML al navegador, eso incluye el tag <script></script> para que el navegador ejecute el codigo javascript, si desde ese script quiere pasar un valor a PHP tienes que hacer una llamada al servidor, porque el código se esta ejecutando en el navegador.

Mira este ejemplo usando Jquery

http://www.imaginanet.com/blog/usando-ajax-un-simple-ejemplo-con-php-y-jquery.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

javascript dentro de php no funciona como desearía

Publicado por Toniet (4 intervenciones) el 12/11/2013 03:16:41
Hola amigos. Gracias a ustedes he solucionado mi problema. Tengo una tabla con un listado de libros y al hacer click sobre uno de ellos consulto la BD para obtener todos sus datos. Es básico, pero se me complicó al mezclar JavaScript y PHP, que lo hice por primera vez. Terminé utilizando ajax. Me costó darme cuenta que también necesitaba json (no lo voy a preguntar todo...) Con los datos completos obtenidos muestro un popup.
Posteo un poco de código y unas imégenes. El código es mejorable, pero funciona. Disculpen que se descoloque el código posteado.
Sois buenísima gente. Gracias de nuevo.
El listado de libros:

El Popup tras hacer click en un libro:


1
2
3
4
5
6
7
8
9
10
11
12
/*
 *    Petición Ajax para obtener los datos del libro.
 *    numLibro es la variable JavaScript que debemos tratar en PHP.
 */
$.ajax ({
            url: "procesar_peticion_libro.php",
            data: {"numLibro": numLibro},
            type: "post",
            success:  function(jsonResponse){			// La respuesta viene en formato JSON.
                    procesarRespuestaAjax(jsonResponse);
            }
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 *    Función Callback para tratar la respuesta Ajax con los datos del libro en formato JSON.
 *    Los datos se insertan adecuadamente en el popup antes de ser mostrado.
 */
function procesarRespuestaAjax(jsonResponse){
        var libro = $.parseJSON(jsonResponse);		// Objeto JavaScript.
 
        var titulo                   = libro.titulo;
        var autor                   = libro.autor;
        var num                    = libro.num;
        var editorial             = libro.editorial;
        var isbn                    = libro.isbn;
        var etiquetas           = libro.etiquetas;
        var observaciones = libro.observaciones;
        var estante               = libro.estante;
        var seccion              = libro.seccion;
 
        // Datos del Libro insertados en la Tabla del Popup.
        $('td#tdvalorcampotitulo').text(titulo);				// Título.
        $('td#tdvalorcampoautor').text(autor);				// Autor.
        $('td#tdvalorcamponum').text(num);				// Número.
        $('td#tdvalorcampoeditorial').text(editorial);				// Editorial.
        $('td#tdvalorcampoisbn').text(isbn);						// ISBN.
        $('td#tdvalorcampoetiquetas').text(etiquetas);			// Etiquetas.
        $('td#tdvalorcampoobservaciones').text(observaciones);	// Observaciones.
        $('td#tdvalorcampoestante').text(estante);				// Estante.
        $('td#tdvalorcamposeccion').text(seccion);				// Sección.
	}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
/*
 *    'procesar_peticion_libro.php'
 *    Archivo de procesamiento para la petición Ajax solicitando los datos de un libro.
 *    Origen de la solicitud: 'page_listado_completo.php'
 */
include "inc/funciones_bd.php";
 
$num_libro = $_POST ['num_libro'];
 
$libro = db_obtener_datos_libro ($num_libro);		// Función definida en 'funciones_bd.php'.
 
$titulo                     = $libro ['titulo'];
$autor 			= $libro ['autor'];
$num  			= $libro ['num'];
$editorial 		= $libro ['editorial'];
$isbn                      =  $libro ['isbn'];
$etiquetas 		= $libro ['etiquetas'];
$observaciones 	=  $libro ['observaciones'];
$estante                = $libro ['estante'];
$seccion  		= $libro ['seccion'];
 
// La función json_encode() necesita strings en utf8 para acentos y demás.
$libro_utf8 = array (
            "titulo" 		        => utf8_encode ($titulo),
            "autor"			=> utf8_encode ($autor),
            "num" 			=> utf8_encode ($num),
            "editorial" 	        => utf8_encode ($editorial),
            "isbn" 			=> utf8_encode ($isbn),
            "etiquetas"		=> utf8_encode ($etiquetas),
            "observaciones"  => utf8_encode ($observaciones),
            "estante" 		=> utf8_encode ($estante),
            "seccion" 		=> utf8_encode ($seccion)
);
 
echo json_encode($libro_utf8);		// Representación JSON de los datos del libro solicitado.
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar