搜尋

首頁  >  問答  >  主體

解決GET表單方法中的方括號問題

我正在 aaa.php 檔案中處理一個表單,其中的複選框在“name”參數中使用方括號:

<form method="get" action="bbb.php">
     <input type="checkbox" id="eleve_element_18" name="eleve_element_18[]" value="1">
</form>

表單位於aaa.php檔案中,並使用GET方法。

提交時,aaa.php檔案會跳到bbb.php文件,該文件顯示提交的資料以供使用者檢查,然後是否返回aaa.php檔案修改資料或將其保存在資料庫。在最後一種情況下,ccc.php 檔案保存資料。

為了完成這項工作,我使用GET方法將URL中aaa.php提交的所有de資料寫入bbb.php檔案中。因此,bbb.php 中的 PHP 命令列會檢索 URL 中顯示的數據,並將 aaa.php 提交的資料寫入到 ccc.php 檔案的鏈接,以便 ccc.php 檔案可以將資料插入資料庫中.

問題在於 GET 方法使 Web 瀏覽器重寫方括號 [],如下所述:表單提交時對表單 GET 鍵方括號進行編碼。因此:

• bbb.php 檔案在儲存資料之前無法顯示複選框值;

• 如果我使用 POST 方法,bbb.php 檔案會顯示複選框值,但我無法存取已提交的數據,無法將 URL 重寫到 ccc.php 檔案。

這是程式碼:

• aaa.php

//This part of the code writes the checkboxes lines
       $listeelementssignifiants = $dbco->query('SELECT * from referentiels');
        
       while ($referentiel=$listeelementssignifiants->fetch()) {
            echo '<input type="checkbox" id="eleve_element_' . $eleves['numero_eleve'] . '" name="eleve_element_' . $eleves['numero_eleve'] . '[]" value="' . $referentiel['numero'] . '"><label class="elementsignifiant" for="eleve_element_' . $eleves['numero_eleve'] . '">' . $referentiel['element'] . '</label><br>';
    }

• bbb.php

#
//These lines retrieve the URL written by the GET method and build a new URL to ccc.php
   if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') 
        $url = "https://"; 
   else
        $url = "http://";
            
   $url .= $_SERVER['HTTP_HOST'] . str_replace("bbb.php", "ccc.php", $_SERVER['REQUEST_URI']);
        
    
   //Bouton Valider
   echo '<button type="button" onclick="location.href=\'' . $url . '\'" class="valider">Valider</button>';

使用 GET 方法,結果 URL 為:

https://domainname/bbb.php?...&matiere_18=ulis&numero_eleve=18&objectifs_18=dfsdfs&activites_18=sdfsdgfdgdfgd&aesh_18=fgdfgdfgd&commentaires_18=fghdfhqdhdghd&eleve_element_18%5B%5D=1&eleve_element_18%5B%5D=47&eleve_element_18%5B%5D=73

在這種情況下是否可以保留方括號並使用 GET 方法?

感謝您的回答和評論!

P粉300541798P粉300541798317 天前455

全部回覆(1)我來回復

  • P粉147045274

    P粉1470452742024-01-11 15:27:32

    根據您的建議,這是我發現問題的方法:

    • aaa.php 包含表單,現在使用 POST 方法提交資料;

    • bbb.php 讀取$_POST 中的資料並顯示結果。 bbb.php中有兩處程式碼修改:

    ► 將 $_GET 改為 $_POST;

    ► 新增會話變數來儲存 $_POST 資料:

    $_SESSION['data'] = $_POST;

    • ccc.php 讀取會話變量,就像它是 $_POST 一樣。而不是:

    $dump = $_POST['fieldfromform'];

    我寫道:

    $dump = $_SESSION['data']['fieldfromform'];

    現在 ccc.php 像以前一樣將資料儲存在資料庫中!

    感謝您的幫忙!

    回覆
    0
  • 取消回覆