Vasta-alkajana kysyn näinkin helppoa kysymystä teiltä, jotka jo ymmärtävät php:sta jotain. Elikkä mihin kohtaan pistän php koodin html koodin sekaan, ihan minne vaan? Vai pitääkö olla joku tietty kohta ja voinko, vaikka tehdä html koodista php kieltä, jos pistän vain ylös ja alas näin (ylös)<?php ja (alas)?>
Jos PHP-koodi tulostaa jotain, se pitää laittaa siihen kohtaan, johon tulostus halutaan. Seuraavassa PHP tulostaa sekä pari HTML-tagia (lihavoinnin aloitus ja lopetus) että laskun tuloksen.
Laskun tulos on: <?php echo "<b>" . (123 * 456) . "</b>"; ?>
Muuten PHP-koodin voi sijoittaa yleensä mihin tahansa kohtaan sivulla, ja se voi olla sivulla monessa erillisessä osassa. Poikkeuksena on esim. evästeiden lähetys, joka täytyy tehdä heti sivun alussa.
Yleensä sitä kirjoitetaan <body>-tagien väliin.
<html> <body> <?php echo ":--D"; ?> </body> </html>
tgunner kirjoitti:
Yleensä sitä kirjoitetaan <body>-tagien väliin.
...mutta esimerkiksi head-tagin alla olevaan title-tagiinkin voidaan haluta tekstiä PHP:llä tulostettavaksi:
<html> <head> <title><?php echo $sivuston_otsikko; ?></title> </head> <body> <?php echo '<h1>' . $sivuston_otsikko . '</h1>'; ?> </body> </html>
tai ihan mihin kohtaan tahansa sivua! Evästeet (cookies) ja headerit tosiaan ovat ainoita, joita ennen ei saa tulostaa yhtäkään merkkiä. HTML-headerit kun lähetetään aivan aluksi selaimelle.
Hyvä nyt, jos jotain ymmärsin. Entä jos joku käviälaskuri samanlailla?
Hyvä idea on tehdä kaikki prosessointi ennenkuin tulostaa mitään ja sitten kun kaikki logiikka on hoidettu niin vasta tulostaa jotain. Tällöin vältetään esim. em. headeriongelmat, ja tyyliin virheiden raportointi jne helpottuu. (Helppo vaan päättää tulostaa virhesivu eikä kesken tulostuksen yrittää sitä tehdä, tulee purkka jos niin tekee)
Näin asiaa sivuten. Viitsisikö joku hieman valaista mitä tuo <?php ob_start(); ?> tekee itseasiassa, kun sen laittamalla voi asettaa headereita ja cookieita missä kohtaa tahansa.
Se puskuroi tulosteen. Eli echoilla yms. tulostamalla tietoa ei lähetetäkään vielä käyttäjän selaimeen, vaan tuloste lähetetään vasta esim. ob_flush() -funktiolla.
ja siis koska käyttäjälle ei ole tulostettu mitään, voidaan edelleen muokata otsaketietoa (sessioita, keksejä yms.).
Aihe on jo aika vanha, joten et voi enää vastata siihen.