Rumah  >  Soal Jawab  >  teks badan

Malas menghantar pembolehubah kepada elemen HTML dalam halaman PHP atau menggantikannya dengan nilai yang dikemas kini

<p><br /></p> <pre class="brush:bash;toolbar:false;">/public/register.php ## [1] borang pendaftaran "awam" /public/js/checkout.js ## [2] pemprosesan pembayaran "awam". /src/register.php ## [3] "peribadi" pemprosesan tambahan </pra> <ul> <li>[1] Muatkan melalui <kod><skrip src="js/checkout.js"></script></code> <li>[1] melalui <kod>memerlukan __DIR__ . </ul> <p>[1] mengandungi elemen HTML (disertakan sebagai kod HTML dalam fail PHP, iaitu di luar <code><php ... ?></code> tag): </p> ; <pre class="brush:html;toolbar:false;"><div id="secret" style="display: none;"> <?php echo htmlspecialchars($secret_var); ?> </div> </pra> <p><kod>$secret_var</code> </p> <p>[2] Fail JS ini mengandungi </p> <pre class="brush:js;toolbar:false;">var div = document.getElementById("rahsia"); var secret_var = div.textContent; console.log(secret_var) </pra> <p>[3] mengandungi</p> <pre class="brush:php;toolbar:false;">session_start(); // Kod pemprosesan rakan kongsi pembayaran, respons $secret_var = json_encode(array(secret_var); $_SESSION['secret_var'] = $secret_var; </pra> <p><kod>$secret_var</code> dihantar sebagai <kod>$_SESSION</kod> </p> <p>Apabila menggemakan <code>$secret_var</code> dalam penyemak imbas daripada <code>console.log</code> penyata <code>null</code> </p> <p>Apabila bergema <code>$secret_var</code> daripada <code>src/register.php</code> (ditunjukkan dalam halaman <code>registration.php</code> ), yang mempunyai nilai (rentetan) yang betul. </p> <p>Bagaimanakah saya boleh menangguhkan penghantaran <kod>$secret_var</code> kepada elemen <kod>#secret</code> </p>
P粉253800312P粉253800312450 hari yang lalu539

membalas semua(1)saya akan balas

  • P粉895187266

    P粉8951872662023-08-18 12:40:57

    Rakanya anda menghadapi masalah dengan susunan pelaksanaan, seperti tiada <div id="secret">时,[2]脚本就已经执行了。您可以在输出<script src="js/checkout.js"></script>之前,简单地在[1]处添加类似于<script>var secret_var = <?= json_encode($secret_var); ?>;</script>的内容,这样它就在checkout.js执行之前就是公开的并且已知的,而且已经作为变量存在,无需读取元素内容。或者只需使用事件,如window.onload dalam DOM untuk melaksanakan [2] pembacaan elemen.

    Jika nilai rahsia itu berubah dan anda perlu mengemas kininya, anda boleh menyemak perubahan secara berkala atau lebih baik meminta nilai terkini sebelum menggunakannya.

    Sila ambil perhatian bahawa apa sahaja yang anda keluarkan kepada pelanggan bukan lagi rahsia, jika anda benar-benar ingin melindungi nilai anda perlu menyimpannya hanya pada bahagian pelayan, yang sangat penting dalam kes seperti kunci API untuk gerbang pembayaran dll. . Bahagian pelayan bermaksud menyimpan rahsia dalam pangkalan data atau sesi. Kemudian apabila anda perlu berinteraksi dengan perkhidmatan jauh, hanya panggil skrip PHP (cth. ajax) untuk melaksanakan tugas itu di bahagian pelayan, dengan cara ini anda memisahkan penggunaan rahsia ke bahagian pelayan sahaja dan kemudian anda tidak perlu hantar ke terminal pelanggan atau minta kemas kini.

    balas
    0
  • Batalbalas