cari

Rumah  >  Soal Jawab  >  teks badan

Mengisi borang HTML secara dinamik pada skala: melalui nilai SQL dalam PHP

Soalan ini lebih berkaitan dengan proses/logik yang ingin saya laksanakan dari segi "SKALA" berbanding cara menulis kod.

Dalam WordPress, saya mempunyai beberapa borang yang dimuatkan sebagai HTML untuk log "acara" baharu apabila pengguna mencipta catatan tersuai (sebenarnya entri pangkalan data baharu untuk anda yang tidak biasa dengan CMS) masa untuk dimuatkan. Saya tidak mahu memetakan semuanya secara manual kerana ini menggunakan update_post_meta()来设置数据库条目/文章的名称和值 - 所以当提交表单时,我使用php循环foreach ($_POST as $name => $value) { untuk mengisi semua jadual pangkalan data untuk acara ini.

Ini berfungsi dengan baik, tetapi sekarang, jika pengguna menyimpan borang dan kembali untuk mengeditnya kemudian, saya mahu nilai itu digemakan semula seperti ini jika wujud:

<label for="reported_by">报告人(全名)</label>
<?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?>
<input type="text" name="reported_by" value="<?php echo $reported_by; ?>">

Sekali lagi, pendekatan ini juga berfungsi dengan baik, tetapi saya mempunyai hampir 500 medan pada halaman ini, jadi menetapkan pembolehubah unik secara manual (dalam kes ini $reported_by) untuk setiap medan akan mengambil masa yang lama dan pada asasnya Meningkatkan asas kod sebanyak hampir 50%, menyukarkan penyelenggaraan dan tidak cekap.

Ada idea bagaimana untuk menyelesaikan masalah ini? Difahamkan, saya boleh membina borang melalui php dan menggemakannya dalam HTML, tetapi ini juga terasa seperti proses yang sangat manual. PHP adalah bahagian pelayan, jadi saya tidak boleh dengan mudah mendapatkan nilai nama tag/input pada bahagian klien, melainkan menggunakan AJAX, tetapi saya rasa itu juga akan menjadi agak manual.

Jadi bagaimanapun, saya berhadapan dengan banyak pertindihan usaha, melainkan ada cara untuk menjadikan proses ini lebih mudah untuk skala kepada semua 500 medan tanpa memerlukan saya menetapkan nama pembolehubah secara manual.

Terima kasih atas masa anda!

P粉765570115P粉765570115430 hari yang lalu602

membalas semua(1)saya akan balas

  • P粉308089080

    P粉3080890802023-09-11 11:38:54

    Perkara pertama yang perlu diambil perhatian ialah anda sebenarnya tidak perlu mencipta pembolehubah tempatan yang dinamakan berbeza untuk setiap input borang. Dengan kata lain, tidak perlu menulis seperti ini:

    <label for="reported_by">报告人(全名)</label>
    <?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?>
    <input type="text" name="reported_by" value="<?php echo $reported_by; ?>">

    Anda boleh menulis seperti ini:

    <label for="reported_by">报告人(全名)</label>
    <?php $current_value = get_post_meta($incident_id, 'reported_by', true); ?>
    <input type="text" name="reported_by" value="<?php echo $current_value; ?>">

    Mengapa ini membantu? Kerana sekarang hanya ada dua item yang berkaitan dengan entri ini:

    • Tag "Pemberita (nama penuh)"
    • Nama medan "dilaporkan_oleh", digunakan di berbilang tempat

    Kedua-dua ini hanyalah rentetan, jadi mudah untuk diekstrak ke dalam pembolehubah PHP:

    <?php
    $field_name = 'reported_by';
    $label = '报告人(全名)';
    ?>
    <label for="<?php echo $field_name; ?>"><?php echo htmlspecialchars($label); ?></label>
    <?php $current_value = get_post_meta($incident_id, $field_name, true); ?>
    <input type="text" name="<?php echo $field_name; ?>" value="<?php echo $current_value; ?>">

    Ini kelihatan seperti parameter, jadi mari kita ubah ini menjadi fungsi, ingat untuk lulus $incident_id juga:

    <?php
    function display_input($incident_id, $field_name, $label) {
        ?>
    <label for="<?php echo $field_name; ?>"><?php echo htmlspecialchars($label); ?></label>
    <?php $current_value = get_post_meta($incident_id, $field_name, true); ?>
    <input type="text" name="<?php echo $field_name; ?>" value="<?php echo $current_value; ?>">
        <?php
    }
    display_input($incident_id, 'reported_by', '报告人(全名)');

    Kini, anda hanya perlu memanggil gelung display_input函数500次就可以显示500个输入项。为了避免这样,可以使用一个数组和foreach:

    $fields = [
        'reported_by' => '报告人(全名)',
    ];
    foreach ( $fields as $field_name => $label ) {
        display_input($incident_id, $field_name, $label);
    }

    Anda kemudian boleh mendapatkan tatasusunan daripada fail konfigurasi atau jadual pangkalan data dan bukannya pengekodan keras. Anda telah mengautomasikan bahagian berulang (butiran pemaparan HTML), hanya meninggalkan bahagian "seronok": mentakrifkan senarai medan untuk dipaparkan.

    Jika sesetengah medan perlu berbeza sedikit, anda boleh menambah beberapa pilihan tambahan pada fungsi (dan tatasusunan konfigurasi), tetapi selagi tidak terdapat terlalu banyak perubahan, kod itu harus kekal agak mudah dan mudah.

    balas
    0
  • Batalbalas