Pystyykö case määrittelyllä mitenkään valitsemaan useampi case kohtia. esim. select=1,2
jos minulla on checkboxeja useita, pitäsi pystyä valitsemaan yksi tai useampi valinta ruutu ja tulostamaan case:sta määriykset.
<?PHP if (isset($_GET['select'])) { $select = $_GET['select']; } elseif (isset($_POST['select'])) { $select = $_POST['select']; } switch($select) { case 1 : echo "case 1"; break; case 2 : echo "case 2"; break; case 3 : echo "case 3"; break; default : echo "<form action=\"$PHP_SELF\" method=\"post\" name=\"select\">"; echo "<table>"; echo "<tr vAlign=\"top\" align=\"left\"><td>1 <input type=\"checkbox\" value=\"1\" name=\"select\" class=\"checkbox\"></td><td>Suunnittelu</td></tr>"; echo "<tr vAlign=\"top\" align=\"left\"><td>2 <input type=\"checkbox\" value=\"2\" name=\"select\" class=\"checkbox\"></td><td>Urakointi</td></tr>"; echo "<tr vAlign=\"top\" align=\"left\"><td>3 <input type=\"checkbox\" value=\"3\" name=\"select\" class=\"checkbox\"></td><td>Konsultointi</td></tr>"; echo "<tr vAlign=\"top\" align=\"left\"><td></td></tr>"; echo "<tr vAlign=\"top\" align=\"left\"><td></td></tr>"; echo "</table><table>"; echo "<tr vAlign=\"top\" align=\"right\"><td><input type=\"submit\" value=\"Jatka seuraavaan ->\" name=\"next\" class=\"nappi\"></td></tr> "; echo "</table>"; echo "</form>"; break; } ?>
Oletko koskaan miettinyt, mitä varten break on olemassa?
<?php switch($select) { case 1: echo "Ollaan ykkösessä. "; // Katso, break puuttuu! Ohjelma jatkaa eteenpäin! case 2: echo "Tähän se loppuu.\n"; break; // Tähän se loppuu. case 3: case 4: echo "Kolmonen tai nelonen tai... "; case 5: echo "Viitonen!\n"; break; // Ne loppuvat tänne. } ?>
Lopputulos eri arvoilla:
1: Ollaan ykkösessä. Tähän se loppuu.
2: Tähän se loppuu.
3, 4: Kolmonen tai nelonen tai... Viitonen!
5: Viitonen!
Metabolix: eli nyt kun valitaan arvot 1-3, tulostuu "Kolmonen tai nelonen tai... Viitonen!". Ei varmaan se mitä haettiin...
nimittäin...
Kysyjän koodissa $select-muuttujan arvoksi tulee checkbox, joka on viimeiseksi valittu. Jotta kaikki arvot saataisiin talteen, ne on tallennettava taulukkoon. Lomakekoodin tulee olla esim.
<input type="checkbox" value="1" name="select[]"> (huom. hakasulkeet)
Sitten voit käydä taulukon arvot läpi vaikkapa foreachilla.
By the way, miksi tarkistaa erikseen post- ja get-metodit, jos kerran lomakkeen metodi on tiedossa? Ja jos ei ole, $_REQUEST[...] hoitaa molemmat.
Itse tekisin jotain tähän tapaan:
<?php if(isset($_REQUEST['nappi'])) { if(isset($_REQUEST['valinta'])) { $select = $_REQUEST['valinta']; echo("Valittuna: <br>"); foreach($select as $value) { switch($value) { case 1: echo("Eka<br/>"); break; case 2: echo("Toka<br/>"); break; case 3: echo("Kolmas<br/>"); break; case 4: echo("Neljäs<br/>"); break; } } else echo("Ei valintoja"); } else { ?> <form action="<?php echo($_SERVER['PHP_SELF'])?>" method="post"> 1<input type="checkbox" name="valinta[]" value="1"><br> 2<input type="checkbox" name="valinta[]" value="2"><br> 3<input type="checkbox" name="valinta[]" value="3"><br> 4<input type="checkbox" name="valinta[]" value="4"><br> <input type="submit" name="nappi"><br> </form> <?php } ?>
Hieman nit-pickiä, muuten ihan kiva pätkä tuo ylläoleva. REQUESTit voisi muuttaa POSTeiki, sillä niitä tässä nyt varmaan haetaan. Ja echo ei ole funktio vaan komentorakenne (vai miksi sitä sanotaan), joten siihen ei tarvitse laittaa sulkuja. Ja method="POST" näyttää selkeämmältä.
Niin, en tosiaan katsonut kysymystä loppuun asti. Pahoittelen.
Kiitos LazyJones erinomaisesta vastauksesta, tätä yritin pähkäillä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.