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...
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
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} €."; ?>
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.
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.
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); });
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ä.
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>
Aihe on jo aika vanha, joten et voi enää vastata siihen.