Minulla on ollut nyt jonkinlaisia ongelmia tuollaisen checkbox muuttujan kanssa. Voisiko joku lyhyesti mikä tässä on vikana:
kirjoittaminen.html <html> <body> <form action="tallennus.php" method="get"> Maanantai <p>Päivämäärä <input type="text" name="map"> <br> <p>Päivämäärä <input type="text" name="ma1"> <input type="checkbox" name="ma1l">Laktoositon <input type="checkbox" name="ma1g">Gluteeniton <br> <br> <input type="submit" value="Lähetä"></p> </form> </body> </html>
tallennus.php <?php //avataan tiedosto kirjoitustilassa $tt = fopen("testi.txt", "w"); //kirjoitetaan tiedostoon kolme riviä; \n tarkoittaa rivinvaihtoa fwrite($tt, "{$_GET['map']}\n"); if ($_GET['ma1l'] == true) if ($_GET['ma1g'] == true) fwrite($tt, "{$_GET['ma1']}(l,g)\n"); elseif ($_GET['ma1g'] == false) fwrite($tt, "{$_GET['ma1']}(l)"); elseif ($_GET['ma1g'] == true) if ($_GET['ma1l'] == true) fwrite($tt, "{$_GET['ma1']}(l,g)\n"); elseif ($_GET['ma1l'] == false) fwrite($tt, "{$_GET['ma1']}(g)\n"); elseif ($_GET['ma1g'] == false) if ($_GET['ma1l'] == false) fwrite($tt, "{$_GET['ma1']}\n"); elseif ($_GET['ma1l'] == true) fwrite($tt, "{$_GET['ma1']}(l)\n"); //suljetaan tiedosto fclose($tt); ?>
Sivun tarkoitus on olla muokkaustyökalu tekstitiedostolle testi.txt
Muokkaamalla ensimmäistä html-sivua, muokataan testi.txt tiedostoa, johon yllä oleva php lomake tallentaa tietoja.
Nyt tosin juttu ei aivan toimi.
Mikäli ensimmäiseltä HTML-sivulta on valittu rasti laatikkoon
Laktoositon --> Tallentaa ruoan nimen (l) perään
Laktoositon ja Gluteeniton --> Tallentaa ruoan nimen ja (l,g)
Gluteeniton --> EI TALLENNA MITÄÄN, MIKSI?
Ei mitään valittu --> EI TALLENNA MITÄÄN, MIKSI?
Joten voisiko joku ystävällinen korjata tuon php lomakkeen niin, että se tallentaisi vaaditut oikein?
Kokeiles muuttaa seuraavat
elseif ($_GET['ma1l'] == false) ** Muuta elseif ($_GET['ma1g'] == true) ja elseif ($_GET['ma1g'] == false) if ($_GET['ma1l'] == false) fwrite($tt, "{$_GET['ma1']}\n"); ** Muuta elseif (!isset($_GET["ma1g"]) || !isset($_GET["ma1l"])) fwrite($tt, "{$_GET['ma1']}\n");
Koko tallennus.php muutettuna:
<?php //avataan tiedosto kirjoitustilassa $tt = fopen("testi.txt", "w"); //kirjoitetaan tiedostoon kolme riviä; \n tarkoittaa rivinvaihtoa fwrite($tt, "{$_GET['map']}\n"); if ($_GET['ma1l'] == true && $_GET["mai1g"] != true) { fwrite($tt, "{$_GET['ma1']}(l)"); } elseif ($_GET['ma1g'] == true && $_GET['ma1l'] == true) { fwrite($tt, "{$_GET['ma1']}(l,g)\n"); } elseif ($_GET['ma1g'] == true) { fwrite($tt, "{$_GET['ma1']}(g)\n"); } elseif (!isset($_GET["ma1g"]) || !isset($_GET["ma1l"])) { fwrite($tt, "{$_GET['ma1']}\n"); } //suljetaan tiedosto fclose($tt); ?>
Muuten toimii, mutta nyt kun valitsee Laktoositon ja Gluteeniton, tallentuu pelkkä laktoositon.
Silloin kun checkboxia ei ole valittu, sen name ei välity ollenkaan GETillä tai POSTilla.
Siten:
if( isset($_GET['ma1l']) ) { LÖYTYI } else { EI LÖYTYNYT }
Tämän takia boolean-testit voivat antaa odottamattomia tuloksia. Kannattaa tehdä vaikka kerralla muuttuja ma1l = isset($_GET['ma1l']);
tai muuta vastaavaa.
Eihän tuo 'ma' tarkota tuossa että maanantai eihän?
Koska jos meinaat noin tehä koko viikon niin ei tule hienoa koodia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.