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>"; } ?>
Korvaa viestistä rivinvaihdot <br> tageiksi:
$viesti = str_replace("\r\n", "<br>", $viesti);
Pelkkä \n ei siis riitä.
Itse käytän PHP:n omaa nl2br() -funktiota, joka tekee saman kuin tuo str_replace.
$viesti = nl2br($viesti);
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
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ä.
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");
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?)
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:ää.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.