Як передати змінні 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.
shasi kanth

2
@shasikanth - ви можете це зробити, але файл cookie не буде встановлено до другого перегляду сторінки . І в той час це буде значення з перегляду першої сторінки - воно завжди одне позаду. Файл cookie не є механізмом динамічної передачі інформації назад на сервер; Вам потрібно зробити щось інше, щоб оновити сторінку, наприклад, розмістити форму або здійснити дзвінок у Ajax. І якщо ви робите одне з таких, немає ніяких причин використовувати печиво - просто передайте інформацію в механізм, який ви використовуєте. Також 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>

@Sergey, я використовував тут форму надсилання за допомогою методу POST, я не знаю, чому це не працює. Ти знаєш чому? І як це вирішити?
САН Цзянгон

@sergey, тому мені потрібно використовувати ajax? Насправді я з цим знайомий.
САН Цзянгон

Насправді я використовував ваш метод у попередньому вікні вибору рівня. Але тепер я зробив вікно з трьома ланцюжками, тому я не можу використовувати ваш метод.
САН Цзянгон

На даний момент: Так, вам потрібно використовувати технологію AJAX. Якщо у вас є проблеми з реалізацією, я думаю, я можу допомогти.
Сергій Кузнєцов

3
@MadaraUchiha В ОП вже використовуються mysql_функції; не було б метою відповісти на це запитання повною мірою.
Як

26

Просто збережіть його у файлі 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"];
?>

Це не дуже гарне рішення, але воно працює.


2
Нарешті! розлука, яка працює! Я шукав години для розчулення зараз, робив гру і хотів би надіслати найвищий бал до бази даних, це вже виправлено! Ура!
Cid-El

1
насправді, це чудове рішення! перехід від php до javascript дуже просто. від javascript до php непросто. використання печива просто, елегантно. ні бс .. !! Звичайно, якщо клієнт вимикає файли cookie ,,, це проблема, з якою можна працювати за замовчуванням ..
JamesAD-0

Чи можете ви, будь ласка, дозволити мені знати, як використовувати предмет $ _COOKIE ["висота"], щоб отримати ім'я та значення в ньому? Дякую. Не працює для мене.
Зак

4
Незважаючи на всі результати, це не гарне рішення. Причина: сервер не бачить файл cookie до наступного запиту браузера на сторінку . Його завжди "один позаду". При першому відкритті сторінки в браузері взагалі не буде файлу cookie. Це прийнятно? Наступного разу, коли сторінку відкриється в браузері, з першого разу з’явиться файл cookie. Для постійного значення, такого як цей приклад, це може бути терпимим (незважаючи на те, що не працює в перший раз !!). Тепер розглянемо динамічне значення, таке як поточний час. php буде бачити ПОПЕРЕДНІЙ час, а не зараз. Використовуйте аякс.
ToolmakerSteve

20

Існує кілька способів передачі змінних з JavaScript на PHP (звичайно, не на поточну сторінку).

Ти міг:

  1. Надішліть інформацію у вказаній тут формі (це призведе до оновлення сторінки)
  2. Передайте його в Аякс (тут про це є кілька публікацій) (без оновлення сторінки)
  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();

Я впевнений, що це могло б зробити так, щоб виглядати химерніше і прокручувати всі змінні та інше - але я зберігав це як основне, щоб полегшити розуміння для новачків.


як щодо того, як я отримаю масиви db та передаватиму його на 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; він не працює. У вас є інший спосіб?
Juna serbaserbi

3
ви можете спробувати так <script> var p1 = "успіх"; </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

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

<?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? Я багато шукав, хтось каже, що це можна зробити прихованим вводом у формі. Чи потрібно спробувати це рішення фуртур?
САН Цзянгон

6

Я намагався розібратися в цьому і тоді зрозумів, що проблема полягає в тому, що це свого роду зворотний погляд на ситуацію. Замість того, щоб намагатися передавати речі з 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

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

2

Чи називається ваша функція, яка встановлює приховане значення форми? Не в цьому прикладі. Перед тим, як надсилати форму назад на сервер, у вас не повинно виникнути проблем із зміною прихованого значення .


@perstilence, ти маєш рацію, я не закликав цю функцію. Чи знаєте ви, як це викликати в php?
САН Цзянгон

хм. Схоже, ви хочете зателефонувати, коли хтось вибере щось у вашій формі / обробник onClick. Викликати його з PHP не має сенсу. Хтось вибирає форму форми, ваша функція запускається, оновлює приховане значення форми, а потім робить свій шлях до php у публікації форми. Немає?
моровиця669

@pestilence, я хочу дозволити комусь вибрати предмет у полі вибору, і коли я натискаю кнопку "Надіслати", результат пошуку відображатиметься в таблиці. Отже, коли я вибираю елемент, його значення буде передане запиту mysql в php як змінна. Це те, що я хочу зробити. Але, здається, я не можу знайти рішення в JavaScript. У вас є якісь підказки?
САН Цзянгон

Так, метод публікації або отримання у формі буде прийнятий, якщо він працює.
САН Цзянгон

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

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? Це один із найяскравіших прикладів «Аякса», який я бачив. Я з нетерпінням чекаю спробувати.
кучері

1

Можливо, ви можете використовувати метод jquery serialize (), щоб все було за один раз.

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

// таким чином ви могли отримати приховане значення також на стороні сервера.


0

Про це, очевидно, рішення не згадувалося раніше. Ви також можете використовувати файли cookie, щоб повернути дані з браузера на сервер.

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

Потім просто прочитайте цей файл cookie на стороні PHP.


. . . Ви хочете навести приклад, а може бути відповідне посилання чи два? (Див. Як відповісти .)
ashleedawg

0

Ми не можемо передати значення змінних JavaScript безпосередньо до PHP-коду ... PHP-код працює на стороні сервера, і він нічого не знає про те, що відбувається на стороні клієнта.

Тому краще використовувати AJAX для розбору значення JavaScript у php-коді.

Або ж ми можемо зробити це за допомогою COOKIES у нашому коді.

Дякую та привіт

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.