JavaScript değişkenlerini PHP'ye nasıl aktarırım?


151

JavaScript değişkenlerini bir formda gizli bir girdi kullanarak PHP'ye geçirmek istiyorum.

Ama bunun değerini $_POST['hidden1']anlayamıyorum $salarieid. Bir sorun mu var?

İşte kod:

<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 değişken değerini bir çerezde saklayabilir ve daha sonra bu değişkene php çerezinde erişebilirsiniz.
shasi kanth

2
@shasikanth - bunu yapabilirsiniz , ancak çerez , sayfanın ikinci kez görüntülenmesine kadar ayarlanmayacaktır . Ve o zaman, ilk sayfa görünümünden gelen değer olacaktır - her zaman bir geride kalır. Çerez, bilgileri dinamik olarak sunucuya geri ileten bir mekanizma değildir ; Sayfayı yenilemek için başka bir şey yapmanız gerekir, örneğin bir formu POST veya Ajax araması yapmak. Ve bunlardan birini yapıyorsanız, çerez kullanmak için hiçbir neden yoktur - sadece kullandığınız mekanizma içindeki bilgileri iletin. Ayrıca, bu soruda amaçlanan değil, sayfa gittikten sonra da bir çerez kalacaktır.
ToolmakerSteve

Yanıtlar:


93

Değişken değerleri mevcut sayfa JavaScript kodundan geçerli sayfa PHP koduna geçiremezsiniz ... PHP kodu sunucu tarafında çalışır ve istemci tarafında neler olup bittiğini bilmez.

GET veya POST yöntemlerini kullanarak formu göndermek gibi başka bir mekanizma kullanarak değişkenleri HTML formundan PHP koduna aktarmanız gerekir.

<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 yöntemi ile buraya form göndermeyi kullandım, neden çalışmadığını bilmiyorum. Neden biliyor musun? Ve bunu nasıl çözebilirim?
SUN Jiangong

@sergey, ajax kullanmam gerekiyor mu? Aslında ben buna aşinayım.
SUN Jiangong

Aslında, son bir seviye seçme kutusunda yönteminizi kullandım. Ama şimdi üç zincirli bir seçim kutusu yaptım, bu yüzden yönteminizi kullanamıyorum.
SUN Jiangong

Bu noktada: Evet, AJAX teknolojisini kullanmanız gerekiyor. Farkına varmakla ilgili sorunlarınız varsa, yardım edebileceğimi düşünüyorum.
Sergey Kuznetsov

3
@MadaraUchiha OP zaten kullanılan mysql_işlevler; bu soruyu tamamen yeniden yazarak cevaplamak amaç olamaz.
Ja͢ck

28

Sadece bir çereze kaydedin:

$(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=/";
}

Ve sonra PHP ile okuyun:

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

Güzel bir çözüm değil ama işe yarıyor.


2
Nihayet! işe yarayan bir seçim! Şu anda bir seçim için saatlerdir arıyorum, bir oyun yapıyorum ve en yüksek puanı bir veritabanına göndermek istiyorum, şimdi düzelttim! Şerefe!
Cid-El

1
aslında, bu harika bir çözüm! php'den javascript'e gitmek kolaydır. javascript'ten php'ye geçmek kolay değil. çerez kullanmak basit ve zariftir. bs yok .. !! Tabii ki eğer müşteri çerezleri kapatırsa ,,, bu bir varsayılanla başa
çıkılması

Adı ve değerini almak için $ _COOKIE ["height"] şeyini nasıl kullanacağımı bana bildirir misiniz? Teşekkürler. Benim için çalışmıyor.
Zac

5
Tüm olumlu oylara rağmen, bu iyi bir çözüm değil. Sebep: Çerez, tarayıcı tarafından sayfanın bir sonraki isteğine kadar sunucu tarafından görülmez . Her zaman "bir geride" dir. Sayfa tarayıcıda ilk açıldığında herhangi bir çerez olmayacaktır. Bu kabul edilebilir mi? Sayfanın tarayıcıda bir sonraki açılışında, ilk seferinde bir çerez olacaktır. Bir için sabit bir değer, örneğin, bu örnekte olduğu gibi, bu tolere edilebilir olabilir (birinci kez çalışmıyor rağmen !!). Şimdi geçerli tarih saat gibi dinamik bir değeri düşünün . php şimdi değil ÖNCEKİ tarih saatini görecek. Ajax kullan.
ToolmakerSteve

Tanımsız dizin hatası alıyorum: yükseklik
Riska Nanda

20

Değişkenleri JavaScript'ten PHP'ye geçirmenin birkaç yolu vardır (elbette mevcut sayfaya değil).

Yapabilirdiniz:

  1. Bilgileri burada belirtildiği gibi bir formda gönderin (sayfanın yenilenmesiyle sonuçlanacaktır)
  2. Ajax'a iletin (bununla ilgili burada birkaç gönderi var) (sayfayı yenilemeden)
  3. Aşağıdaki gibi bir XMLHttpRequest isteği (sayfayı yenilemeden) aracılığıyla bir HTTP isteğinde bulunun:

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

Eminim bu daha meraklı görünmek ve tüm değişkenler ve başka şeyler arasında döngü yapmak için yapılabilir - ancak acemiler için anlaşılmasını kolaylaştırmak için temel tuttum.


db dizilerini nasıl elde edeceğim ve her yeni form gönderdiğimde javascript'e aktaracağım. daha sonra javascript'teki değişken de değişecektir. Nasıl? bana yardım et. :(
Vincent

3
Ajax aslında XMLHttpRequest'tir, ikincisi bunun için sadece teknik bir terimdir.
Alex C.

15

İşte Çalışma örneği: Aynı sayfada php'de javascript değişken değerini alın.

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

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

2
Bu kavramı denedim, sonra gerçekten işe yaradı, ancak böyle denersem: <? Php var x = <script> document.writeln (p1); </script> ";?>, Sonra echo x; Çalışmıyor. Başka bir yolun var mı?
Juna serbaserbi

4
böyle deneyebilirsiniz <script> var p1 = "success"; </script> <? php $ x = "<script> document.writeln (p1); </script>"; echo $ x; ?>
Arslan Tabassum

4
Bu durumda php, javascript'i sayfaya bir dizge olarak yansıtıyor. Javascript php'ye geçmiyor.
Ben

Evet, yapmamız gereken şey bu ... bazen aynı sayfada ve sayfayı yenilemeden php'de JavaScript değeri kullanmamız gerekir ... o zaman cazibe gibi çalışacaktır .. :)
Arslan Tabassum

2
@ArslanTabassum Hayır, yorumu yanlış anlıyorsunuz. php asla p1'in değerini görmez. echo "<script>document.writeln(p1);</script>";JavaScript değişkeni kullanır p1içinde javascript değil php,. tarayıcı HTML sayfasını oluştururken tarayıcıda yürütmekte document.writelnolduğunuz bir javascript işlevidir.
ToolmakerSteve

7

Bunu kendim anlamaya çalışıyordum ve sonra sorunun, duruma geri bakmanın bir nevi tersi bir yol olması olduğunu fark ettim. JavaScript'ten php'ye bir şeyler aktarmaya çalışmak yerine, çoğu durumda başka yoldan gitmek belki de en iyisidir. PHP kodu sunucuda çalışır ve html kodunu (ve muhtemelen java betiğini de) oluşturur. Ardından tarayıcı sayfayı yükler ve html ve java komut dosyasını çalıştırır.

Bu gibi durumlara yaklaşmanın mantıklı yolu, istediğiniz JavaScript ve html'yi oluşturmak için PHP'yi kullanmak ve ardından PHP'nin yapamadığını yapmak için sayfadaki JavaScript'i kullanmaktır. Görünüşe göre bu size hem PHP hem de JavaScript'in faydalarını oldukça basit ve doğrudan bir şekilde sağlayacak.

Yaptığım şeylerden biri, sayfanızdan PHP'ye anında bir şeyler geçirme görünümü veren bir şey, PHP kodunu çağırmak için html resim etiketini kullanmak. Bunun gibi bir şey:

<img src="pic.php">

Pic.php içindeki PHP kodu, web sayfanız daha yüklenmeden önce html kodu oluşturacaktır, ancak bu html kodu temelde anında çağrılır. Buradaki php kodu, sayfanızda bir resim oluşturmak için kullanılabilir, ancak içinde bunun dışında istediğiniz herhangi bir komuta sahip olabilir. Belki sunucunuzdaki bazı dosyaların içeriğini değiştirir, vb. Bunun iyi yanı, php kodunun html'den çalıştırılabilmesi ve JavaScript'i varsayıyorum, ancak kötü tarafı, sayfanıza koyabileceği tek çıktının bir görüntü. Ayrıca url'deki parametreler aracılığıyla değişkenleri php koduna geçirme seçeneğiniz de vardır. Sayfa sayaçları çoğu durumda bu tekniği kullanacaktır.


6

PHP, sayfa kullanıcıya gönderilmeden önce sunucuda çalışır, JavaScript, alındıktan sonra kullanıcının bilgisayarında çalıştırılır, bu nedenle PHP betiği zaten yürütülmüştür.

Bir PHP betiğine bir JavaScript değeri iletmek istiyorsanız, verileri sunucuya geri göndermek için bir XMLHttpRequest yapmanız gerekir.

Daha fazla bilgi için takip edebileceğiniz bir önceki soru: Ajax Eğitimi

Şimdi, sunucuya sadece bir form değeri iletmeniz gerekiyorsa, aynı şeyi yapan normal bir form gönderisi de yapabilirsiniz, ancak tüm sayfanın yenilenmesi gerekir.

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

Gönder düğmesine tıklamak, sayfayı gönderecek ve gönderilen verileri yazdıracaktır.


1
@Zurahn, evet, belki XMLHttpRequest'i kullanmayı denedim, bu yüzden javascript değerini javascript kullanarak aynı sayfadaki php betiğine geçiremiyorum? Çok araştırdım, birisi formda gizli girişle yapılabileceğini söylüyor. Bu çözüm furthur'u denemem gerekiyor mu?
SUN Jiangong

6

İşte bunu nasıl yaptım (PHP'ye yerel bir saat dilimi eklemem gerekiyordu:

<?php
    ob_start();
?>

<script type="text/javascript">

    var d = new Date();
    document.write(d.getTimezoneOffset());
</script>

<?php
    $offset = ob_get_clean();
    print_r($offset);

5

Aşağıdaki kodda gösterilen çerezleri kullanarak aynı / farklı sayfalarda bile değerleri kolaylıkla geçirebiliriz (Benim durumumda facebook entegrasyonu ile kullanıyorum) -

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

Ve ona (herhangi bir dosyada) şunu kullanarak eriştim -

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

4

Sayfanız ilk kez PHP kodunu yüklediğinde, web sayfanızın tam düzenini çalıştırın ve ayarlayın. sayfa düzeninden sonra JavaScript yüklenmesini ayarlar. artık JavaScript doğrudan DOM ile etkileşime girer ve düzeni değiştirebilir, ancak PHP sayfayı yenilemesine ihtiyaç duymaz. Verileri PHP yoluyla alabilmeniz için sayfanızı yenilemek ve sayfa URL'sindeki parametreleri iletmenin tek yolu vardır. Bu nedenle, Javascript ile PHP'yi sayfa yeniden yüklemeden etkileşime girmek için AJAX kullanıyoruz. AJAX, bir API olarak da kullanılabilir. Değişkeni PHP'de zaten tanımladıysanız bir şey daha var. sayfa yüklenmeden önce bunu Javascript örneğinizle kullanabilirsiniz.

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

yukarıdaki kod doğrudur ve çalışacaktır. ancak aşağıdaki kod tamamen yanlıştır ve asla çalışmayacaktır.

<script>
    var username = "syed ali";
    var <?php $myname;?> = username;
    alert(myname);
    </script>
  • JavaScript'ten PHP'ye AJAX aracılığıyla değer geçirin

    bunu yapmanın en güvenli yolu. çünkü HTML içeriği geliştirici araçlarıyla düzenlenebilir ve kullanıcı verileri değiştirebilir. bu nedenle, bu değişken üzerinde güvenlik istiyorsanız AJAX kullanmak daha iyidir. AJAX'a yeni başlayan biriyseniz lütfen AJAX'ı öğrenin çok basit.

JavaScript değişkenini PHP'ye geçirmenin en iyi ve en güvenli yolu AJAX'tır

basit AJAX örneği

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);
            }
            });
  • Gizli alanlar aracılığıyla javascript'ten php'ye PASS değeri.

aksi takdirde, formunuzun içinde gizli HTML girişi oluşturabilirsiniz. sevmek

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

daha sonra jQuery veya javaScript aracılığıyla değeri gizli alana iletin. sevmek

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

Artık formu gönderdiğinizde değeri PHP'de alabilirsiniz.


1
Teşekkür ederim. Çok yararlı. JQuery yöntemi, sayfa çalışırken oluşturulan verileri geçirmenize izin vermiyor mu? Bir giriş alanını bir değere ayarlayıp onu php ile alamazsınız? Bu gördüğüm en net Ajax örneklerinden biri. Denemek için sabırsızlanıyorum.
bukleler

2

Gizli form değerini ayarlayan fonksiyonunuz mu çağrılıyor? Bu örnekte değil. Formu sunucuya geri göndermeden önce gizli bir değeri değiştirirken sorun yaşamazsınız .


@perstilence, haklısın, işlevi aramadım. Bunu php olarak nasıl arayacağınızı biliyor musunuz?
SUN Jiangong

hmm. Görünüşe göre birisi formunuzda / onClick işleyicinizde bir şey seçtiğinde onu aramak istiyorsunuz. PHP'den çağırmak hiç mantıklı değil. Birisi bir form değeri seçer, işleviniz ateşlenir, gizli bir form değerini günceller ve ardından form postasında php'ye geçer. Hayır?
pestilence669

@pestilence, birinin seçme kutusunda bir öğe seçmesine izin vermek istiyorum ve gönder düğmesine tıkladığımda bir arama sonucu bir tabloda görüntülenecek. Yani arka uçta, öğeyi seçtiğimde, değeri php'deki bir mysql sorgusuna değişken olarak aktarılacak. Yapmak istediğim bu. Ama görünüşe göre çözümü javascript'te bulamıyorum. Herhangi bir fikrin var mı?
SUN Jiangong

Evet, formdaki gönderi ya da alma yöntemi işe yararsa kabul edilecektir.
SUN Jiangong

2

Kodunuzda birkaç yanlışlık var.

  • Bir JavaScript işlevi, func_load3 () tanımlarsınız, ancak onu çağırmazsınız.
  • İşleviniz yanlış yerde tanımlanmıştır. Sayfanızda tanımlandığında, başvurduğu HTML nesneleri henüz yüklenmemiştir. Çoğu JavaScript kodu, çalıştırılmadan önce belgenin tam olarak yüklenip yüklenmediğini kontrol eder veya kodunuzu sayfada atıfta bulunduğu öğelerin ötesine taşıyabilirsiniz.
  • Formunuzun onu göndermek için bir yolu yoktur. Gönder düğmesine ihtiyacı var.
  • Formunuzun gönderilip gönderilmediğini kontrol etmiyorsunuz.

Bir formdaki gizli bir değişkende bir JavaScript değişkeni ayarlamak, ardından onu göndermek ve değeri PHP'de geri okumak mümkündür. İşte bunu gösteren basit bir örnek:

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

1

Belki jquery serialize () yöntemini kullanabilirsiniz, böylece her şey tek seferde olur.

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

// bu şekilde gizli değeri sunucu tarafında da elde edebilirsiniz.


0

Bu açıkçası çözüm daha önce belirtilmemişti. Tarayıcıdan sunucuya geri veri geçirmek için çerezleri de kullanabilirsiniz.

Tarayıcıda javascript kullanarak PHP'ye iletmek istediğiniz verilerle bir çerez ayarlayın.

Ardından, bu çerezi PHP tarafında okuyun.


. . . bir örnek ve belki bir veya iki ilgili bağlantı vermek ister misiniz? ( Nasıl
Cevaplanacağına Bakın

0

JavaScript değişken değerlerini doğrudan PHP koduna geçiremeyiz ... PHP kodu sunucu tarafında çalışır ve istemci tarafında neler olup bittiğini bilmez.

Bu yüzden JavaScript değerini php Koduna ayrıştırmak için AJAX kullanmak daha iyidir.

Veya alternatif olarak kodumuzdaki ÇEREZLER yardımıyla bunu yapabiliriz.

Teşekkürler ve Şerefe.


0

JQuery Ajax ve POST yöntemini kullanabilirsiniz:

var obj;

                
$(document).ready(function(){
            $("#button1").click(function(){
                var username=$("#username").val();
                var password=$("#password").val();
  $.ajax({
    url: "addperson.php",
    type: "POST", 
    async: false,
    data: {
        username: username,
        password: password
    }
})
.done (function(data, textStatus, jqXHR) { 
    
   obj = JSON.parse(data);
   
})
.fail (function(jqXHR, textStatus, errorThrown) { 
    
})
.always (function(jqXHROrData, textStatus, jqXHROrErrorThrown) { 
    
});
  
 
            });
        });

JSON php betiğinden bir yanıt almak için yanıt .done()yöntemini ayrıştırın . İşte ihtiyaçlarınıza göre değiştirebileceğiniz php betiği:

<?php
     $username1 = isset($_POST["username"]) ? $_POST["username"] : '';
    
     $password1 = isset($_POST["password"]) ? $_POST["password"] : '';

$servername = "xxxxx";
$username = "xxxxx";
$password = "xxxxx";
$dbname = "xxxxx";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO user (username, password)
VALUES ('$username1', '$password1' )";

    ;  
    
    
   

if ($conn->query($sql) === TRUE) {
    
   echo json_encode(array('success' => 1));
} else{
    
    
  echo json_encode(array('success' => 0));
}





$conn->close();
?>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.