Heim  >  Fragen und Antworten  >  Hauptteil

Lösen Sie das Problem der eckigen Klammern in der GET-Formularmethode

Ich arbeite an einem Formular in einer aaa.php-Datei mit Kontrollkästchen mit eckigen Klammern im Parameter „Name“:

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

Das Formular befindet sich in der Datei aaa.php und verwendet die GET-Methode.

Beim Absenden springt die Datei aaa.php zur Datei bbb.php, die dem Benutzer die übermittelten Daten zur Überprüfung anzeigt, und kehrt dann zur Datei aaa.php zurück, um die Daten zu ändern oder in der Datenbank zu speichern. Im letzten Fall enthält die Datei ccc.php die Daten.

Damit dies funktioniert, verwende ich die GET-Methode, um alle von aaa.php in der URL übermittelten Daten in die Datei bbb.php zu schreiben. Daher ruft die PHP-Befehlszeile in bbb.php die in der URL angezeigten Daten ab und schreibt die von aaa.php übermittelten Daten in einen Link zur Datei ccc.php, damit die Datei ccc.php die Daten in die Datenbank einfügen kann.

Das Problem besteht darin, dass die GET-Methode den Webbrowser dazu veranlasst, die eckigen Klammern [] wie folgt umzuschreiben: Eckige Klammern des Formular-GET-Schlüssels werden bei der Formularübermittlung codiert. Deshalb:

• Die Datei bbb.php kann den Kontrollkästchenwert nicht anzeigen, bevor die Daten gespeichert werden

• Wenn ich die POST-Methode verwende, zeigt die Datei bbb.php den Wert des Kontrollkästchens an, aber ich kann nicht auf die übermittelten Daten zugreifen und die URL nicht in die Datei ccc.php umschreiben.

Das ist der Code:

• 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>';

Mit der GET-Methode lautet die resultierende 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

Ist es in diesem Fall möglich, die eckigen Klammern beizubehalten und die GET-Methode zu verwenden?

Danke für eure Antworten und Kommentare!

P粉300541798P粉300541798306 Tage vor429

Antworte allen(1)Ich werde antworten

  • 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 像以前一样将数据存储在数据库中!

    感谢您的帮助!

    Antwort
    0
  • StornierenAntwort