Miksiköhän seuraavanlainen ei toimi?
<?php $keksi = $_COOKIE["tyyli"]; echo "<body bgcolor='{$keksi}'>"; ?> <?php $styyli = $_GET[styletype]; setcookie("tyyli", $styyli); ?> <form method="GET" action="styyle.php"> <select name="styletype"> <optgroup label='Tyylin vaihto'> <option value="blue" >Sininen</option> <option value="orange" >Oranssi</option> <option value="white" selected="selected">Valkonen</option> <option value="green" >Vihreä</option> </select> <input type="submit" value="Vaihda" /> </form>
Tulee seuraavanlaista:
Warning: Cannot modify header information - headers already sent by (output started at /home/customer/s/e/se/se/se/jase.php:5) in /home/customer/n/i/niinpa/ei/taa/toimi.php on line 10
Keksit pitää lisätä aivan sivun alussa, ennen kuin mitään on tulostettu html-dokumenttiin. Toinen vaihtoehto on pistää aivan sivun alkuun <?php ob_start(); ?> ja aivan sivun loppuun <?php ob_end_flush(); ?>
:)
Et saa tulostaa selaimelle mitään ennen keksin asettamista.
Näin yksinkertaisesti sanottuna. Lisäksi tuohon kannattaa lisätä tarkistus, jos uusi arvo annetaan niin vaihdetaan vain silloin tuota keksin arvoa.
Edit: Hidas.
Lisäsin nuo koodit alkuun ja loppuun. Toimii kuin unelma kiitos. Vielä kysyin sen saako mitenkään tarkastettua onko tietyn keksin sisältö vaikkapa "valkoinen", ja jos on php tulostaisi sivulle esim: "Valkoinen löytynyt!"
Mee kirjoitti:
saako mitenkään tarkastettua onko tietyn keksin sisältö vaikkapa "valkoinen", ja jos on php tulostaisi sivulle esim: "Valkoinen löytynyt!"
Kaikki keksit löytyvät $_COOKIE-taulukosta. Tiettyyn keksiin pääset käsiksi $_COOKIE['keksinnimi']
ob-ratkaisu on yleensä se purkkaratkaisu, pistä mieluummin suosiolla sinne sivun alkuun se keksin asettaminen.
Seuraavaan kysymykseen :
Miten voin tarkistaa sen, onko jossain tiedostossa 1 tai enemmän merkkejä?
filesize / strlen
Ja taas löytyi kysymys:
Miksi seuraava ei toimi?
<?php $tiedosto = fopen("firstvisit.txt", "w"); fwrite ($tiedosto, "Visited"); fclose ($tiedosto); ?> <?php $numero = filesize('firstvisit.txt'); if (1 <= $numero) echo "Tämä on ensimmäinen kerta kun käyt sivuilla!"; else { echo ''; } ?>
Tällä kertaa ei näytä virheilmoituksia mutta kirjoittaa kokoajan "Tämä on ensimmäinen kerta kun käyt sivuilla!". Eli mikä on problem?
Mee kirjoitti:
Eli mikä on problem?
No problem on, että 1 <= $numero. Eli mitä tuossa teet:
1. Kirjoitat tiedostoon
2. Tarkastat onko tiedostossa dataa ja tulostat
Mieti mitä pitäisi tehdä toisinpäin... :)
ajv kirjoitti:
Mee kirjoitti:
Eli mikä on problem?
No problem on, että 1 <= $numero. Eli mitä tuossa teet:
1. Kirjoitat tiedostoon
2. Tarkastat onko tiedostossa dataa ja tulostatMieti mitä pitäisi tehdä toisinpäin... :)
Nyt en kyllä tajua mikä on väärin. Nuori vielä joten ei tajua mitä tehdä
no nuo kohat toisippäi eli tarkista ensi, onko tiedostossa jotaki ja jos ei ole, kirjota se filu. nyt kirjotat ensi ja tarkistat onko siellä mitään.. tietysti on, koska just ennen kirjotit sinne.
No, tarkasta ennen tiedostoon kirjoittamista, että onko siellä tiedostossa dataa ja teet tuon tulostuksen. Kirjoituksen jälkeen tiedostossa on aina dataa.
Äh, sekunnin liian hidas... :(
Tämmösenpä sitten tein, mutta nyt ei lisää tiedostoon mitään ja tulostaa "Tämä on ensimmäinen...".
<?php $numero = filesize('firstvisit.txt'); if ($numero <= 1) echo ""; else { echo "Tämä on ensimmäinen kerta kun käyt sivuilla! <?php $tiedosto = fopen('firstvisit.txt', 'w'); fwrite ($tiedosto, 'Visited'); fclose ($tiedosto); ?> "; } ?>
Eli miten se pitäisi toteuttaa parhaimmiten?
Tuosta kannattais ottaa ehkä keskeltä pois tuo ylimääräinen <?php.
Mee kirjoitti:
Tämmösenpä sitten tein, mutta nyt ei lisää tiedostoon mitään ja tulostaa "Tämä on ensimmäinen...".
Et voi echolla tulostaa PHP-koodia niin, että se suoritettaisiin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.