Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Monirivinen blogitiedosto

Sivun loppuun

Lanttihame [10.06.2004 14:05:06]

#

Luin tässä hiljattain A. Laaksosen mainion Php-oppaan, josta sain kipinän kokeilla php:tä käytännössä. Hetken tuumailtuani päätin yrittää tehdä pienimuotoisen blogin lainaamalla Villen Vieraskirjan rakennetta oppaan 6:nnesta osasta.

Hetken säädettyäni sain sen toimimaan kivasti. Siinä on neljä osaa. "Send.php", jossa kirjoitetaan päivän kuulumiset, tälle sopiva otsikko ja päiväys, josta juttu kertoo. "Postaus.php", joka käsittelee "Send.php" tiedot ja kirjoittaa ne "blogi.txt" -tiedostoon. Viimeisenä "index.php", joka näyttää "blogi.txt":n tiedot.

Muuten homma sujuu kuten pitää, mutta koska tiedot kirjoitetaan "blogi.txt" -tiedostoon yksi rivi/merkintä, on nyt ongelmana viestin rivinvaihdot. Jos textareaan lyö rivinvaihdon, se sekoittaa rivillekirjoitusoperaation ja homma menee ns. reisille.

Olisin siis kovin kiitollinen, jos joku osaisi minua tässä opastaa. Myös korjaus/lyhenneys/oikotie neuvoja koodin olisi kiva kuulla.

Koodipätkät:

***send.php
Kirjoita tähän viestisi:
<FORM action="postaus.php" method="post">
<input type="text" name="Dag" value="Päiväys: ddmmyy tai ddmm">
<input type="text" name="Otsikko" value="Otsikko">
<textarea name="Viesti" COLS=80 ROWS=20></textarea>
<input type="submit" value="Lähetä">
</FORM>
<?php
***postaus.php
   $tiedosto = fopen("blogi.txt", "a");

   $Dag = $_POST['Dag'];
   $Otsikko = $_POST['Otsikko'];
   $Viesti = $_POST['Viesti'];

   $viesti = stripslashes($viesti);
   $viesti = htmlspecialchars($viesti);
   $viesti = str_replace("\n", "<br>", $viesti);

   $rivi = "$Dag|$Otsikko|$Viesti\n";

   fwrite($tiedosto, $rivi);

   fclose($tiedosto);

   header ("Location: index.php");

?>
<?php
***index.php

$viestit = file("blogi.txt");

$viestit = array_reverse($viestit);

$viestimaara = count($viestit);

echo "<p>Yhteensä <b>$viestimaara</b> merkintää blogissa.</p><hr>";


for ($i = 0; $i < $viestimaara; $i++) {

   $tiedot = explode("|", $viestit[$i], 3);

   $Dag = $tiedot[0];
   $Otsikko = $tiedot[1];
   $Viesti = $tiedot[2];

   echo "$Dag";
   echo "<br><b>$Otsikko</b>: ";
   echo "<br>$Viesti<BR><HR>";
}
?>

T.M. [10.06.2004 14:09:33]

#

Korvaa viestistä rivinvaihdot <br> tageiksi:

$viesti = str_replace("\r\n", "<br>", $viesti);

Pelkkä \n ei siis riitä.

Tinqe [10.06.2004 14:22:35]

#

Itse käytän PHP:n omaa nl2br() -funktiota, joka tekee saman kuin tuo str_replace.

$viesti = nl2br($viesti);

T.M. [10.06.2004 14:58:48]

#

Tinqe kirjoitti:

Itse käytän PHP:n omaa nl2br() -funktiota, joka tekee saman kuin tuo str_replace.

$viesti = nl2br($viesti);

Minäkin yritin ennen käyttää tuota, mutta sepä ei tehnytkään niin kuin halusin.
Eli se korvaa rivinvaihdon <br /> roskalla, sekä laittaa sen loppuun kaikesta huolimatta sen rivinvaihdon

Lanttihame [10.06.2004 20:56:37]

#

Hmmmm...
Käsittääkseni molemmat edellämainut vain korvaavat "<BR>" -tagin php:n "\r\n" :llä.

Tämä nyt ei ole se mitä haen.

Ongelmani on vähän vaikea selittää joten jos voin sekunnin varastaa aikanne, ja kävisitte kokeilemassa tätä härpäkettä.


Viritys

ajv [10.06.2004 21:41:07]

#

Lanttihame kirjoitti:

Käsittääkseni molemmat edellämainut vain korvaavat "<BR>" -tagin php:n "\r\n" :llä.

Eipäs, vaan juuri toisinpäin.

$Dag = $_POST['Dag'];
$Otsikko = $_POST['Otsikko'];
$Viesti = str_replace("\r\n", "<br>",$_POST['Viesti']);

Ja lisäksi eikös olisi järkevämpää ottaa aika selville vaikka date(), tai time()-funktiolla, sen sijaan, että kysyy sitä käyttäjältä?

$Dag = date("d.m.Y");

Tinqe [10.06.2004 23:54:03]

#

T.M. kirjoitti:

Tinqe kirjoitti:

Itse käytän PHP:n omaa nl2br() -funktiota, joka tekee saman kuin tuo str_replace.

$viesti = nl2br($viesti);

Minäkin yritin ennen käyttää tuota, mutta sepä ei tehnytkään niin kuin halusin.
Eli se korvaa rivinvaihdon <br /> roskalla, sekä laittaa sen loppuun kaikesta huolimatta sen rivinvaihdon

Tulipas taas kirjoitettua asiasta josta ei tiedä tuon taivaallista. nl2br tosiaan jättää rivinvaihdot paikoilleen, itseäni tuo ei kuitenkaan ole haitannut koska olen käyttänyt sitä tulostaessani tietokannasta haettua tekstiä johon pitää saada rivinvaihdot.
Eihän <br /> kuitenkaan roskaa ole, jonkin standardin mukaan taisi olla validi merkintätapa (vai olenko tämänkin mennyt mokaamaan?)

Blaze [11.06.2004 00:08:33]

#

Tinqe kirjoitti:

Eihän <br /> kuitenkaan roskaa ole, jonkin standardin mukaan taisi olla validi merkintätapa (vai olenko tämänkin mennyt mokaamaan?)

<br /> on XHTML:ää, <br> HTML:ää.

Lanttihame [11.06.2004 10:01:27]

#

ajv kirjoitti:

Lanttihame kirjoitti:

Käsittääkseni molemmat edellämainut vain korvaavat "<BR>" -tagin php:n "\r\n" :llä.

Eipäs, vaan juuri toisinpäin.

$Dag = $_POST['Dag'];
$Otsikko = $_POST['Otsikko'];
$Viesti = str_replace("\r\n", "<br>",$_POST['Viesti']);

Ja lisäksi eikös olisi järkevämpää ottaa aika selville vaikka date(), tai time()-funktiolla, sen sijaan, että kysyy sitä käyttäjältä?

$Dag = date("d.m.Y");

Nyt se toimii.
*Kiittää ja kumartaa*, sekä koodista, että oikaisusta.

Tuosta "date()"sta vielä sen verran, että pitkän pohtimisen jälkeen tulin siihen tulokseen, että jos jossain välissä haluaisin kertoa jostain vanhasta asiasta, niin on hyvä jos on itsellä optiona ilmoittaa päivämäärä.

<br> on HTML-tagi, joka ei tarvitse sulkutagiä
<br /> on XHTML-tagi. Kauttaviiva on siellä, koska kaikki tarvitsee lopetustagin XHTML:ssä. Kai on poikkeuksiakin :)
Näin kertoi Google.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta