国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

大規(guī)模動態(tài)填入HTML表單:透過PHP中的SQL值實現(xiàn)
P粉765570115
P粉765570115 2023-09-10 17:28:20
0
1
738

這個問題更多與我希望在「SCALE」方面實現(xiàn)的過程/邏輯相關(guān),而不是如何編寫程式碼。

在WordPress中,我有幾個以HTML形式加載的表單,當用戶創(chuàng)建一個自定義文章(對於不熟悉CMS的人來說,實際上是一個新的數(shù)據(jù)庫條目)來記錄一個新的“事件”時載入。我不想手動映射所有內(nèi)容,因為這是使用update_post_meta()來設(shè)定資料庫條目/文章的名稱和值- 所以當提交表單時,我使用php循環(huán)foreach ($_POST as $ name => $value) {來填入此事件的所有資料庫表。

這個方法很好,但是現(xiàn)在,如果用戶保存表單並稍後回來編輯它,我希望如果存在值,像這樣回顯:

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

同樣,這個方法也很好,但是我在這個頁面上有近500個字段,所以為每個字段手動設(shè)置唯一變量(在這種情況下是$reported_by)將花費我很長時間,基本上會增加程式碼庫近50%,使其難以維護且效率低。

對於如何解決這個問題有什麼想法嗎?可以理解的是,我可以透過php建立表單並在HTML中回顯,但這也感覺像是一個非常手動的過程。 PHP是伺服器端的,所以我不能輕鬆地在客戶端取得標籤/輸入的名稱值,除非使用AJAX,但我覺得這也會變得相當手動。

所以無論如何,我都面臨著很多重複勞動,除非有一種方法可以使這個過程更容易擴展到所有500個字段,而不需要我手動設(shè)定變數(shù)名稱。

謝謝您的時間!

P粉765570115
P粉765570115

全部回覆(1)
P粉308089080

首先要注意的是,你其實並不需要為每個表單輸入項目建立一個不同命名的局部變數(shù)。也就是說,不需要這樣寫:

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

你可以這樣寫:

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

為什麼這樣有幫助呢?因為現(xiàn)在只有兩個與輸入項目相關(guān)的內(nèi)容:

  • 標籤「報告人(全名)」
  • 欄位名稱“reported_by”,在多個地方使用

這兩個都只是字串,所以很容易提取到PHP變數(shù):

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

這些看起來很像參數(shù),所以讓我們把它變成一個函數(shù),同時記得也傳入$incident_id

<?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', '報告人(全名)');

現(xiàn)在,你只需要呼叫display_input函數(shù)500次就可以顯示500個輸入項目。為了避免這樣,可以使用一個陣列和foreach迴圈:

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

然後,你可以從設(shè)定檔或資料庫表中取得數(shù)組,而不是硬編碼。你已經(jīng)自動化了重複的部分(渲染HTML的細節(jié)),只剩下「有趣」的部分:定義要顯示的欄位清單。

如果某些欄位需要稍微不同,你可以為函數(shù)(和配置陣列)添加一些額外選項,但只要變化不多,程式碼應(yīng)該保持相當簡單明了。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板