文章標題:PHP 循環生成表單時,如何將驗證錯誤信息關聯到特定表單實例

文章標題:PHP 循環生成表單時,如何將驗證錯誤信息關聯到特定表單實例

php 中使用循環生成多個表單實例,并需要將驗證錯誤信息關聯到特定表單的問題,可以使用以下方法解決。

問題描述

在循環中生成多個表單,每個表單對應一個圖片上傳。當表單驗證失敗時,需要將錯誤信息顯示在對應的表單頂部,而不是所有表單都顯示錯誤信息。

解決方案

核心思路是在表單提交時傳遞表單標識(例如,隱藏字段中的文件名),并在輸出錯誤信息前進行比對,確保錯誤信息只顯示在對應的表單實例中。

1. 修改表單輸出代碼

立即學習PHP免費學習筆記(深入)”;

在表單輸出的循環中,添加一個條件判斷,只有當提交的表單文件名與當前循環中的文件名一致時,才顯示錯誤信息。

<form method="post" enctype="multipart/form-data">     <?php          // 在表單頂部顯示錯誤信息         if(isset($_POST['upload-submit']) && isset($Error) && $_POST['image-filename'] === $db_image_filename) {             foreach($error as $msg) {                 echo "<p>* ERROR: {$msg}</p>";             }         }     ?>     <div>         <div class="form-row">             <label for="upload-details-title">圖片標題</label>             <input id="upload-details-title" type="text" name="image-title">         </div>         <div class="form-row">             <label for="upload-details-tags">逗號分隔的圖片標簽</label>             <textarea id="upload-details-tags" type="text" name="image-tags"></textarea>         </div>         <div class="form-row">             <button name="upload-submit">完成上傳</button>         </div>         <div class="form-row">             <!-- 隱藏字段 -->             <input type="hidden" name="image-filename" value="<?php echo $db_image_filename; ?>">          </div>     </div> </form>

代碼解釋:

  • isset($_POST[‘upload-submit’]):檢查表單是否已被提交。
  • isset($error):確認是否存在驗證錯誤。
  • $_POST[‘image-filename’] === $db_image_filename:比較提交的文件名和當前循環中的文件名是否一致。只有這三個條件同時滿足時,才會顯示錯誤信息。

2. PHP 驗證邏輯

在驗證邏輯中,確保 $form_filename 變量正確獲取到 POST 請求中的文件名。

<?php      if(isset($_POST['upload-submit'])) {          $image_title = $_POST['image-title'];         $image_tags = $_POST['image-tags'];         $form_filename = $_POST['image-filename']; // 來自隱藏字段          $image_title = filter_var($image_title, FILTER_SANITIZE_STRING);         $image_tags = filter_var($image_tags, FILTER_SANITIZE_STRING);         $form_filename = filter_var($form_filename, FILTER_SANITIZE_STRING);          // 示例表單驗證         if(empty(trim($image_title))){             $error[] = "圖片標題不能為空";         }          if (!isset($error)) {              try {                  $sql = "UPDATE imageposts SET                 image_title = :image_title,                 image_tags = :image_tags                 WHERE filename = :filename";                  $stmt = $connection->prepare($sql);                  $stmt->execute([                     ':image_title' => $image_title,                     ':image_tags' => $image_tags,                     ':filename' => $form_filename                 ]);              } catch (PDOException $e) {                 echo "錯誤:" . $e->getMessage(); // 此處用于捕獲 PDO 錯誤,非驗證錯誤             }          } else {             // 如果未提交表單且字段為空,防止報錯,賦空字符串             $image_title = $image_tags = "";         }      } ?>

注意事項:

  • 確保隱藏字段 image-filename 的值與數據庫中的文件名一致。
  • 在驗證邏輯中,對用戶輸入進行過濾處理,防止 xss 攻擊。
  • 可以使用更復雜的標識方式,如唯一 ID 或時間戳來區分表單。

總結

通過在表單提交時傳遞表單標識,并在輸出錯誤信息前進行比對,可以有效地將驗證錯誤信息關聯到特定的表單實例。這種方法提升了用戶體驗,使表單驗證更加清晰、易于維護。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享