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

150

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

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

Вот код:

<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>
Солнце цзянгун
источник
2
Вы можете сохранить значение переменной js в файле cookie, а затем получить доступ к этой переменной в файле cookie php.
Шаси Кант
2
@shasikanth - вы можете сделать это, но файл cookie не будет установлен до второго раза, когда страница просматривается . И в то время это будет значение с первого просмотра страницы - оно всегда позади. Файл cookie не является механизмом для динамической передачи информации обратно на сервер; Вы должны сделать что-то еще, чтобы обновить страницу, например, POST-форму или сделать Ajax-вызов. И если вы делаете один из них, нет причин использовать cookie - просто передайте информацию в механизм, который вы используете. Кроме того, файл cookie будет сохраняться после того, как страница исчезнет, ​​а не то, что предполагается в этом вопросе.
ToolmakerSteve

Ответы:

90

Вы не можете передавать значения переменных из 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>
Сергей Кузнецов
источник
@ Сергей, я использовал здесь форму отправки с методом POST, я не знаю, почему она не работает. Ты знаешь почему? И как это решить?
Солнце Цзянонг
@ sergey, мне нужно использовать ajax? На самом деле, я знаком с этим.
SUN Jiangong
На самом деле, я использовал ваш метод в окне выбора одного уровня. Но теперь я сделал три цепочки выбора, поэтому я не могу использовать ваш метод.
Солнце Цзянонг
На данный момент: Да, вам нужно использовать технологию AJAX. Если у вас есть проблемы с реализацией, я думаю, что могу помочь.
Сергей Кузнецов
3
@MadaraUchiha OP уже использовал mysql_функции; не было бы целью ответить на этот вопрос с полной перепиской.
Ja͢ck
26

Просто сохраните его в печенье:

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

Это не симпатичное решение, но оно работает.

Кристиан
источник
2
Finaly! решение, которое работает! Я часами искал решение, создавая игру, и хотел бы посылать наибольший счет в базу данных, исправил это сейчас! Ура!
Сид-Эл
1
на самом деле, это отличное решение! Переход от php к javascript очень прост. от javascript до php нелегко. использовать куки просто, элегантно. нет бс .. !! конечно, если клиент отключает куки-файлы ,, это проблема, которую нужно
решить
Можете ли вы дать мне знать, как использовать $ _COOKIE ["height"], чтобы получить имя, значение в нем? Спасибо. Не работает для меня
Зак
4
Несмотря на все отрицательные стороны, это не очень хорошее решение. Причина: файл cookie не просматривается сервером до следующего раза, когда браузер запрашивает страницу . Его всегда "один позади". При первом открытии страницы в браузере не будет никаких файлов cookie. Это приемлемо? При следующем открытии страницы в браузере с первого раза будет файл cookie. Для постоянного значения, такого как этот пример, это может быть допустимым (несмотря на то, что не работает в первый раз !!). Теперь рассмотрим динамическое значение, например текущее время. php будет видеть ПРЕДЫДУЩУЮ дату, не сейчас. Используйте Ajax.
ToolmakerSteve
20

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

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

user1849393
источник
Как насчет того, как я буду получать массивы БД и передавать их в JavaScript каждый раз, когда я отправляю новую форму. тогда переменная в javascript также изменится. как? Помоги мне. :(
Винсент
3
На самом деле Ajax - это XMLHttpRequest, последний - просто технический термин для него.
Алекс С.
14

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

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
Арслан Табассум
источник
1
Я попробовал эту концепцию, затем действительно сработал, но если я попробую так: <? Php var x = <script> document.writeln (p1); </ script> ";?>, То echo x; Не работает. У вас есть другой путь?
Юна Сербасерби
3
вы можете попробовать вот так <script> var p1 = "success"; </ script> <? php $ x = "<script> document.writeln (p1); </ script>"; эхо $ х; ?>
Арслан Табассум
3
В этом случае php просто выводит javascript на страницу в виде строки. Javascript не передается в php.
Бен
Да, это то, что нам нужно сделать ... иногда нам нужно использовать значение JavaScript в php на той же странице и без обновления страницы ... тогда это будет работать как очарование .. :)
Arslan
1
@ArslanTabassum Нет, вы неправильно поняли комментарий. php никогда не видит значение p1. echo "<script>document.writeln(p1);</script>";использует переменную javascript p1в javascript , а не в php. document.writelnявляется функцией javascript , которую вы выполняете в браузере, пока браузер создает страницу HTML.
ToolmakerSteve
6

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>

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

Дерек Х
источник
1
@Zurahn, да, может быть, я пытаюсь использовать XMLHttpRequest, поэтому я не могу передать значение javascript в php-скрипт на той же странице, используя javascript? Я много искал, кто-то говорит, что это можно сделать скрытым вводом в форму. Мне нужно попробовать это решение Furthur?
Солнце Цзянонг
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. Счетчики страниц будут использовать эту технику во многих случаях.

Терри Протеро
источник
5

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

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

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

pestilence669
источник
@pertilence, ты прав, я не вызывал функцию. Вы знаете как это назвать в php?
Солнце Цзянонг
хмм. Похоже, вы хотите позвонить, когда кто-то выбирает что-то в вашей форме / обработчик onClick. Вызывать это из PHP не имеет никакого смысла. Кто-то выбирает значение формы, ваша функция запускается, обновляет скрытое значение формы, а затем отправляет php на публикацию формы. Нет?
pestilence669
@pestilence, я хочу, чтобы кто-то выбрал элемент в окне выбора, и когда я нажму кнопку «Отправить», результат поиска будет отображен в таблице. Таким образом, в бэкэнде, когда я выбираю элемент, его значение будет передано в MySQL запрос в php как переменная. Это то, что я хочу сделать. Но, похоже, я не могу найти решение в JavaScript. Есть ли у вас какие-либо подсказки?
Солнце Цзянонг
Да, метод post или get в форме будет принят, если он работает.
Солнце Цзянонг
2

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

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

когда ваша страница впервые загружает код 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.

Сказал Мохд Али
источник
1
Спасибо. Очень полезно. Метод jQuery не позволяет передавать данные, которые генерируются при запуске страницы? Вы не можете установить поле ввода в значение и забрать его по php? Это один из самых ярких примеров Ajax, который я видел. Я с нетерпением жду возможности попробовать это.
кудри
1

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

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

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

Сатьяприя Мишра
источник
0

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

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

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

Тим
источник
, , , Вы хотели бы привести пример и, возможно, соответствующую ссылку или две? (См. Как ответить .)
ashleedawg
0

Мы не можем передавать значения переменных JavaScript непосредственно в код PHP ... Код PHP выполняется на стороне сервера, и он ничего не знает о том, что происходит на стороне клиента.

Поэтому лучше использовать AJAX для анализа значения JavaScript в коде php.

Или же мы можем сделать это с помощью COOKIES в нашем коде.

Спасибо и ура.

Рохит Сайни
источник