首页  >  问答  >  正文

解决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粉300541798306 天前434

全部回复(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
  • 取消回复