Как передать переменные 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>

Ответ 1

Вы не можете передавать значения переменных с текущей страницы 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>

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

<?php
echo "<script>document.writeln(p1);</script>";
?>

Ответ 5

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

Если вы хотите передать значение JavaScript в PHP script, вам нужно будет выполнить 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>

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

Ответ 6

Я пытался понять это сам, а затем понял, что проблема в том, что это своего рода обратный взгляд на ситуацию. Вместо того, чтобы пытаться передавать вещи из 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. Счетчики страниц будут использовать эту технику во многих случаях.

Ответ 7

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

Ответ 8

Вот как я это сделал (нужно вставить локальный часовой пояс в 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);

Ответ 9

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

Ответ 10

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

  • Вы определяете функцию 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;
?>

Ответ 11

Может быть, вы можете использовать метод jquery serialize(), чтобы все было в один конец.

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

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

Ответ 12

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

Просто установите cookie с данными, которые вы хотите передать в PHP, используя JavaScript в браузере.

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

Ответ 13

когда ваша страница впервые загружает код PHP, сначала запустите и установите полный макет вашей веб-страницы. после разметки страницы устанавливается загрузка JavaScript. теперь JavaScript напрямую взаимодействует с DOM и может манипулировать макетом, но PHP не нуждается в обновлении страницы. Единственный способ - обновить страницу и передать параметры в URL-адресе страницы, чтобы вы могли получать данные через PHP. Поэтому мы используем AJAX для взаимодействия Javascript с PHP без перезагрузки страницы. AJAX также может использоваться как API. еще одна вещь, если вы уже объявили переменную в PHP. перед загрузкой страницы вы можете использовать ее с примером Javascript.

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

приведенный выше код является правильным, и он будет работать. но приведенный ниже код совершенно неверен и никогда не сработает.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Передать значение из JavaScript в PHP через AJAX

    это самый безопасный способ сделать это. потому что HTML-контент можно редактировать с помощью инструментов разработчика, а пользователь может манипулировать данными. так что лучше использовать AJAX, если вы хотите обеспечить безопасность этой переменной. Если вы новичок в AJAX, пожалуйста, изучите AJAX, это очень просто.

Лучший и самый безопасный способ передачи переменной JavaScript в PHP - через AJAX.

простой пример 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 значение из JavaScript в PHP через скрытые поля.

в противном случае вы можете создать скрытый ввод HTML внутри вашей формы. лайк

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

затем через jQuery или javaScript передайте значение в скрытое поле. лайк

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

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

Ответ 14

Да, он работает для меня.

<script> var p1 = "success"; </script>
<?php echo "<script>document.writeln(p1);</script>"; ?>