JavaScript'den Echo PHP değişken?

5 Cevap php

Ben de bazı JavaScript kodu ile bir PHP sayfası var, ama aşağıda bu JavaScript kodu çalışmak için görünmüyor, ya da belki bir yol gidiyorum!

Ben böyle bir şey çalışıyorum:

  var areaOption=document.getElementById("<?php echo @$_POST['annonsera_name']?>");
  areaOption.selected=true;

Ayrıca ben denedim, ama bu sadece bir BOŞ uyarı kutusu uyarır:

    alert (<?php echo $test;?>); // I have tried this with quotes, double-quotes, etc... no luck

Burada tamamen yanlış düşünüyorum?

UPDATE

Bazı PHP kodu:

    <?php 
        $test = "Hello World!";
    ?>

5 Cevap

İkinci örnekte, dize tırnak (- set vermedi hangi nedenle H bir değişken olarak yorumlanır) eksik.

Bu test:

alert (<?php echo "'H'";?>);

VEYA

alert ('<?php echo "H";?>');

PHP sunucu tarafında çalışan ve JavaScript istemci tarafında çalışıyor.

Süreç PHP istemci tarafında idam edilecek Javascript üretir olmasıdır.

Sadece koduna bakarak oluşturulan JS kontrol etmek gerekir. JS bazı PHP değişkenlere dayanır Tabii ki, onlar before JS çıktı instanciated gerekir.

<?php
$test = 'Hello world';
?>
<html>
    <body>
        <script>
            alert('<?php echo $test; ?>');
        </script>
    </body>
</html>

çalışacaktır ancak

<html>
    <body>
        <script>
            alert('<?php echo $test; ?>');
        </script>
    </body>
</html>
<?php
$test = 'Hello world';
?>

olmaz

json_encode bir JavaScript değişmez bazı metin (ya da herhangi başka bir veri türü) dönüştürmek için kullanın. Don't sadece yankılandı dize tırnak koymak - dize içinde bir teklifi, ya da bir yeni satır, ya da ters bölü ne olur? En iyi durum kod başarısız, büyük bir eski cross-site betik güvenlik delik var kötü durumda.

Bu yüzden,

<?php
    function js($o) {
        echo json_encode($o, JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP);
    }
?>
<script type="text/javascript">
    var areaOption= document.getElementById(<?php js($_POST['annonsera_name']); ?>);
    areaOption.selected= true;
    alert (<?php js('Hello World'); ?>);
</script>

Sizin @$_POST aldığınız (veya beklediklerini) olduğunu gösterir kullanarak hataları - değeri doğru çıkış olup olmadığını görmek için oluşturulan kaynak kontrol edin. Aksi document.getElementById başarısız olur ve hiçbir çıkış almak istiyorum.

Eğer uzatma js ise, php bu dosyada çalışmaz.

Nedeni olarak, php bu gerekiyordu dosyaları ayrıştırır. Ayrıştırmak php dosya türleri (dedikleri ne olursa olsun ya da direktifleri,) AddType komutları kullanarak httpd.conf yapılandırılır.

Yani 3 seçenek var:

  • dosyaları php listesine filetype js eklemek ayrıştırmak (kötü, çok kötü)
  • Bazı php dosyasına komut inline yapmak
  • script.js.php için dosyayı yeniden adlandırın ve dosyanın başında, bu yüzden gibi, içerik türünü belirtin:

    ?

Şerefe!