Bagaimana saya meneruskan variabel JavaScript ke PHP?

150

Saya ingin meneruskan variabel JavaScript ke PHP menggunakan input tersembunyi dalam formulir.

Tapi saya tidak bisa mendapatkan nilai dari $_POST['hidden1']menjadi $salarieid. Apakah ada yang salah?

Ini kodenya:

<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>
SUN Jiangong
sumber
2
Anda dapat menyimpan nilai variabel js dalam cookie dan kemudian mengakses variabel itu dalam cookie php.
shasi kanth
2
@shasikanth - Anda dapat melakukannya, tetapi cookie tidak akan disetel hingga kedua kali halaman dilihat . Dan pada saat itu, itu akan menjadi nilai dari tampilan halaman pertama - selalu satu di belakang. Cookie bukan suatu mekanisme untuk secara dinamis menyampaikan informasi kembali ke server; Anda harus melakukan hal lain untuk menyegarkan halaman, mis. POST formulir, atau melakukan panggilan Ajax. Dan jika Anda melakukan salah satu dari itu, tidak ada alasan untuk menggunakan cookie - hanya meneruskan info dalam mekanisme yang Anda gunakan. Juga, cookie akan tetap ada setelah halaman hilang - bukan apa yang dimaksudkan dalam pertanyaan ini.
ToolmakerSteve

Jawaban:

90

Anda tidak dapat meneruskan nilai variabel dari halaman JavaScript kode saat ini ke halaman saat ini Kode PHP ... Kode PHP berjalan di sisi server, dan tidak tahu apa-apa tentang apa yang terjadi di sisi klien.

Anda perlu meneruskan variabel ke kode PHP dari formulir HTML menggunakan mekanisme lain, seperti mengirimkan formulir menggunakan metode GET atau 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 Kuznetsov
sumber
@Sergey, saya telah menggunakan formulir pengiriman di sini dengan metode POST, saya tidak tahu mengapa itu tidak berhasil. Apa kamu tahu kenapa? Dan bagaimana cara mengatasinya?
SUN Jiangong
@sergey, jadi saya harus menggunakan ajax? Sebenarnya, saya cukup akrab dengan itu.
SUN Jiangong
Sebenarnya, saya telah menggunakan metode Anda di kotak pilih satu tingkat terakhir. Tapi sekarang saya telah membuat kotak pilih tiga-rantai, jadi saya tidak dapat menggunakan metode Anda.
SUN Jiangong
Pada titik ini: Ya, Anda perlu menggunakan teknologi AJAX. Jika Anda memiliki masalah dengan realisasi, saya pikir saya dapat membantu.
Sergey Kuznetsov
3
@MadaraUchiha OP telah menggunakan mysql_fungsi; itu tidak akan menjadi tujuan menjawab pertanyaan ini dengan penulisan ulang lengkap.
Ja͢ck
26

Cukup simpan dalam 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=/";
}

Dan kemudian membacanya dengan PHP:

<?PHP
   $_COOKIE["height"];
?>

Ini bukan solusi yang cantik, tetapi berhasil.

Kristen
sumber
2
Akhirnya! sebuah pilihan yang bekerja! Saya sudah mencari berjam-jam untuk pemilihan sekarang, membuat game dan ingin mengirim skor tertinggi ke database, memperbaikinya sekarang! Bersulang!
Cid-El
1
sebenarnya, ini solusi hebat! beralih dari php ke javascript itu mudah. dari javascript ke php tidak mudah. menggunakan cookie itu sederhana, elegan. tidak bs .. !! tentu saja jika klien mematikan cookie ,,, itu masalah yang harus ditangani dengan default ..
JamesAD-0
Bisakah Anda memberi tahu saya cara menggunakan hal $ _COOKIE ["height"] untuk mendapatkan nama, nilai di dalamnya? Terima kasih. Tidak bekerja untukku.
Zac
4
Terlepas dari semua upvotes, ini bukan solusi yang baik. Alasan: cookie tidak terlihat oleh server sampai waktu berikutnya halaman diminta oleh browser . Itu selalu "satu di belakang". Pertama kali halaman dibuka di browser, tidak akan ada cookie sama sekali. Apakah ini dapat diterima? Lain kali halaman dibuka di browser, akan ada cookie dari pertama kali. Untuk nilai konstan , seperti contoh ini, itu mungkin dapat ditoleransi (meskipun tidak berfungsi pertama kali !!). Sekarang pertimbangkan nilai dinamis , seperti datetime saat ini. php akan melihat datetime SEBELUMNYA, tidak sekarang. Gunakan ajax.
ToolmakerSteve
20

Ada beberapa cara untuk mengirimkan variabel dari JavaScript ke PHP (bukan halaman saat ini, tentu saja).

Anda bisa:

  1. Kirim informasi dalam formulir sebagaimana dinyatakan di sini (akan menghasilkan penyegaran halaman)
  2. Pass it in Ajax (beberapa posting ada di sini tentang itu) (tanpa refresh halaman)
  3. Buat permintaan HTTP melalui permintaan XMLHttpRequest (tanpa refresh halaman) seperti ini:

 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();

Saya yakin ini bisa dibuat untuk terlihat lebih menarik dan mengulangi semua variabel dan yang lainnya - tapi saya telah membuatnya dasar untuk membuatnya lebih mudah untuk dipahami bagi para pemula.

pengguna1849393
sumber
bagaimana tentang bagaimana saya mendapatkan array db dan menyebarkannya di javascript setiap kali saya mengirimkan formulir baru. maka variabel dalam javascript juga akan berubah. bagaimana? tolong aku. :(
Vincent
3
Ajax sebenarnya XMLHttpRequest, yang terakhir hanya istilah teknis untuk itu.
Alex C.
14

Berikut adalah contoh Bekerja: Dapatkan nilai variabel javascript pada halaman yang sama di php.

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

<?php
echo "<script>document.writeln(p1);</script>";
?>
Arslan Tabassum
sumber
1
Saya mencoba konsep ini kemudian benar-benar berhasil, tetapi jika saya coba seperti ini: <? Php var x = <script> document.writeln (p1); </script> ";?>, Lalu echo x; Tidak berfungsi. Apakah Anda punya cara lain?
Juna serbaserbi
3
Anda dapat mencoba seperti ini <script> var p1 = "sukses"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; echo $ x; ?>
Arslan Tabassum
3
Php dalam hal ini hanyalah gema javascript ke halaman sebagai string. Javascript tidak diteruskan ke php.
Ben
Ya, itulah yang perlu kita lakukan ... kadang-kadang kita perlu menggunakan nilai JavaScript di php pada halaman yang sama & tanpa menyegarkan halaman ... maka itu akan bekerja seperti pesona .. :)
Arslan Tabassum
1
@ArslanTabassum Tidak, Anda salah paham komentar. php tidak pernah melihat nilai p1. echo "<script>document.writeln(p1);</script>";menggunakan variabel javascript p1dalam javascript , bukan dalam php. document.writelnadalah fungsi javascript , yang Anda jalankan, di browser, saat browser sedang membangun halaman HTML.
ToolmakerSteve
6

PHP berjalan di server sebelum halaman dikirim ke pengguna, JavaScript dijalankan di komputer pengguna setelah diterima, sehingga skrip PHP sudah dijalankan.

Jika Anda ingin meneruskan nilai JavaScript ke skrip PHP, Anda harus melakukan XMLHttpRequest untuk mengirim data kembali ke server.

Berikut pertanyaan sebelumnya yang dapat Anda ikuti untuk informasi lebih lanjut: Tutorial Ajax

Sekarang jika Anda hanya perlu mengirimkan nilai formulir ke server, Anda juga bisa melakukan posting bentuk normal, yang melakukan hal yang sama, tetapi seluruh halaman harus di-refresh.

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

Mengklik kirim akan mengirimkan halaman, dan mencetak data yang dikirimkan.

Derek H
sumber
1
@ Zurahn, ya, mungkin saya mencoba menggunakan XMLHttpRequest, jadi saya tidak bisa meneruskan nilai javascript ke skrip php di halaman yang sama menggunakan javascript? Saya telah mencari banyak, seseorang mengatakan itu bisa dilakukan dengan input tersembunyi di formulir. Apakah saya perlu mencoba solusi ini?
SUN Jiangong
6

Saya mencoba untuk mencari tahu sendiri dan kemudian menyadari bahwa masalahnya adalah ini semacam cara mundur untuk melihat situasi. Daripada mencoba untuk mengirimkan hal-hal dari JavaScript ke php, mungkin yang terbaik adalah sebaliknya, dalam banyak kasus. Kode PHP dijalankan di server dan membuat kode html (dan mungkin juga skrip java). Kemudian browser memuat halaman dan mengeksekusi html dan script java

Sepertinya cara yang masuk akal untuk mendekati situasi seperti ini adalah dengan menggunakan PHP untuk membuat JavaScript dan html yang Anda inginkan dan kemudian menggunakan JavaScript di halaman untuk melakukan apa pun yang tidak bisa dilakukan oleh PHP. Sepertinya ini akan memberi Anda manfaat dari PHP dan JavaScript dengan cara yang cukup sederhana dan lurus ke depan.

Satu hal yang telah saya lakukan yang memberikan tampilan melewatkan hal-hal ke PHP dari halaman Anda dengan cepat adalah menggunakan tag gambar html untuk memanggil kode PHP. Sesuatu seperti ini:

<img src="pic.php">

Kode PHP di pic.php sebenarnya akan membuat kode html sebelum halaman web Anda bahkan dimuat, tetapi kode html itu pada dasarnya dipanggil saat itu juga. Kode php di sini dapat digunakan untuk membuat gambar pada halaman Anda, tetapi dapat memiliki perintah yang Anda suka selain itu di dalamnya. Mungkin itu mengubah isi beberapa file di server Anda, dll. Sisi baiknya adalah kode php dapat dieksekusi dari html dan saya menganggap JavaScript, tetapi sisi bawahnya adalah bahwa satu-satunya output yang dapat diletakkan di halaman Anda adalah gambar. Anda juga memiliki opsi meneruskan variabel ke kode php melalui parameter di url. Penghitung halaman akan menggunakan teknik ini dalam banyak kasus.

Terry Prothero
sumber
5

Kami dapat dengan mudah memberikan nilai bahkan pada halaman yang sama / berbeda menggunakan cookie yang ditunjukkan dalam kode sebagai berikut (Dalam kasus saya, saya menggunakannya dengan integrasi 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);
        });
    }
}

Dan saya sudah mengaksesnya (dalam file apa pun) menggunakan -

<?php 
    if(isset($_COOKIE['fbdata'])) { 
        echo "welcome ".$_COOKIE['fbdata'];
    }
?>
Tushar Walzade
sumber
5

Begini cara saya melakukannya (saya perlu memasukkan zona waktu lokal ke 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);
VisionQuest
sumber
2

Apakah fungsi Anda, yang menetapkan nilai formulir tersembunyi, dipanggil? Tidak ada dalam contoh ini. Anda seharusnya tidak memiliki masalah dalam memodifikasi nilai tersembunyi sebelum memposting formulir kembali ke server.

pestilence669
sumber
@perstilence, Anda benar, saya tidak memanggil fungsi. Apakah Anda tahu cara menyebutnya di php?
SUN Jiangong
hmm Sepertinya Anda ingin menyebutnya ketika seseorang memilih sesuatu di formulir Anda / penangan onClick. Menyebutnya dari PHP tidak masuk akal. Seseorang memilih nilai formulir, fungsi Anda diaktifkan, memperbarui nilai formulir tersembunyi, lalu membuka jalan ke php pada formulir posting. Tidak?
pestilence669
@pestilence, saya ingin membiarkan seseorang memilih item di kotak pilih, dan ketika saya mengklik tombol kirim, hasil pencarian akan ditampilkan dalam tabel. Jadi di backend, ketika saya memilih item, nilainya akan diteruskan ke permintaan mysql di php sebagai variabel. Ini yang ingin saya lakukan. Tapi sepertinya saya tidak dapat menemukan solusi dalam javascript. Apakah Anda punya petunjuk?
SUN Jiangong
Ya, memposting atau mendapatkan metode dalam formulir akan diterima jika berfungsi.
SUN Jiangong
2

Kode Anda memiliki beberapa hal yang salah dengannya.

  • Anda mendefinisikan fungsi JavaScript, func_load3 (), tetapi jangan menyebutnya.
  • Fungsi Anda didefinisikan di tempat yang salah. Ketika didefinisikan di halaman Anda, objek HTML yang dirujuknya belum dimuat. Sebagian besar kode JavaScript memeriksa apakah dokumen sudah dimuat penuh sebelum dieksekusi, atau Anda bisa memindahkan kode Anda melewati elemen-elemen yang dirujuk di halaman.
  • Formulir Anda tidak memiliki sarana untuk mengirimkannya. Perlu tombol kirim.
  • Anda tidak memeriksa apakah formulir Anda telah dikirimkan.

Dimungkinkan untuk mengatur variabel JavaScript dalam variabel tersembunyi dalam formulir, lalu mengirimkannya, dan membaca nilai kembali di PHP. Berikut adalah contoh sederhana yang menunjukkan ini:

<?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;
?>
pengguna3822447
sumber
2

saat halaman Anda memuat kode PHP pertama kali dijalankan dan atur tata letak lengkap halaman web Anda. setelah tata letak halaman, itu mengatur memuat JavaScript. sekarang JavaScript langsung berinteraksi dengan DOM dan dapat memanipulasi tata letak tetapi PHP tidak bisa perlu menyegarkan halaman. Satu-satunya cara adalah me-refresh halaman Anda ke dan melewati parameter dalam URL halaman sehingga Anda bisa mendapatkan data melalui PHP. Jadi kami menggunakan AJAX untuk berinteraksi Javascript dengan PHP tanpa memuat ulang halaman. AJAX juga dapat digunakan sebagai API. satu hal lagi jika Anda sudah mendeklarasikan variabel dalam PHP. sebelum memuat halaman maka Anda dapat menggunakannya dengan contoh Javascript Anda.

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

kode di atas benar dan akan berfungsi. tetapi kode di bawah ini benar-benar salah dan tidak akan pernah berhasil.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • Berikan nilai dari JavaScript ke PHP melalui AJAX

    itu adalah cara paling aman untuk melakukannya. karena konten HTML dapat diedit melalui alat pengembang dan pengguna dapat memanipulasi data. jadi lebih baik menggunakan AJAX jika Anda ingin keamanan atas variabel itu. Jika Anda seorang pemula untuk AJAX tolong pelajari AJAX itu sangat sederhana.

Cara terbaik dan paling aman untuk mengirimkan variabel JavaScript ke PHP adalah melalui AJAX

contoh AJAX sederhana

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);
            }
            });
  • Nilai PASS dari javascript ke php melalui bidang tersembunyi.

jika tidak, Anda dapat membuat input HTML tersembunyi di dalam formulir Anda. Suka

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

kemudian melalui jQuery atau javaScript meneruskan nilainya ke bidang tersembunyi. Suka

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

Sekarang ketika Anda mengirimkan formulir, Anda bisa mendapatkan nilai dalam PHP.

Sayed Mohd Ali
sumber
1
Terima kasih. Sangat membantu. Metode jQuery tidak membiarkan Anda meneruskan data yang dihasilkan saat halaman berjalan? Anda tidak dapat mengatur bidang input ke nilai & mengambilnya dengan php? Ini adalah salah satu contoh Ajax paling jelas yang pernah saya lihat. Saya tak sabar untuk mencobanya.
ikal
1

Mungkin Anda bisa menggunakan metode jquery serialize () sehingga semuanya akan berjalan sekaligus.

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

// dengan cara ini Anda bisa mendapatkan nilai tersembunyi juga di sisi server.

Satyapriya Mishra
sumber
0

Solusi yang jelas ini tidak disebutkan sebelumnya. Anda juga dapat menggunakan cookie untuk meneruskan data dari browser kembali ke server.

Cukup tetapkan cookie dengan data yang ingin Anda sampaikan ke PHP menggunakan javascript di browser.

Kemudian, cukup baca cookie ini di sisi PHP.

Tim
sumber
. . . apakah Anda ingin memberikan contoh dan mungkin satu atau dua tautan yang relevan? (Lihat Cara Menjawab .)
ashleedawg
0

Kami tidak dapat meneruskan nilai variabel JavaScript ke kode PHP secara langsung ... Kode PHP berjalan di sisi server, dan tidak tahu apa-apa tentang apa yang terjadi di sisi klien.

Jadi lebih baik menggunakan AJAX untuk mem-parsing nilai JavaScript ke dalam Kode php.

Atau sebagai alternatif kita dapat melakukan ini dengan bantuan COOKIES dalam kode kita.

Terima kasih & Ceria.

Rohit Saini
sumber