Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Checkbox

Isopaha [31.03.2008 19:13:24]

#

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?

Short Php [31.03.2008 19:34:24]

#

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);
?>

Isopaha [31.03.2008 20:12:55]

#

Muuten toimii, mutta nyt kun valitsee Laktoositon ja Gluteeniton, tallentuu pelkkä laktoositon.

Merri [31.03.2008 20:18:31]

#

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.

Meitzi [31.03.2008 21:34:23]

#

Eihän tuo 'ma' tarkota tuossa että maanantai eihän?

Koska jos meinaat noin tehä koko viikon niin ei tule hienoa koodia.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta