Как передать переменные JavaScript в PHP?


Я хочу передать переменные JavaScript в PHP, используя скрытый ввод в форме.

Но я не могу перевести значение $_POST['hidden1'] в $salarieid. Что-то не так?

Вот код:

<script type="text/javascript">
// view which the user has chosen
function func_load3(name){
    var oForm = document.forms["myform"];
    var oSelectBox = oForm.select3;
    var iChoice = oSelectBox.selectedIndex;
    //alert("you have choosen: " + 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 display the query result. 
</table>
Author: Harsh Patel, 2009-12-16

12 answers

Вы не можете передавать значения переменных с текущей страницы javascript в PHP-код текущей страницы... PHP-код выполняется на стороне сервера, и он ничего не знает о том, что происходит на стороне клиента.

Вам необходимо передать переменные в PHP-код из html-формы, используя другой механизм, такой как отправка формы методами GET или 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>
 73
Author: Sergey Kuznetsov, 2009-12-17 15:00:29

Существует несколько способов передачи переменных из javascript в php (конечно, не на текущей странице)

Вы могли бы:

  1. отправьте информацию в форме, как указано здесь, (приведет к обновлению страницы)
  2. передайте это в ajax (несколько сообщений об этом здесь) (без обновления страницы)
  3. сделайте http-запрос с помощью запроса XMLHttpRequest (без обновления страницы) следующим образом:

 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();

Я уверен, что это можно было бы сделать более причудливым и зацикленным через все переменные и все такое прочее - но я сохранил это базовым, чтобы новичкам было легче понять.

 17
Author: user1849393, 2018-03-13 10:28:10

Просто сохраните его в файле 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=/";
}

, А затем прочитайте его с помощью php

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

Это не очень приятное решение, но оно работает. Ваше здоровье.

 13
Author: Christian, 2018-03-13 10:29:28

Вот рабочий пример: Получите значение переменной javascript на той же странице в php.

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
 6
Author: Arslan Tabassum, 2014-07-25 07:25:16

PHP запускается на сервере до отправки страницы пользователю, JavaScript запускается на компьютере пользователя после его получения, поэтому скрипт PHP уже выполнен.

Если вы хотите передать значение JavaScript в PHP-скрипт, вам придется выполнить XMLHttpRequest, чтобы отправить данные обратно на сервер.

Вот предыдущий вопрос, на который вы можете ответить для получения дополнительной информации: Учебник по Ajax

Теперь, если вам просто нужно передать значение формы на сервер, вы также можете просто сделайте обычную публикацию в форме, которая делает то же самое, но вся страница должна быть обновлена.

<?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>

Нажав кнопку отправить, вы отправите страницу и распечатаете отправленные данные.

 5
Author: Derek H, 2017-05-23 12:26:05

Мы можем легко передавать значения даже на одних и тех же/разных страницах, используя файлы cookie, показанные в коде следующим образом (в моем случае я использую его с интеграцией с 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);
                });
            }
        }

И я получил к нему доступ (в любом файле), используя -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
 5
Author: Tushar Walzade, 2016-02-28 16:00:02

Я пытался разобраться в этом сам, а затем понял, что проблема в том, что это своего рода обратный взгляд на ситуацию. Вместо того, чтобы пытаться передать что-то из JavaScript в php, возможно, в большинстве случаев лучше пойти наоборот. PHP-код выполняется на сервере и создает html-код (и, возможно, также java-скрипт). Затем браузер загружает страницу и выполняет html- и java-скрипт.

Это кажется разумным способом подойти ситуации, подобные этой, состоят в том, чтобы использовать PHP для создания JavaScript и html, которые вы хотите, а затем использовать JavaScript на странице, чтобы делать то, что PHP не может сделать. Похоже, что это даст вам преимущества как PHP, так и JavaScript довольно простым и прямым способом.

Одна вещь, которую я сделал, чтобы создать видимость передачи данных на PHP с вашей страницы на лету, - это использование тега html-изображения для вызова PHP-кода. Что-то вроде этого:

<img src="pic.php">

PHP-код в pic.php на самом деле он создал бы html-код еще до того, как ваша веб-страница была загружена, но этот html-код в основном вызывается на лету. php-код здесь можно использовать для создания изображения на вашей странице, но в нем могут быть любые команды, которые вам нравятся, кроме этого. Возможно, это изменяет содержимое некоторых файлов на вашем сервере и т.д. Плюсом этого является то, что php-код может быть выполнен из html, и я предполагаю, что JavaScript, но недостатком является то, что единственный вывод, который он может разместить на вашей странице, - это изображение. Вы также есть возможность передавать переменные в php-код через параметры в URL-адресе. Счетчики страниц будут использовать этот метод во многих случаях.

 5
Author: Terry Prothero, 2018-03-13 10:32:04

Вызывается ли ваша функция, которая задает значение скрытой формы? Этого нет в данном примере. У вас не должно возникнуть проблем с изменением скрытого значения перед отправкой формы обратно на сервер.

 2
Author: pestilence669, 2009-12-16 20:53:46

Вот как я это сделал (нужно было вставить местный часовой пояс в 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);
 2
Author: VisionQuest, 2014-06-17 16:11:49

В вашем коде есть несколько ошибок.

  • Вы определяете функцию JavaScript, func_load3(), но не вызываете ее.
  • Ваша функция определена не в том месте. Когда он определен на вашей странице, HTML-объекты, на которые он ссылается, еще не загружены. Большинство кода JavaScript проверяет, полностью ли загружен документ перед выполнением, или вы можете просто переместить свой код мимо элементов, на которые он ссылается на странице.
  • У вашей формы нет средств для ее отправки. Для этого нужен кнопка "Отправить".
  • Вы не проверяете, была ли отправлена ваша форма.

Можно задать переменную JavaScript в скрытой переменной в форме, затем отправить ее и прочитать значение обратно в PHP. Вот простой пример, который показывает это:

<?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;
?>
 1
Author: user3822447, 2014-07-22 12:48:35

Возможно, вы могли бы использовать метод сериализации jquery(), чтобы все было на одном дыхании.

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

//таким образом, вы также можете получить скрытое значение на стороне сервера.

 1
Author: Satyapriya Mishra, 2016-03-31 17:57:47

Это очевидное решение ранее не упоминалось. Вы также можете использовать файлы cookie для передачи данных из браузера обратно на сервер.

Просто установите файл cookie с данными, которые вы хотите передать на PHP с помощью javascript в браузере.

Затем просто прочитайте этот файл cookie на стороне PHP.

 0
Author: Tim, 2018-08-09 12:16:21