Résoudre le problème des crochets dans la méthode de formulaire GET
P粉300541798
P粉300541798 2024-01-10 16:57:31
0
1
470

Je travaille sur un formulaire dans un fichier aaa.php avec des cases à cocher utilisant des crochets dans le paramètre "name":

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

Le formulaire se trouve dans le fichier aaa.php et utilise la méthode GET.

Lors de la soumission, le fichier aaa.php passera au fichier bbb.php, qui affiche les données soumises pour que l'utilisateur puisse les vérifier, puis reviendra au fichier aaa.php pour modifier les données ou les enregistrer dans la base de données. Dans ce dernier cas, le fichier ccc.php contient les données.

Pour que cela fonctionne, j'utilise la méthode GET pour écrire toutes les données soumises par aaa.php dans l'URL dans le fichier bbb.php. Ainsi, la ligne de commande PHP dans bbb.php récupère les données affichées dans l'URL et écrit les données soumises par aaa.php dans un lien vers le fichier ccc.php afin que le fichier ccc.php puisse insérer les données dans la base de données.

Le problème est que la méthode GET amène le navigateur Web à réécrire les crochets [] comme expliqué ci-dessous : Les crochets de la clé GET du formulaire sont codés lors de la soumission du formulaire. Donc :

• Le fichier bbb.php ne peut pas afficher la valeur de la case à cocher avant d'enregistrer les données ;

• Si j'utilise la méthode POST, le fichier bbb.php affiche la valeur de la case à cocher, mais je ne peux pas accéder aux données soumises et réécrire l'URL dans le fichier ccc.php.

Voici le 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>';

En utilisant la méthode GET, l'URL résultante est :

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

Est-il possible de conserver les crochets et d'utiliser la méthode GET dans ce cas ?

Merci pour vos réponses et commentaires !

P粉300541798
P粉300541798

répondre à tous(1)
P粉147045274

Sur la base de votre suggestion, voici comment j'ai trouvé le problème :

• aaa.php contient le formulaire, utilise désormais la méthode POST pour soumettre les données

 ;

• bbb.php lit les données dans $_POST et affiche les résultats. Il y a deux modifications de code dans bbb.php :

► Remplacez $_GET par $_POST ;

► Ajoutez des variables de session pour stocker les données $_POST :

$_SESSION['data'] = $_POST;
• ccc.php lit la variable de session comme s'il s'agissait de $_POST. Au lieu de :

$dump = $_POST['fieldfromform'];
J'ai écrit :

$dump = $_SESSION['data']['fieldfromform'];
Maintenant, ccc.php stocke les données dans la base de données comme avant !

Merci pour votre aide !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal