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

12 ответов:

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

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

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

просто сохраните его в файле 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"];
?>

это не красивое решение, но оно работает. Овации.

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

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

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

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>

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

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

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

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

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

<img src="pic.php">

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

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

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

ваш код имеет несколько вещей неправильно с ним.

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

может быть, вы могли бы использовать jQuery serialize() метод, так что все будет на одном дыхании.

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

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

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

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

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

Comments

    Ничего не найдено.