Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: pystyykö case toteututusta useampi valintoja

lahtis [19.12.2005 02:16:05]

#

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;
}

?>

Metabolix [19.12.2005 02:23:02]

#

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!

LazyJones [19.12.2005 07:30:11]

#

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
}
?>

tsuriga [19.12.2005 14:50:48]

#

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ä.

Metabolix [19.12.2005 22:02:31]

#

Niin, en tosiaan katsonut kysymystä loppuun asti. Pahoittelen.

lahtis [20.12.2005 02:15:01]

#

Kiitos LazyJones erinomaisesta vastauksesta, tätä yritin pähkäillä.

Vastaus

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

Tietoa sivustosta