Eli tuollainen virhe. Tässä on koodi mitä käytän.
<?php session_start(); if (!$_SESSION['tunnus']) { ?> <P> <form method="POST" action="pro.php?id=log"> Kirjoita tunnus:<br> <input type="text" name="tunnus"><br> Kirjoita salasana:<br> <input type="password" name="salasana"><br> <input type="submit" value="Kirjaudu!"> </form> </p> <?php } else { ?> Tervetuloa,<?php echo $_SESSION['tunnus']; ?> <ul> <li><a href="hallinta.php">Hallinta</a></li> <li><a href="users.php">Käyttäjälista</a></li> <li><a href="ulos.php">Kirjaudu ulos</a></li> </ul> <?php } ?>
Ja virhe on rivillä 2
Siis voisiko kertoa joku miten tuon voi korjata??
Kyllähän se tuossa hyvin tarkasti kerrotaan: session_start haluaa lähettää HTTP-otsikoita, mutta se ei ole enää mahdollista, koska otsikot on jo lähetetty, koska ne pitää lähettää ennen tulostamista ja ennen tuota riviä on jo tulostettu jotakin. Tulostuksen voi aiheuttaa echo, print, <?php ?>-tagien ulkopuolinen teksti tai vaikkapa varoitusviesti, siis mikä tahansa, mitä koodi tulostaa. Näet vaikkapa selaimen Näytä lähdekoodi -toiminnolla, mitä sivulla on ennen tuota virheilmoitusta.
Korjaustapakin kerrotaan hyvin selvästi: poista aiemmat tulostamiset eli tulosta vasta session_start-rivin jälkeen.
Kysyjän koodi näyttää kuitenkin alkavan <?php:lla ja virhe on heti rivillä 2.
Eli olisiko tässä tapauksessa kyse siitä, että tekstieditori jota kysyjä on käyttänyt, on lisännyt tiedoston alkuun Byte Order Markin eli BOM:in.
Eli ennen tuota <?php olisi kolme merkkiä, jotka eivät näy (paitsi UTF:ää tukemattomissa ohjelmissa). Ongelma poistuisi siis tallentamalla tiedosto "without BOM" muodossa. Riippuu editorista miten tapahtuu.
Joka tapauksessa, ennen <?php ei saa olla yhtään mitään. Ota vaikka binäärieditori ja katso että ensimmäinen merkki tosiaan on < ( ascii 60 eli heksana 3C)
Tai sitten tämä pätkä sisällytetään johonkin includella, jolloin helpoin korjaus on käyttää output bufferingia, mutta oikea syypää on ohjelman huono rakenne--seuraavalla kerralla kannattaa miettiä vähän tarkemmin.
Joo. olin upottanut ton sivulle ja sen takija tuli virhe
Joo, rasittavaa taas kun ei voi heti kysyttäessä kertoa kuin puolitotuuksia. :(
Aihe on jo aika vanha, joten et voi enää vastata siihen.