Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Variable (muuttuja) seems to be unused in its scope

Sivun loppuun

Raikku [17.02.2013 00:48:21]

#

Tarkoituksena olisi tehdä yksinkertainen hintalaskuri, jossa valitsemalla jokaiseen valikkoon jokin vaihtoehto lasketaan funktiolla yhteishinta, joka tulostetaan sivun loppuun:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Tietsakauppa (t7)</title>
    </head>
    <body>
        <?php
        echo "<p><h1>Laske hinta laitekokoonpanolle</h1></p>";
        echo "<p><select name='prossu' size='1'></p>";
        echo "<option value='0'>Valitse prosessori</option>";
        echo "<option value='50'>Prossu 1 (50e)</option>";
        echo "<option value='100'>Prossu 2 (100e)</option>";
        echo "<option value='125'>Prossu 3 (125e)</option>";
        echo "</select>";
        //tällä luodaan alavalikko, josta voi valita prosessorin
        echo "<p><select name='muisti' size='1'></p>";
        echo "<option value='0'>Valitse muisti</option>";
        echo "<option value='100'>Muisti 1 (50e)</option>";
        echo "<option value='100'>Muisti 2 (100e)</option>";
        echo "<option value='125'>Muisti 3 (125e)</option>";
        echo "</select>";
        //tällä luodaan alavalikko, josta voi valita muistin määrän
        echo "<p><select name='naytto' size='1'></p>";
        echo "<option value='0'>Valitse näyttö</option>";
        echo "<option value='50e'>Näyttö 1 (50e)</option>";
        echo "<option value='100'>Näyttö 2 (100e)</option>";
        echo "<option value='125'>Näyttö 3 (125e)</option>";
        echo "</select>";
        //tällä luodaan alavalikko, josta voi valita näytön
        echo "<p><input type='submit' name='painike' value='Tee tarjous'</p>";

        echo "<form action='t7.php' method='post'></form>";

$prossu = $_POST['prossu']; /*(Variable $prossu seems to be unused in its scope)*/
$muisti = $_POST['muisti'];/*(Variable $muisti seems to be unused in its scope)*/
$naytto = $_POST['naytto'];/*(Variable $naytto seems to be unused in its scope)*/

        function hinta($prossu, $naytto, $muisti)
        {
            $hinta = $prossu + $muisti + $naytto;
            echo "Tämän paketin hinnaksi tulisi $hinta euroa";
        }
       ?>
    </body>
</html>

Ongelmana on nuo jotka merkkasin virhemerkinnällä, jota NetBeans 7.2 tyrkyttää. Mitä minun on siis tarkoitus määrittää jotta voin määrittää muuttujat sellaisiksi, että se palvelee koodiani yllämainitun tarkoituksen mukaisesti? Olen kokeillut pariakin eri kikkaa mutta sama virhe tuntuu puskevan joka kerta noihin kolmeen riviin...

tmub [17.02.2013 01:06:31]

#

Et varmaan ihan kauhean paljoa HTML tai PHP osaa?

Näin nopeasti katsottuna tässä on esimerkki formien käytöstä: http://www.w3schools.com/html/html_forms.asp

Macro [17.02.2013 09:47:39]

#

Huomautus tulee siitä, että olet alustanut muuttujia mitä et kumminkaan käytä.

Rivillä 40 voisit luulla käyttäväsi niitä, mutta oikeasti ne ovat arvoja, jotka ovat funktion parametreinä saatu.

Formien kentät pitäisi laittaa <form>-tagin sisälle, nyt sulla on kaikki ulkopuolella.

Lomakkeesi voisi näyttää tältä

<h1>Laske laitehinta kokoonpanolle</h1>

<form action="laske.php" method="POST">
	<select name="prossu">
		<option ...
	</select>

	<select name="muisti">
		<option ...
	</select>

	<select name="naytto">
		<option ...
	</select>

	<input type="submit" value="Laske">
</form>

Ja laske.php tältä

<?php
$prossu = (isset($_POST["prossu"])) ? intval($_POST["prossu"]) : 0;
$muistit = (isset($_POST["muisti"])) ? intval($_POST["muisti"]) : 0;
$naytto = (isset($_POST["naytto"])) ? intval($_POST["naytto"]) : 0;

$hinta = $prossu + $muistit + $naytto;

echo "Tämän paketin hinnaksi tulisi {$hinta} €.";
?>

Metabolix [17.02.2013 11:01:59]

#

PHP:llä et voi myöskään tulostaa vastausta saman sivun loppuun, kuten ilmeisesti kuvittelet, vaan ensin pitää tulostaa koko lomakesivu ja sitten aivan erikseen tulossivu. Toki nämä sivut voivat näyttää samalta niin, että syntyy vaikutelma, että tulos lisättiin sivun loppuun.

Analogia: Tulostat paperille tilauslomakkeen ja toimitat sen tilaajalle. Ei ole keinoa, jolla pystyisit tämän jälkeen tulostamaan lomakkeen loppuun lisää rivejä, koska lomake on jo tilaajalla.

Ripe [17.02.2013 12:13:01]

#

Jos haluaa vastauksen tulostaa sivun loppuun, sen voi tehdä helposti javascriptillä. Koko homman voi tehdä Macron tavalla, mutta lisätä vain javascript-koodi, joka suoritetaan kun muuttaa jonkun selectin arvoa.

Macro [17.02.2013 12:27:47]

#

No voidaanhan se tehdä vaikka pelkästäänkin Javascriptillä, mutta todennäkösesti (ja toivottavasti) tässä ollaan harjoittelemssa PHP:n käyttöä.

$("#prossu, #muisti, #naytto").change(function() {
	prossu = +($("#prossu").val());
	muisti = +($("#muisti").val());
	naytto = +($("#naytto").val());

	summa = prossu + muisti + naytto;

	$("#summa").text(summa);
});

http://jsbin.com/eremeq/3/edit

Ripe [17.02.2013 12:33:11]

#

Macro kirjoitti:

No voidaanhan se tehdä vaikka pelkästäänkin Javascriptillä, mutta todennäkösesti (ja toivottavasti) tässä ollaan harjoittelemssa PHP:n käyttöä.

Sitä minäkin ajattelin, ja sen takia en vaivautunut sanomaan, että sen voi tehdä pelkällä javascriptillä.

The Alchemist [17.02.2013 15:55:55]

#

Ota nuo hyödyttömät echot pois lomakkeen tulostuksesta pois. Et tee niillä mitään, koska tulostat vain staattista tekstiä. Suuria lohkoja ei muutenkaan pidä tulostaa echolla vaan pikemminkin vain tulostetaan yksittäiset arvot haluttuihin kohtiin.

Jos teet noin, koska harjoituksessa on käsketty tulostaa jotain php:llä, niin olet ymmärtänyt tehtävänannon väärin ja vastauksesikin on väärin.

<div>
  <ul>
    <?php foreach ($items as $item): ?>
      <li>
        <a href="..."><?= $item['name'] ?></a>
        <div class="description"><?= $item['description'] ?></div>
      </li>
    <?php endforeach ?>
  </ul>
</div>

Sivun alkuun

Vastaus

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

Tietoa sivustosta