Miten saataisiin lisättyä tekstiä kuuden rivin päähän tiedoston lopusta phpssä?
Jos nyt operaatiota ei tarvitse tehdä tuhansia kertoja sekunnissa/tiedosto ei ole todella suuri, yksinkertaisin tapa on
1. Lue tiedoston rivit taulukkoon (php:n file()-funktio) a
2. Luo uusi taulukko b ja kopioi siihen taulukon a kaikki paitsi kuusi viimeistä riviä
3. Lisää haluamasi data taulukon b loppuun
4. Lisää loput taulukon a alkiot (rivit) taulukon b loppuun
5. Ylikirjoita tiedoston sisältö taulukon b sisällöllä
Lue rivit taulukoksi, lisää teksti oikeaan väliin, ja lopuksi tallenna rivit. Mitä kohtaa näistä et osaa, ja miten olet yrittänyt? Kysymyksestäsi ei myöskään käy selvästi ilmi, haluatko lisätä joillekin kuudelle riville tekstiä tiedoston lopusta, lisätä tekstiä kuudenneksi viimeiselle riville vai lisätä kokonaan uuden rivin seitsemänneksi viimeiseksi (eli niin, että sen jälkeen on vielä kuusi vanhaa riviä).
Haluan lisätä kokonaan uuden rivin.
// Luetaan rivit. $rivit = file("tiedosto.txt", FILE_IGNORE_NEW_LINES); // Korvataan kuuden päässä lopusta nolla aiempaa riviä yhdellä uudella rivillä. array_splice($rivit, -6, 0, array("Uusi rivi!")); // Tallennetaan rivit. file_put_contents("tiedosto.txt", implode("\n", $rivit). "\n");
(Mod. yhdisti keskustelut.)
Mikä on ongelmana tässä skriptissä?
http://koululappu.zxq.net/peli.html
EDIT:
http://koululappu.zxq.net/peli.php
<?php $teksti = $_POST["teksti"]; // Luetaan rivit. $rivit = file("peli.html", FILE_IGNORE_NEW_LINES); // Korvataan kuuden päässä lopusta nolla aiempaa riviä yhdellä uudella rivillä. array_splice($rivit, -22, 0, array($foorumi)); // Tallennetaan rivit. file_put_contents("peli.html", implode("\n", $rivit). "\n"); ?>
$foorumia ei ainakaan ole määritelty
Eikö olisi ollut parempi kysyä ja jatkaa asiaa alkuperäisessä ketjussa, jossa tämän koodivinkit sait. (Mod. korjasi tämän.) Nyt olet esim vaihtanut koodiin lukuja, mutta et ole vaivautunut muuttamaan kommentteja koodia vastaaviksi.
En tiedä, mitä ihmettä yrität saada tehtyä, mutta HTML-tiedoston editointi PHP:llä ihmeellisellä purkkakoodilla sekä maagiset luvut kuten -22 eivät ole hyvästä. Vähän ajan kuluttua kenelläkään ei ole mitään käsitystä, mitä tuo koodi tekee.
Jos et voi jostain syystä pitää useasti muuttuvia tietoja tietokannassa, pidä ne edes järkevässä tietorakenteessa PHP:n puolella ja käytä serialize- sekä unserialize -funktioita.
No parasta sitten laitta hanskat tiskiin ja kysyä miten tehdä kommenttisivu?
Joko tietokannan avulla kuten PHP-oppaassa tai tiedostoilla kuten koodivinkissä.
Tosi mahtava koodi! http://koululappu.zxq.net/vieraskirja.html
Ja kauniskin on.
TVdata kirjoitti:
Tosi mahtava koodi! http://koululappu.zxq.net/vieraskirja.html
Ja kauniskin on.
Jos koodi olisi vieraskirja.php nimisessä tiedostossa, koodi saattaisi näyttää vielä kauniimmalta. :)
http://koululappu.zxq.net/vieraskirja.php?
Kokeilkaa.
Kai näet, että sivulla puskee noticea?
vieraskirja.php kirjoitti:
Warning: ini_set() has been disabled for security reasons in /www/zxq.net/k/o/u/koululappu/htdocs/
vieraskirja.php on line 3 Warning: ini_set() has been disabled for security reasons in /www/zxq.net/k/o/u/koululappu/htdocs/
vieraskirja.php on line 4 Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/k/o/u/koululappu/htdocs/
vieraskirja.php:3) in /www/zxq.net/k/o/u/koululappu/htdocs/ vieraskirja.php on line 5
Jos rautalangasta väännetään, niin ensimmäinnen ja toinen virheilmoitus tarkoittavat, ettei sinulla ole oikeutta käyttää ini_set-funktiota.
Kolmas virhe kertoo, että otsaketta ei voida lähettää sisällön lähettämisen jälkeen. (Kaksi ensimmäistä virheilmoitusta on se sisältö, joka on lähtenyt.)
Poistamalla rivit 2 ja 3, jotka alkavat ini_set..., kaikki kolme virhettä poistuvat.
Miten laitan koodin sinne peli.html:ään?
Et voi laittaa PHP-koodia HTML-tiedostoon.
No, miten minä saan sen "vieraskirjan" sinne?
vaihdat peli.html -tiedoston peli.php -tiedostoksi.
Tai jos se ei ole mahdollista, ymppäät vieraskirjan vanhanaikaisesti iframella, tai uuden aikaisesti ja hieman hankalammin ajaxilla.
Nyt viestin lähetyksen jälkeen näkyy tämä.
Warning: Cannot modify header information - headers already sent by (output started at /www/zxq.net/k/o/u/koululappu/htdocs/peli.php:7) in /www/zxq.net/k/o/u/koululappu/htdocs/peli.php on line 123 OK!
Hmm, viimeisen 5 vuoden aikana putkassa on kysytty mistä tuo "Warning: Cannot modify header information - headers already sent" vasta 30 kertaa. Ilmeisesti osa, joille ko. onglema on tullut vastaan ovat osanneet käyttää hakua, muutenhan kyselyitä olisi vielä enemmän.
Eli siinä on käynyt juuri niinkuin virheilmoituksessa lukee, olet kirjoittanut selimen suuntaan jotain (rivillä 7), josta syystä otsikkotiedot on jo lähetetty eikä niitä voi lähettää uudelleen.
Harmi että Mureakuhan FAQ on rikki, muuten olisin voinut linkittää sinne.
Et voi laittaa yhtä kokonaista sivua toisen kokonaisen sivun keskelle ja odottaa, että kaikki toimii oikein.
Asiaa auttaisi aika paljon, jos opettelisit edes alkeet HTML:stä (esim. miltä näyttää kokonainen nettisivu) ja PHP-ohjelmoinnista (esim. miten HTML:ää tulostetaan ja missä lomakkeet kuuluu käsitellä).
Aihe on jo aika vanha, joten et voi enää vastata siihen.