¿Cómo paso variables de JavaScript a PHP?

150

Quiero pasar variables de JavaScript a PHP usando una entrada oculta en un formulario.

Pero no puedo obtener el valor de $_POST['hidden1']into $salarieid. ¿Hay algo mal?

Aquí está el código:

<script type="text/javascript">
    // View what the user has chosen
    function func_load3(name) {
        var oForm = document.forms["myform"];
        var oSelectBox = oForm.select3;
        var iChoice = oSelectBox.selectedIndex;
        //alert("You have chosen: " + oSelectBox.options[iChoice].text);
        //document.write(oSelectBox.options[iChoice].text);
        var sa = oSelectBox.options[iChoice].text;
        document.getElementById("hidden1").value = sa;
    }
</script>

<form name="myform" action="<?php echo $_SERVER['$PHP_SELF']; ?>" method="POST">
    <input type="hidden" name="hidden1" id="hidden1" />
</form>

<?php
   $salarieid = $_POST['hidden1'];
   $query = "select * from salarie where salarieid = ".$salarieid;
   echo $query;
   $result = mysql_query($query);
?>

<table>
   Code for displaying the query result.
</table>
SOL Jiangong
fuente
2
Puede almacenar el valor de la variable js en una cookie y luego acceder a esa variable en la cookie php.
shasi kanth
2
@shasikanth: puede hacerlo, pero la cookie no se establecerá hasta la segunda vez que se vea la página . Y en ese momento, será el valor de la primera vista de la página, siempre está uno detrás. Una cookie no es un mecanismo para pasar dinámicamente información al servidor; tiene que hacer algo más para actualizar la página, por ejemplo, PUBLICAR un formulario o hacer una llamada Ajax. Y si está haciendo uno de esos, no hay razón para usar una cookie, simplemente pase la información en el mecanismo que está usando. Además, una cookie persistirá después de que la página haya desaparecido, no lo que se pretende en esta pregunta.
ToolmakerSteve

Respuestas:

90

No puede pasar valores variables desde el código JavaScript de la página actual al código PHP de la página actual ... El código PHP se ejecuta en el lado del servidor, y no sabe nada sobre lo que está sucediendo en el lado del cliente.

Debe pasar variables al código PHP desde el formulario HTML utilizando otro mecanismo, como enviar el formulario utilizando los métodos GET o POST.

<DOCTYPE html>
<html>
  <head>
    <title>My Test Form</title>
  </head>

  <body>
    <form method="POST">
      <p>Please, choose the salary id to proceed result:</p>
      <p>
        <label for="salarieids">SalarieID:</label>
        <?php
          $query = "SELECT * FROM salarie";
          $result = mysql_query($query);
          if ($result) :
        ?>
        <select id="salarieids" name="salarieid">
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<option value="', $row['salaried'], '">', $row['salaried'], '</option>'; //between <option></option> tags you can output something more human-friendly (like $row['name'], if table "salaried" have one)
            }
          ?>
        </select>
        <?php endif ?>
      </p>
      <p>
        <input type="submit" value="Sumbit my choice"/>
      </p>
    </form>

    <?php if isset($_POST['salaried']) : ?>
      <?php
        $query = "SELECT * FROM salarie WHERE salarieid = " . $_POST['salarieid'];
        $result = mysql_query($query);
        if ($result) :
      ?>
        <table>
          <?php
            while ($row = mysql_fetch_assoc($result)) {
              echo '<tr>';
              echo '<td>', $row['salaried'], '</td><td>', $row['bla-bla-bla'], '</td>' ...; // and others
              echo '</tr>';
            }
          ?>
        </table>
      <?php endif?>
    <?php endif ?>
  </body>
</html>
Sergey Kuznetsov
fuente
@Sergey, he utilizado el formulario de envío aquí con el método POST, no sé por qué no funciona. ¿Sabes por qué? ¿Y cómo resolver eso?
SOL Jiangong
@sergey, entonces necesito usar ajax? En realidad, estoy familiarizado con eso.
SOL Jiangong
En realidad, he usado su método en el cuadro de selección de un nivel anterior. Pero ahora he hecho un cuadro de selección de tres cadenas, por lo que no puedo usar su método.
SOL Jiangong
En este punto: Sí, debe usar la tecnología AJAX. Si tienes problemas con la realización, creo que puedo ayudarte.
Sergey Kuznetsov
3
@MadaraUchiha El OP ya utilizaba mysql_funciones; no sería el objetivo responder esta pregunta con una reescritura completa.
Ja͢ck
26

Solo guárdelo en una cookie:

$(document).ready(function () {
  createCookie("height", $(window).height(), "10");
});

function createCookie(name, value, days) {
  var expires;
  if (days) {
    var date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toGMTString();
  }
  else {
    expires = "";
  }
  document.cookie = escape(name) + "=" + escape(value) + expires + "; path=/";
}

Y luego léelo con PHP:

<?PHP
   $_COOKIE["height"];
?>

No es una solución bonita, pero funciona.

cristiano
fuente
2
Por fin! ¡Una opción que funciona! He estado buscando horas por una elección ahora, haciendo un juego y me gustaría enviar el puntaje más alto a una base de datos, ¡ya lo solucioné! ¡Salud!
Cid-El
1
en realidad, es una gran solución! pasar de php a javascript es fácil. De JavaScript a PHP no es fácil. Usar una galleta es simple, elegante. no bs .. !! por supuesto, si las vueltas del cliente en otro galletas ,,, eso es una cuestión de mango con un defecto ..
JamesAD-0
¿Puede decirme cómo usar la cosa $ _COOKIE ["height"] para obtener el nombre y el valor? Gracias. No funciona para mi
Zac
44
A pesar de todos los votos, esta no es una buena solución. Motivo: el servidor no ve la cookie hasta la próxima vez que el navegador solicita la página . Siempre es "uno detrás". La primera vez que se abre la página en el navegador, no habrá ninguna cookie. ¿Es esto aceptable? La próxima vez que se abra la página en el navegador, habrá una cookie desde la primera vez. Para un valor constante , como este ejemplo, eso podría ser tolerable (¡a pesar de no funcionar la primera vez!). Ahora considere un valor dinámico , como la fecha y hora actual. php verá una fecha y hora ANTERIOR, no ahora. Usa ajax.
ToolmakerSteve
20

Hay varias formas de pasar variables de JavaScript a PHP (no la página actual, por supuesto).

Tú podrías:

  1. Envíe la información en un formulario como se indica aquí (dará como resultado una actualización de la página)
  2. Pásalo en Ajax (hay varias publicaciones aquí sobre eso) (sin una actualización de página)
  3. Realice una solicitud HTTP a través de una solicitud XMLHttpRequest (sin una actualización de página) como esta:

 if (window.XMLHttpRequest){
     xmlhttp = new XMLHttpRequest();
 }

else{
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }

 var PageToSendTo = "nowitworks.php?";
 var MyVariable = "variableData";
 var VariablePlaceholder = "variableName=";
 var UrlToSend = PageToSendTo + VariablePlaceholder + MyVariable;

 xmlhttp.open("GET", UrlToSend, false);
 xmlhttp.send();

Estoy seguro de que esto podría hacerse para parecer más elegante y recorrer todas las variables y demás, pero lo he mantenido básico para que sea más fácil de entender para los novatos.

usuario1849393
fuente
¿qué tal si voy a obtener las matrices de db y pasarlo al javascript cada vez que envíe un nuevo formulario? entonces la variable en javascript también cambiará. ¿cómo? ayuadame. :(
Vincent
3
Ajax es en realidad XMLHttpRequest, este último es solo un término técnico para ello.
Alex C.
14

Aquí está el ejemplo de trabajo: Obtenga el valor de la variable javascript en la misma página en php.

<script>
var p1 = "success";
</script>

<?php
echo "<script>document.writeln(p1);</script>";
?>
Arslan Tabassum
fuente
1
Probé este concepto y luego realmente funcionó, pero si lo intento así: <? Php var x = <script> document.writeln (p1); </script> ";?>, Echo x; No funcionó. ¿Tienes otra manera?
Juna serbaserbi
3
puede intentar así <script> var p1 = "success"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; echo $ x; ?>
Arslan Tabassum
3
El php en este caso simplemente está haciendo eco de javascript a la página como una cadena. Javascript no se pasa a php.
Ben
Sí, eso es lo que tenemos que hacer ... a veces necesitamos usar el valor de JavaScript en php en la misma página y sin actualizar la página ... entonces funcionará de
maravilla
1
@ArslanTabassum No, no has entendido bien el comentario. php nunca ve el valor de p1. echo "<script>document.writeln(p1);</script>";usa la variable javascript p1en javascript , no en php. document.writelnes una función de JavaScript , que está ejecutando, en el navegador, mientras el navegador está construyendo la página HTML.
ToolmakerSteve
6

PHP se ejecuta en el servidor antes de que la página se envíe al usuario, JavaScript se ejecuta en la computadora del usuario una vez que se recibe, por lo que el script PHP ya se ha ejecutado.

Si desea pasar un valor de JavaScript a un script PHP, tendría que hacer una solicitud XMLHttpRequest para enviar los datos nuevamente al servidor.

Aquí hay una pregunta anterior que puede seguir para obtener más información: Tutorial de Ajax

Ahora, si solo necesita pasar un valor de formulario al servidor, también puede hacer una publicación de formulario normal, que hace lo mismo, pero toda la página debe actualizarse.

<?php
if(isset($_POST))
{
  print_r($_POST);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <input type="text" name="data" value="1" />
  <input type="submit" value="Submit" />
</form>

Al hacer clic en enviar, se enviará la página e imprimirá los datos enviados.

Derek H
fuente
1
@ Zurahn, sí, ¿tal vez trato de usar XMLHttpRequest, por lo que no puedo pasar el valor de JavaScript al script PHP en la misma página usando JavaScript? He buscado mucho, alguien dice que se puede hacer con entradas ocultas en forma. ¿Necesito probar esta solución más adelante?
SOL Jiangong
6

Estaba tratando de resolver esto por mí mismo y luego me di cuenta de que el problema es que es una forma de ver la situación al revés. En lugar de tratar de pasar cosas de JavaScript a PHP, quizás sea mejor dar la vuelta, en la mayoría de los casos. El código PHP se ejecuta en el servidor y crea el código html (y posiblemente también el script java). Luego, el navegador carga la página y ejecuta el script html y java.

Parece que la forma más sensata de abordar situaciones como esta es usar PHP para crear el JavaScript y el html que desee y luego usar el JavaScript en la página para hacer lo que PHP no pueda hacer. Parece que esto le daría los beneficios de PHP y JavaScript de una manera bastante simple y directa.

Una cosa que he hecho que parece pasar cosas a PHP desde su página sobre la marcha es usar la etiqueta de imagen html para invocar el código PHP. Algo como esto:

<img src="pic.php">

El código PHP en pic.php en realidad crearía código html incluso antes de que se cargara su página web, pero ese código html se llama básicamente sobre la marcha. El código php aquí se puede usar para crear una imagen en su página, pero puede tener cualquier comando que desee además de eso. Tal vez cambie el contenido de algunos archivos en su servidor, etc. La ventaja de esto es que el código php se puede ejecutar desde html y supongo JavaScript, pero la desventaja es que el único resultado que puede poner en su página es un imagen. También tiene la opción de pasar variables al código php a través de parámetros en la url. Los contadores de páginas usarán esta técnica en muchos casos.

Terry Prothero
fuente
5

Podemos pasar fácilmente valores incluso en las mismas páginas / diferentes usando las cookies que se muestran en el código de la siguiente manera (en mi caso, lo estoy usando con la integración de Facebook) -

function statusChangeCallback(response) {
    console.log('statusChangeCallback');
    if (response.status === 'connected') {
        // Logged into your app and Facebook.
        FB.api('/me?fields=id,first_name,last_name,email', function (result) {
            document.cookie = "fbdata = " + result.id + "," + result.first_name + "," + result.last_name + "," + result.email;
            console.log(document.cookie);
        });
    }
}

Y he accedido a él (en cualquier archivo) usando -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
Tusza Walzade
fuente
5

Así es como lo hice (necesitaba insertar una zona horaria local en PHP:

<?php
    ob_start();
?>

<script type="text/javascript">

    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>

<?php
    $offset = ob_get_clean();
    print_r($offset);
VisionQuest
fuente
2

¿Se llama su función, que establece el valor oculto de la forma? No es en este ejemplo. No debería tener problemas para modificar un valor oculto antes de volver a publicar el formulario en el servidor.

pestilencia669
fuente
@perstilence, tienes razón, no llamé a la función. ¿Sabes cómo llamarlo en PHP?
SOL Jiangong
hmm Parece que quiere llamarlo cuando alguien selecciona algo en su formulario / un controlador onClick. Llamarlo desde PHP no tiene ningún sentido. Alguien selecciona un valor de formulario, su función se activa, actualiza un valor de formulario oculto y luego se abre paso para php en la publicación del formulario. ¿No?
pestilence669
@pestilence, quiero permitir que alguien seleccione un elemento en el cuadro de selección, y cuando hago clic en el botón Enviar, se mostrará un resultado de búsqueda en una tabla. Entonces, en el backend, cuando elijo el elemento, su valor se pasará a una consulta mysql en php como variable. Esto es lo que quiero hacer. Pero parece que no puedo encontrar la solución en javascript. ¿Tienes alguna pista?
SOL Jiangong
Sí, se aceptará publicar o obtener el método en el formulario si funciona.
SOL Jiangong
2

Su código tiene algunas cosas mal.

  • Define una función de JavaScript, func_load3 (), pero no la llama.
  • Su función está definida en el lugar equivocado. Cuando se define en su página, los objetos HTML a los que hace referencia aún no se han cargado. La mayoría de los códigos JavaScript verifican si el documento está completamente cargado antes de ejecutarlo, o simplemente puede mover su código más allá de los elementos a los que se refiere en la página.
  • Su formulario no tiene medios para enviarlo. Necesita un botón de enviar.
  • No verifica si su formulario ha sido enviado.

Es posible establecer una variable de JavaScript en una variable oculta en un formulario, luego enviarla y volver a leer el valor en PHP. Aquí hay un ejemplo simple que muestra esto:

<?php
if (isset($_POST['hidden1'])) {
   echo "You submitted {$_POST['hidden1']}";
   die;
}

echo <<<HTML
   <form name="myform" action="{$_SERVER['PHP_SELF']}" method="post" id="myform">
      <input type="submit" name="submit" value="Test this mess!" />
      <input type="hidden" name="hidden1" id="hidden1" />
   </form>

   <script type="text/javascript">
      document.getElementById("hidden1").value = "This is an example";
   </script>
HTML;
?>
usuario3822447
fuente
2

cuando su página cargue el código PHP por primera vez y configure el diseño completo de su página web. después del diseño de la página, configura la carga de JavaScript. ahora JavaScript interactúa directamente con DOM y puede manipular el diseño, pero PHP no puede necesitar actualizar la página. Solo hay una manera de actualizar su página y pasar los parámetros en la URL de la página para que pueda obtener los datos a través de PHP. Entonces usamos AJAX para interactuar Javascript con PHP sin recargar la página. AJAX también se puede usar como API. Una cosa más si ya ha declarado la variable en PHP. antes de cargar la página, puede usarla con su ejemplo de Javascript.

<script>
var username = "<?php echo $myname;?>";
alert(username);
</script>

El código anterior es correcto y funcionará. pero el siguiente código está totalmente equivocado y nunca funcionará.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Pase el valor de JavaScript a PHP a través de AJAX

    Es la forma más segura de hacerlo. porque el contenido HTML se puede editar a través de herramientas de desarrollador y el usuario puede manipular los datos. así que es mejor usar AJAX si quieres seguridad sobre esa variable. Si eres un novato en AJAX, aprende AJAX, es muy simple.

La mejor y más segura forma de pasar la variable de JavaScript a PHP es a través de AJAX

ejemplo simple de AJAX

var mydata = 55;
var myname = "syed ali";
var userdata = {'id':mydata,'name':myname};
    $.ajax({
            type: "POST",
            url: "YOUR PHP URL HERE",
            data:userdata, 
            success: function(data){
                console.log(data);
            }
            });
  • PASS valor de javascript a php a través de campos ocultos.

de lo contrario, puede crear entradas HTML ocultas dentro de su formulario. me gusta

<input type="hidden" id="mydata">

luego, a través de jQuery o javaScript, pase el valor al campo oculto. me gusta

<script>
var myvalue = 55;
$("#mydata").val(myvalue);
</script>

Ahora, cuando envíe el formulario, puede obtener el valor en PHP.

Sayed Mohd Ali
fuente
1
Gracias. Muy útil. ¿El método jQuery no le permite pasar datos generados a medida que se ejecuta la página? ¿No puede establecer un campo de entrada en un valor y recogerlo por php? Este es uno de los ejemplos más claros de Ajax que he visto. Tengo muchas ganas de probarlo.
rizos
1

Puede ser que pueda usar el método jquery serialize () para que todo esté a la vez.

var data=$('#myForm').serialize();

// de esta manera también podrías obtener el valor oculto en el lado del servidor.

Satyapriya Mishra
fuente
0

Obviamente, esta solución no se mencionó anteriormente. También puede usar cookies para pasar datos del navegador al servidor.

Simplemente configure una cookie con los datos que desea pasar a PHP usando javascript en el navegador.

Luego, simplemente lea esta cookie en el lado de PHP.

Tim
fuente
. . . ¿Le gustaría dar un ejemplo y tal vez un enlace relevante o dos? (Consulte Cómo responder ).
ashleedawg
0

No podemos pasar valores variables de JavaScript al código PHP directamente ... El código PHP se ejecuta en el lado del servidor, y no sabe nada sobre lo que está sucediendo en el lado del cliente.

Por lo tanto, es mejor usar AJAX para analizar el valor de JavaScript en el código php.

O, alternativamente, podemos hacer esto con la ayuda de COOKIES en nuestro código.

Gracias y saludos.

Rohit Saini
fuente