大規模動態填入HTML表單:透過PHP中的SQL值實現
P粉765570115
P粉765570115 2023-09-10 17:28:20
0
1
551

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

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

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

<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個字段,所以為每個字段手動設置唯一變量(在這種情況下是$reported_by)將花費我很長時間,基本上會增加程式碼庫近50%,使其難以維護且效率低。

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

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

謝謝您的時間!

P粉765570115
P粉765570115

全部回覆(1)
P粉308089080

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

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

為什麼這樣有幫助呢?因為現在只有兩個與輸入項目相關的內容:

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

這兩個都只是字串,所以很容易提取到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; ?>">

這些看起來很像參數,所以讓我們把它變成一個函數,同時記得也傳入$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', '报告人(全名)');

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

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

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!