Как передать переменные JavaScript в PHP? - PullRequest
129 голосов
/ 16 декабря 2009

Я хочу передать переменные 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>

Ответы [ 12 ]

81 голосов
/ 16 декабря 2009

Вы не можете передавать значения переменных из 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>
21 голосов
/ 13 февраля 2014

просто сохраните его в куки:

$(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"];
?>

это не очень хорошее решение, но оно работает. Приветствия.

18 голосов
/ 28 ноября 2012

Есть несколько способов передачи переменных из 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();

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

12 голосов
/ 25 июля 2014

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

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
6 голосов
/ 03 июня 2012

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

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

Одна вещь, которую я сделал, которая создает видимость передачи вещей в PHP со своей страницы на лету, - это использование html image tag для вызова PHP-кода. Как то так:

<img src="pic.php">

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

6 голосов
/ 16 декабря 2009

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

Если вы хотите передать значение JavaScript в сценарий PHP, вам нужно выполнить запрос XMLHttpRequest, чтобы отправить данные обратно на сервер.

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

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

<?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 голосов
/ 28 февраля 2016

Мы можем легко передавать значения даже на одинаковых / разных страницах, используя файлы 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'];
    }
?>
3 голосов
/ 17 июня 2014

Вот как я это сделал (нужно было вставить местный часовой пояс в 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 голосов
/ 22 июля 2014

Ваш код содержит несколько ошибок.

  • Вы определяете функцию 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;
?>
2 голосов
/ 16 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...