Kesalahan saat mendapatkan nilai dari URL menggunakan PHP dan mengirimkannya ke variabel javascript

Saya mencoba mendapatkan variabel php dari url menggunakan $_REQUEST ke javascript sehingga saya dapat mengirimkannya melalui Ajax.

Di bagian atas halaman saya, saya memiliki:

<?php
  include_once('../php/connection.php');
  include_once('../php/getDiagnosis.php');
  $pid = $_REQUEST['pid'];

?>

Dan di Bagian Java Script saya punya:

  <script src="../js/history.js"></script>

Dan di history.js:

var addHistory = function()
{
  var patient_medication = $("#patient_medicationn").val();
  var disease = $("#disease").val();
  var patient_side_effect = $("#patient_side_effect").val();

  var pid = '<?php echo $pid;?>';
  console.log(pid);

  if(disease=="select")
  {
    $("#disease").css('border-color', 'red');
    $("#disease").focus();
  }

  else
  {
    $.ajax({
      url: '../php/history.php',
      data: {pid: pid, patient_medication: patient_medication, disease: disease, patient_side_effect: patient_side_effect},
      type: 'POST',
      dataType: 'TEXT',

      success:function(resp)
      {

      },
      error:function(resp)
      {
        alert("Information have not been added, please try again");
      }
    })
  }
}
$(document).ready(function()
{

  $("#add_history").on('click', addHistory);
  $("#patient_medication").on('keypress', function(event)
  {
    if(event.which==13)
    {
        $("#add_history").click();
    }
  })
  $("#patient_side_effect").on('keypress', function(event)
  {
    if(event.which==13)
    {
        $("#add_history").click();
    }
  })
});

Hasil di konsol adalah:


person alim1990    schedule 23.06.2017    source sumber
comment
File JS Anda mungkin tidak dikompilasi di sisi server, sehingga kode PHP tidak dijalankan.   -  person Peter M.    schedule 23.06.2017
comment
Apakah ada cara untuk memperbaikinya ?   -  person alim1990    schedule 23.06.2017
comment
Anda harus mencoba tautan ini. Ini akan lebih mudah diurutkan. https://stackoverflow.com/questions/9653651/termasuk-php-variables-in-an-external-js-filehttp://   -  person Ankesh Vaishnav    schedule 23.06.2017
comment
Ada cara yang baik untuk memperbaikinya - silakan periksa jawaban saya.   -  person Curious Mind    schedule 23.06.2017
comment
Harap pastikan history.php Anda memeriksa apakah pengguna yang membuat permintaan memiliki izin untuk melihat riwayat yang mereka minta. Kalau tidak, siapa pun bisa mendapatkan sejarah hanya dengan memiliki pid (atau menebaknya). Anda dapat melakukan ini dengan variabel sesi.   -  person Marcelo Staudt    schedule 23.06.2017


Jawaban (5)


File JS Anda mungkin tidak dikompilasi di sisi server, sehingga kode PHP tidak dijalankan.

Salah satu cara untuk menyiasatinya adalah dengan menggunakan bidang tersembunyi.

Di halaman HTML Anda (yang mungkin sudah dikompilasi), Anda dapat melakukan sesuatu seperti ini:

<input type="hidden" name="someField" id="someField" value="<?php echo $pid; ?>">

Di file JS Anda, Anda dapat melakukan ini:

var pid = $('#someField').val();
person Peter M.    schedule 23.06.2017

Anda tidak dapat melakukan cara ini. Cara yang mungkin adalah dengan membuat variabel global yang dapat diakses dari file JS Anda. Sebelum baris ini

<script src="../js/history.js"></script>

Tambahkan ini

<script>var pid = '<?php echo $pid;?>';</script>

dan sekarang pid tersedia di file JS.

person Arpad Hollo    schedule 23.06.2017

Seperti yang dikatakan @Peter m, file .js Anda tidak diurai secara default, Anda dapat mengubah konfigurasi Apache untuk mengurai file .js (tidak disarankan). Apa yang akan saya lakukan, cukup jadikan variabel Anda global dan definisikan dalam file php atau teruskan variabel sebagai argumen ke fungsi.

person Marcelo Staudt    schedule 23.06.2017
comment
Atau Anda dapat memasukkan file php seperti file js - periksa jawaban saya. - person Curious Mind; 23.06.2017

Anda dapat melakukannya dengan 3 perubahan kecil:

Ubah ini:

<script src="../js/history.js"></script> 

untuk ini:

<script type="text/javascript" src="../js/history.php?pid=$pid"></script>

Dan kemudian ganti nama history.js menjadi history.php.

EDIT MULAI

4 baris pertama dari file js Anda sebelumnya, sekarang history.php seharusnya:

<?php
    header('Content-Type: application/javascript');
    $pid = $_GET['pid'];
?>

EDIT SELESAI

Ujilah - itu akan berhasil.

Tidak perlu mengkonfigurasi ulang Apache untuk mengurai js - juga mengurai semua file js sebagai file php akan sangat meningkatkan beban server.

Dengan cara ini, browser akan melihatnya sebagai file js dan tidak ada beban tambahan di server.

person Curious Mind    schedule 23.06.2017

Untuk masalah keamanan dan pemeliharaan kode, jangan pernah mencampurkan sisi server dengan kode sisi klien sedemikian rupa, Lewatkan variabel sebagai atribut metode saja

JS:

var addHistory = function(pId){
   // treat as attribute
   // ...
}

Mulai JS:

$(document).ready(function(){


// some generic function used to parse url
// You can google JS url parser library for more functionality
function getQueryParam(url, key) {
  var queryStartPos = url.indexOf('?');
  if (queryStartPos === -1) {
    return;
  }
  var params = url.substring(queryStartPos + 1).split('&');
  for (var i = 0; i < params.length; i++) {
    var pairs = params[i].split('=');
    if (decodeURIComponent(pairs.shift()) == key) {
      return decodeURIComponent(pairs.join('='));
    }
  }
}
// use on click, bind clicks to body avoiding future event collisions
$('body').on('click','#add_history', addHistory, function(){
   // get parameter from url
   var pId = getQueryParam(window.location, 'pid');
   addHistory(pId); 
});

});
person George Dryser    schedule 23.06.2017