Saya sedang mengusahakan borang dalam fail aaa.php dengan kotak pilihan menggunakan kurungan segi empat sama dalam parameter "nama":
<form method="get" action="bbb.php"> <input type="checkbox" id="eleve_element_18" name="eleve_element_18[]" value="1"> </form>
Borang ada dalam fail aaa.php dan menggunakan kaedah GET.
Apabila menyerahkan, fail aaa.php akan melompat ke fail bbb.php, yang memaparkan data yang diserahkan untuk disemak oleh pengguna, dan kemudian kembali ke fail aaa.php untuk mengubah suai data atau menyimpannya dalam pangkalan data. Dalam kes terakhir, fail ccc.php menyimpan data.
Untuk membuat kerja ini, saya menggunakan kaedah GET untuk menulis semua data yang dihantar oleh aaa.php dalam URL ke dalam fail bbb.php. Oleh itu, baris arahan PHP dalam bbb.php mendapatkan semula data yang ditunjukkan dalam URL dan menulis data yang diserahkan oleh aaa.php ke pautan ke fail ccc.php supaya fail ccc.php boleh memasukkan data ke dalam pangkalan data.
Masalahnya ialah kaedah GET menyebabkan penyemak imbas web menulis semula kurungan segi empat sama [] seperti yang dijelaskan di bawah: Tanda kurung segi empat kunci Borang GET dikodkan pada penyerahan borang. Oleh itu:
• Fail bbb.php tidak boleh memaparkan nilai kotak semak sebelum menyimpan data
• Jika saya menggunakan kaedah POST, fail bbb.php memaparkan nilai kotak semak, tetapi saya tidak boleh mengakses data yang diserahkan dan menulis semula URL ke fail ccc.php.
Ini kodnya:
• 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>';
Menggunakan kaedah GET, URL yang terhasil ialah:
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
Adakah mungkin untuk menyimpan kurungan segi empat sama dan menggunakan kaedah GET dalam kes ini?
Terima kasih atas jawapan dan komen anda!
Berdasarkan cadangan anda, inilah cara saya menemui masalah:
• aaa.php mengandungi borang, kini menggunakan kaedah POST untuk menghantar data
• bbb.php membaca data dalam $_POST dan memaparkan hasilnya. Terdapat dua pengubahsuaian kod dalam bbb.php:
► Tukar $_GET kepada $_POST
► Tambahkan pembolehubah sesi untuk menyimpan data $_POST:
• ccc.php membaca pembolehubah sesi seolah-olah ia adalah $_POST. Daripada:
Saya menulis:
Kini ccc.php menyimpan data dalam pangkalan data seperti dahulu!
Terima kasih atas bantuan anda!