Eli olen kehitellyt erittäin yksinkertaisen laskutoimituksen tekevän skriptin, en vain ymmärrä miksei se toimi, tulee parse erroria. Idean varmasti jokainen ymmärtää. Kertokaapa mikää menee pieleen. Pahoittelen että ei ole sisennyksineen, onneksi ei ole pitkä luettava. Skripti:
***index.html <html> <head> <body> <form action="lasku.php" method="get"> <b>Hinta:</b> <br> <input type="text" name="hinta" <br> </body> </head> </html> ***lasku.php <?php $hinta = $_GET['hinta'] $lasku = ((($hinta+5€+10€)*1.03)*1.22)-($hinta*0.22); if($lasku){ header ("Location: vastaus.php"); }else{ header ("Location: virhe.php"); ?> ***vastaus.php <?php echo "Lopullinen hinta on . $lasku ." ?> ***virhe.php <?php echo "Virhe!" ?>
Muutamien rivien lopusta puuttuu puolipiste. Lisäksi PHP ei ymmärrä rahayksiköiden päälle, eli et voi käyttää niitä laskutoimituksissa. Luvut pitää ilmoittaa sellaisinaan. Tietenkin voit lopuksi muodostaa sopivanlaisen merkkijonon: "$lasku €".
Laitoin puuttuvat puolipisteet paikoilleen ja otin €:t pois. Tulee silti virheilmoitus: Parse error: parse error, unexpected $ in /lasku.php on line 19. Voisiko virhe ilmoituksesta päätellä mitään?
}- merkki taitanee puuttua
Virheilmoituksen mukaan koodissa on väärässä paikassa $-merkki. Mutta outo juttu on se, että virhe on muka rivillä 19, vaikka todellisuudessa rivejä on vain 9. Onko lasku.php:ssä vielä jotain muuta, jota ei ole näkyvissä aloitusviestissäsi? Yksi virhe tosiaan on viimeisen }-merkin puuttuminen.
[pilkunnysväys]
php:ssä viimeistä riviä ei tarvitse lopettaa puolipisteeseen. Näin ollen jos on yksirivinen ( <?php echo "Hello world" ?> ) koodi, sitä ei tarvitse päättää puolipisteeseen.
Tosin hyvä käytäntö on lopettaa aina puolipisteeseen.
[/pilkunnysväys]
Joo, kun laitoin tuon puuttuvan } niin menee sivulle vastaus.php. Vielä jää vastauksesta puuttumaan itse vastaus, eli vastaus.php sivulla lukee; Lopullinen hinta on . .
Pitäisikö vastaus.php:n löytää automaattisesti lasku.php:ssa määritelty $lasku? Vai onko vastaus.php:ssa jokin piste virhe?
Mitä jos et ohjaisikaan käyttäjää minnekään vaan tulostaisit nuo tekstit saman tien if-rakenteessa? Tosiaan $lasku ei välity automaattisesti seuraavalle sivulle.
Tulostin nyt samantien vastauksen ja toimi hienosti!
Kiitos paljon!
Tossa on vielä tämmönen:
echo "Lopullinen hinta on . $lasku ."
Siinä ei tarvitse noita pisteitä '$lasku':n molemmin puolin. Eli
echo "Lopullinen hinta on $lasku"
tai
echo "Lopullinen hinta on " . $lasku
Molemmat muodot ovat oikein. Yllättävän usein selviää ilman aaltosulkujakin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.