¿Cómo paso variables de JavaScript a PHP?

Resuelto SUN Jiangong asked hace 54 años • 16 respuestas

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

Pero no puedo obtener el valor $_POST['hidden1']de $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>
SUN Jiangong avatar Jan 01 '70 08:01 SUN Jiangong
Aceptado

No puede pasar valores de variables del 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 sucede en el lado del cliente.

Debe pasar variables al código PHP desde el formulario HTML utilizando otro mecanismo, como enviar el formulario mediante 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 avatar Dec 16 '2009 20:12 Sergey Kuznetsov

Simplemente 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.

Christian avatar Feb 12 '2014 23:02 Christian

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

Tú podrías:

  1. Envíe la información en el formulario que se indica aquí (dará como resultado una actualización de la página)
  2. Páselo en Ajax (hay varias publicaciones aquí sobre eso) (sin actualizar la página)
  3. Realice una solicitud HTTP a través de una solicitud XMLHttpRequest (sin actualizar la 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 que parezca más elegante y recorrer todas las variables y todo eso, pero lo he mantenido básico para que sea más fácil de entender para los principiantes.

user1849393 avatar Nov 28 '2012 18:11 user1849393