Pasar variables de Javascript a PHP

David Galisteo Cantero

Veamos cómo pasar variables de Javascript a PHP de una manera sencilla con estas líneas de código.

Y no me refiero a la típica línea:

$var_php = "<script> document.write(variable); </script>";

Al mostrar el valor de la variable por pantalla, realmente lo que hacemos es ejecutar el código javascript entrecomillado, por lo que no nos sirve este método.

Bien, tras reflexionar un poco sobre js y php, caí en que el servidor no podría tener la variable de ninguna de las maneras si el código era ejecutado en el cliente y no se le transmitía ¡¿Cómo no se me había ocurrido antes?!.

Pues bien, veamos el siguiente código:

echo "<script language='javascript'>
	var cantidad;
	cantidad=prompt('Introduce cantidad',1);
     </script> ";
 
//Ya tenemos capturada la variable con javascript
 
echo "<form action=$_SERVER[PHP_SELF] method=post name=enviar>
              <input type=hidden name=var_php></form>";
 
echo "<script language='javascript'>
              document.enviar.var_php.value=cantidad;
              document.enviar.submit();
</script>";

Con estas líneas el archivo php se llama a sí mismo, pasando a través del formulario la variable javascript ‘cantidad’

Esta llamada entra en un bucle, ya que el archivo se llama a sí mismo pasando la variable, habría que implementar una variable ‘centinela’, que puede ser una variable de sesión, para controlar que SOLO pasemos el dato la primera vez

A mi me funciona bastante bien.

Espero que os sea de ayuda

HackSaludos!!

Publicado el 01-11-2013

Compartelo!

24 comentarios

  • Esteban dice:

    Estuve un día entero buscando lo que compartiste de cómo pasar variables de Javascript a PHP, entendiendo la diferencia de la ejecución del código del cliente/servidor. Simplemente gracias. Por gente como vos se puede seguir adelante.

  • edgar dice:

    hola tengo un problema con un necesito enviar el resultado de la función sumar a una variable php me puedes ayudar tengo el siguiente codigo pero no funciona

    //<![CDATA[
    var variable1 = 1;
    function sumar() {
    var embobinado1 = variable1++;
    // mostrar el valor de variable1
    document.getElementById('valor').innerHTML = embobinado1;
    }

    <?php
    echo '
    ‘;
    echo ”

    var varjs= embobinado1;
    “;
    if (! isset($_POST[‘variable_php’]))
    {
    echo ‘
    ‘;
    echo ‘
    document.pasar.variable_php.value=varjs;
    document.pasar.submit();
    ‘;
    }
    echo “Valor de la variable en PHP: “.$_POST[“variable_php”].” “;

    echo ‘

    ?>

  • andrexrojas dice:

    Hola,
    Yo necesitaba hacer lo que se expone aquí (pasar de js a php). Como la teoría indica que no es posible, y como lo que se expone al inicio como solución no me servía en mi caso particular (autoguardar lo que se escribe en un textarea), lo que hice fue:
    – cada tantos segundos llamo a la función en js que carga una página en un marco escondido (window.parent.hideFrame.location=’pagina.php’) y se pueden pasar algunas variables por url, pero en mi caso no era suficiente porque eran muchos caracteres (de 2000 hacia arriba).
    – En la página que se carga en el marco escondido, ejecuto php y con echo imprimo un form con los input hidden que necesite. Este form toma los valores pequeños por GET si se quiere.
    – Luego, para los valores que no pueden ser traspasados por GET, con echo imprimo codigo js que le da, a los input hidden del form, los valores de los elementos del otro form (el original en el que se está escrbiendo) que está activo en pantalla (ejemplo: echo “document.FORM.texto_reunion.value = window.parent.mainFrame.document.getElementById(‘ELEMENTO_DEL_FORM_ORIGINAL’).value;”;)
    – Luego el mismo código js executa el submit del FORM de la página escondida, recargando esta misma página escondida, y así capturo el dato en PHP. Guardo el dato en la base de datos e informo al usuario que está ok cambiando el text de un div en la pantalla original.

    Sé que no está detalladamente explicado, pero la idea general le puede servir a alguien.
    Bye

    andrexrojas

  • carlos carrera dice:

    Hola, gracias por el post, estoy intentando crear la variable centinela de la que hablas pero simpre me vuelve a cargar el form y el script… he hecho algo como esto…
    $_SESSION[‘ventana’] = $_POST[‘var_php’];
    echo “VENTANA”.$_SESSION[‘ventana’];

    if($_SESSION[‘ventana’] == ”){
    echo “”;
    echo “document.enviar.var_php.value=ancho;document.enviar.submit();”;
    }
    Podrías indicarme como solucionarlo, grácias anticipadas.
    Carlos

    • Hola Carlos, entiendo que lo que quieres hacer con ese código es hacer un submit desde PHP y una sola vez, esto es, cuando “ventana”, tu variable centinla, sea distinta del vacío. La idea la tiene bien pero tienes un pequeño error, si te fijas en el código de ejemplo el submit esta dentro de una etiqueta de script para indicarle al navegador que es código JS, mientras que tu no pones dicha etiqueta, el echo debe ser tal cual está en el ejemplo. Recuerda que el otro trozo de código también debe ir dentro de una etiqueta script Saludos

  • fer dice:

    ok le mando el código HTML es que lo que quiero mandar es valor de un combo

    Registro de una nueva aula

    Institución en la que pertenece:

    [[block: institut]]
    [[nomI]]
    [[/block: institut]]

    Nombre del aula:

    Guardar

Deja un comentario

Comentanos

*
Ir arriba de la pagina