Parse error: syntax error, unexpected $end on line 31
Mitä tuo tarkoittaa virheilmoituksessa?
Tarkoituksenani oli luoda lomake, jossa on nimi- ja määrä-alkiot sekä tulosta-nappi. Sen piti tulostaa
määrän osoittama määrä nimeä, kun painetaan tulosta-nappia. Ei toimi. Missähän on vika? Olen vasta alottelija koodaajana, joten ihan perusjutut saattavat olla päin p:tä.
Koodini on seuraavanlainen:
<?php </html> <head> <title>Nimi useasti</title> </head> <body> <?php if (isset($_GET["tulosta"])) { tulosta_nimi(); } function tulosta_nimi() { while($_GET['nimi']<$_GET['maara']){ echo $_GET['nimi']; $_GET['nimi']++; } ?> <form action="<?php echo $_SERVER['PHP_SELF']?>"> method="GET"> <p> Nimi: <input type="text" name="nimi"><br> Määrä: <input type="text" name="maara"><br> <input type="submit" value="tulosta"> </p> </form> </body> </html> ?>
Mod. edit. Keskustelu siirretty oikealle alueelle ja kooditagit lisätty!
Jos laittaa kooditagit, niin näkee helpommin..
No joo, ei näköjään ihan pelkällä värityksellä selvinnyt, mutta echo $_SERVER['PHP_SELF'] lopusta puuttuu ;
Grez kirjoitti:
Jos laittaa kooditagit, niin näkee helpommin..
<?php if (isset($_GET["tulosta"])) { tulosta_nimi(); } function tulosta_nimi() { while($_GET['nimi']<$_GET['maara']){ echo $_GET['nimi']; $_GET['nimi']++; /* tästä puuttuu jotakin? */ } ?>No joo, ei näköjään ihan pelkällä värityksellä selvinnyt, mutta echo $_SERVER['PHP_SELF'] lopusta puuttuu ;
Ei vaikuta tuossa tapauksessa mitään, koska viimeistä riviä ei tarvitse päättää php:ä, mutta katsopa kaarisulkujen avaus- ja lopetusmäärät. Etenkin tulosta_nimi() funktiossa. Sisentäminen olisi ratkaissut ongelman tyylikkäästi.
EDIT: Lisäksi tuo form tagi on suljettu liian aikaisin, joten tulostukseen tulee mukaan method="GET">
Virheilmoitus tarkoittaa, että koodi loppui odottamattomasti kesken. Yleensä puuttuu jokin sulkeva asia kuten tekstin lopettava ", koodilohkon lopettava }, muu sulkeva sulku eli ) tai ] tms.
Joo, tosiaan vika on siitä että yksi lopettava } puuttuu.
Ajattelin itsekin ensin, että varmaan lainausmerkki tai kaarisulje puuttuu ja meinasin kommentoida tuosta, että jos käyttäisi jotain säällistä PHP-editoria, niin nuo puuttuvat kaarisulkeet huomaa helposti, mutta kun en huomannutkaan sitä niin jätin kommentoimatta. Kommentoin vaan tuosta kooditagista, jolla näkisi suoraan esim. puuttuvan " tai '. Olisi pitänyt varmaan copy&pastettaa sinne editoriin niin olisi huomannut tuon kaarisulkeen.
Mitä tästä opin: pitäisi noudattaa itse niitä neuvojaan mitä meinaa muille jakaa :D
Itseasiassa vika on viimeisellä rivillä. siinä lukee "?>" mutta missään ei aloiteta sitä komennolla "<?php".
EDIT: Lisäksi ekalla rivillä on "<?php" joka aiheuttaa kaatumisen kun aikaisempi virhe on poistettu.
Ja vielä hiukan avautumista tuosta koodista. En halua lannistaa, mutta
<input type="submit" value="tulosta">
ei tee sitä odotat sen tekevän. Et siis koskaan saa tuohon
if (isset($_GET["tulosta"])){
kohtaan true arvoa, koska sinulla ei ole lähdössä tuon nimistä kenttää GET taulukossa. (onko oikea termi?).
Toisekseen
$_GET['nimi']++;
on varmaankin ajatuskatko. Olet ehkä tarkoittanut:
$_GET['maara']--;
Oikeammin jotenkin näin
janijohannes kirjoitti:
Itseasiassa vika on viimeisellä rivillä. siinä lukee "?>" mutta missään ei aloiteta sitä komennolla "<?php".
Ei siitä kyllä mitään virheilmoitusta tule, se vaan näkyy sivun lopussa ylimääräisenä ?>:nä. Sehän on sinänsä PHP-tulkin kannalta HTML:ää, eikä PHP:tä. PHP-tulkkia taas ei kiinnosta onko ulosmenevä html validia vai ei.
Grez kirjoitti:
Ei siitä kyllä mitään virheilmoitusta tule, se vaan näkyy sivun lopussa ylimääräisenä ?>:nä. Sehän on sinänsä PHP-tulkin kannalta HTML:ää, eikä PHP:tä. PHP-tulkkia taas ei kiinnosta onko ulosmenevä html validia vai ei.
Tuo on aivan totta, mutta janijohannes saattoi vahingossa tulkita tulkin virheilmoituksen
tulkin herja kirjoitti:
Parse error: syntax error, unexpected $end in H:\Program Files\Apache Software Foundation\Apache2.2\htdocs\treeni\phpbb.php on line 27
sillä tavalla, että herja tarkoittaa nimenomaan tuota ?> merkkiä. Virhehän korjaantuu lisäämällä tuon päättävän kaarisulun oikeaan paikkaan. Tämä on helppo tarkistaa poistamalla tuon ?> merkin ja kokeilemalla. Virheen pitäisi olla rivinumeroa lukuunottamatta identtinen.
Kiitos kaikille vastauksista! Teuron vinkit toimivat, jes!
Aihe on jo aika vanha, joten et voi enää vastata siihen.