Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Omat kooditagit

Sivun loppuun

ZuBer [30.12.2011 11:00:18]

#

Moro!

Laitoin vähän aika sitten viestiä tagejen tekemisestä, mutta kun tyhmyyttäni en sitä ennen kokeillut kaikkia hakusanoja ja löysin vanhan aiheen siitä, poistin koko ketjun. Olen saanut kyllä lähes kaikki muut tarvittavat tagit tehtyä, mutta mitenkä saisi kooditagit? Voisiko se onnistua jotenkin, että kirjoitetusta tekstistä etsitään ensiksi vaikka tagit

[ko] ja [/ko]

ja sitten niiden välissä olevasta tekstistä muutettaisiin kaikki

[ ja ]

merkit merkkijonoiksi (en muista miten ne nyt merkitään), eli samalla tavalla kuin html:n estofunctiolla.

Lebe80 [30.12.2011 11:15:06]

#

Siiiis.... mitä eroa sun kooditägeillä on muuhun tekstiin nähden? Tarkoitushan kuitenkin on vain näyttää koodi esim. tasalevyisellä fontilla, jotta se on helpommin luettavissa.

ZuBer [30.12.2011 11:53:25]

#

Se, että jos esim. minulla on itse tekemiä tagejan ja kirjoitan tekstikenttään ohjeen, että saat lihotuksen kirjoittamalla

[l] [/l]

. Jos en kirjoita tuota kooditagien sisään, mitään ei näy.

Hennkka [30.12.2011 12:27:32]

#

Voithan tehdä kuten Putkassa, eli hakasuluille omat tagit, esim. [[] ja []]

ZuBer [30.12.2011 13:20:49]

#

Kiitos!

Mitenkäs sitten kun pitää saada rivinvaihdot tallentumaan tietokantaan..? Jos tekee sen niin, että aina pitää kirjoittaa vaikka

[ur]

että menee uudelle riville. Voisiko sen tehdä niin, että aina kun painaa enteriä, se lisää vaikka merkit >> rivin alkuun ja muuttaa ne sitten näytettäessä <br>:rräksi... En tämänkään toteuttamista osaa, mutta kertokaas miten se on esim täällä ohjelmointiputkassa toteutettu?

-tossu- [30.12.2011 13:40:14]

#

ZuBer kirjoitti:

Voisiko sen tehdä niin, että aina kun painaa enteriä, se lisää vaikka merkit >> rivin alkuun ja muuttaa ne sitten näytettäessä <br>:rräksi...

Tallenna rivinvaihdot kantaan ilman mitään kikkailuja ja tulostusvaiheessa muuta ne br-tagiksi.

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

ZuBer [30.12.2011 22:30:46]

#

Tallentuvatko ne sinne ihan vain että kirjoitan tekstikenttään jotain ja tietokannassa ne ovat rivinvaihtoina?

"Tekstikenttä":

Eka rivi
Toka rivi
Ja kolmas rivi.

Tallentaa tuon tuollaisena tietokantaan tietotyyppiin LONGTEXT ja kun tulostan sen pistän tuon koodin vain siihen eteen? Osaako tuo koodi siis poimia rivinvaihdot ja välilyönnit?

Macro [30.12.2011 22:33:14]

#

Ei se poimi mitään välilyöntejä eikä rivinvaihtoja. Se muuttaa rivinvaihtomerkit <br>-tageiksi. -tossu-:n koodi vastaa PHP:n omaa funktiota, nl2br:ää, mutta PHP:n oma toteutus huomioi kaikki muutkin rivinvaihtomerkit.

1. Tallenna teksti tietokantaan niin kuin käyttäjä se on antanut. Muista silti ajaa se mysql_real_escape_string-funktion läpi.

2. Hae tieto kannasta, aja funktiosi läpi, joka käsittelee tagit.

3. Muuta rivinvaihtomerkit <br>-tageiksi nl2br-funktiolla.

ZuBer [30.12.2011 22:51:14]

#

Mikä hyöty mysql_real_escape_string:istä siis on? Ja pitääkö minun tehdä omat rivinvaihtotagit (esim [ur]) vai riittääkö, että riviä vaihdettaessa painaa enteriä?

-tossu- [30.12.2011 23:23:47]

#

ZuBer kirjoitti:

Mikä hyöty mysql_real_escape_string:istä siis on?

Mysql_real_escape_string estää SQL-injektiot. Niitä on käsitelty tälläkin foorumilla tarkemmin ainakin n+1 kertaa. Lue ensiksi vaikka PHP-oppaan kappale aiheesta: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=php_13#sqlinjektio

ZuBer kirjoitti:

Ja pitääkö minun tehdä omat rivinvaihtotagit (esim [ur]) vai riittääkö, että riviä vaihdettaessa painaa enteriä?

Ei tarvitse. Enterin painaminen vastaa merkkien Carriage return ja Line feed kirjoittamista. Monesti ne merkitään \r\n. Antamani koodi tai nl2br-funkio muuttaa rivinvaihdot br-tageiksi. Vaikka pieni toiminnallinen ero niillä onkin, sillä ei ole tässä yhteydessä merkitystä.

ZuBer [31.12.2011 11:42:12]

#

Jos sitten aikoo tehdä sellaisen systeemin, että sitä aiemmin kirjoitettua tekstiä voi muokata ja haluaa ladata sen merkkijonon textarea-kenttään, tulostetaanko br-tagit sinne, vaiko saako ne tulostumaan rivinvaihtoina?

Hennkka [31.12.2011 12:32:29]

#

Kannattaa ladata se muotoilematon versio, jotta se muokkaus toimisi aina samalla tavalla ja jottei tekstiä muotoiltaisi kahdesti. Niin ja ne rivinvaihdot näkyvät textareassa sellaisenaan ilman br-tagia.

ZuBer [31.12.2011 14:15:24]

#

Vaikka laitan tuon

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

siihen koodiin, ei tapahdu mitään. Siellä tulostuksen joukossa vaan näkyy \r\n merkkejä rivivaihtojen tilalla...

-tossu- [31.12.2011 14:20:52]

#

ZuBer kirjoitti:

Siellä tulostuksen joukossa vaan näkyy \r\n merkkejä rivivaihtojen tilalla...

Ei \r\n -"merkkiä" voi mitenkään nähdä. Se on koodi, joka saa tekstin jatkumaan seuraavalta riviltä, ja jonka saa "kirjoitettua" painamalla enteriä. Ethän vaan ole kirjoittanut siihen textareaan "\r\n"? Se ei nimittäin toimi.

ZuBer [31.12.2011 14:23:05]

#

En. Olen kirjoittanut siihen:

Ensimmäinen rivi
Toka rivi
Ja kolmas rivi

Tulos:

Ensimmäinen rivi\r\nToka rivi\r\nJa kolmas rivi\r\n

Metabolix [31.12.2011 14:25:19]

#

Millä tavalla olet tämän tuloksen saanut? Oletko käsitellyt tekstiä jollain funktiolla?

ZuBer [31.12.2011 14:27:44]

#

Ennen kantaan tallennusta mennyt htmlspecialchars ja mysql_real_escape_string läpi.


Tietokannassa näkyy myös nuo \r\n jutut.

Metabolix [31.12.2011 14:38:52]

#

Ja miten käytät tietokantaa?

ZuBer [31.12.2011 14:43:47]

#

Yksinkertaistettuna:

Kun käyttäjä kirjoittaa tekstiä textareaan ja painaa lähetä, kulkee teksti htmlspecialchars ja mysql_real_escape_string läpi ja tallentuu tietokantaan longtextiin. Kun käyttäjä menee sivulle missä näitä "viestejä" voi katsella, ladataan tietokannasta GETtin antamaa id:tä vastaava sisältö, korvataan muutamia (esim. [l]) tageja (esim. <b>) tageilla ja sitten yritetään korvata \r\n br:rrällä tossun antaman koodin avulla. Sitten tulostus näytölle.

Macro [31.12.2011 14:46:00]

#

mysql_real_escape_string funktio escapettaa kenoviivat, joilloin \n -> \\n ja \r -> \\r.

ZuBer [31.12.2011 14:47:20]

#

Bravo! Kiitos! Nyt toimii!

-tossu- [31.12.2011 14:51:07]

#

ZuBer kirjoitti:

Kun käyttäjä kirjoittaa tekstiä textareaan ja painaa lähetä, kulkee teksti htmlspecialchars ja mysql_real_escape_string läpi ja tallentuu tietokantaan longtextiin.

Käytätkö tietokantaa mysql_-alkuisilla funktioilla vai PDO:lla?

Macro kirjoitti:

mysql_real_escape_string funktio escapettaa kenoviivat, joilloin \n -> \\n ja \r -> \\r.

Rivinvaihtokoodit eivät kyllä ole escapetettuja kun ne lomakkeelta tulevat, mutta mysql_real_escape_string escapettaa ne. Mikäli tekstin tallentaa sen jälkeen tietokantaan PDO:n avulla, escapetetaan ne vielä toisen kerran, jolloin koodit tallentuvat tietokantaan escapettetuina.

ZuBer [31.12.2011 14:52:14]

#

<p>Sisältö<FONT COLOR = "red">*</FONT>: <br>
<textarea NAME="sisalto" TYPE=textarea ROWS="30" COLS="70">
<?php
echo $sisalto;
?>
</textarea>

Noin ei ainakaan toimi tuo \r\b tagien muuttaminen rivinvaihdoiksi muuttamalla ne <br> tageiksi. Miten tuo textarean sisällön asettaminen kuuluisi hoitaa?

Edit. Käytän PDO:ta.

Macro [31.12.2011 14:52:58]

#

-tossu- kirjoitti:

Macro kirjoitti:

mysql_real_escape_string funktio escapettaa kenoviivat, joilloin \n -> \\n ja \r -> \\r.

... mutta mysql_real_escape_string escapettaa ne.

Enkös juuri sanonut niin?

ZuBer kirjoitti:

Noin ei ainakaan toimi tuo \r\b tagien muuttaminen rivinvaihdoiksi muuttamalla ne <br> tageiksi. Miten tuo textarean sisällön asettaminen kuuluisi hoitaa?

Hae sisältö tietokannasta, aja htmlspecialchars funktion läpi ja tulosta juuri tuolla tavalla se textareaan. Älä aja nl2br-funktiota, koska <br> tageilla ei ole textareassa merkitystä. Ne näkyvät siellä tekstinä.

ZuBer kirjoitti:

Käytän PDO:ta.

Sitten sinun ei tarvitse (eikä pidäkkään) käyttää mysql_real_escape_string-funktiota, koska PDO hoitaa sen escapetuksen puolestasi. Rivinvaihdot näkyvät tietokannassa siksi omilla koodeillaan, koska olet escapettanut ne kahdesti.

ZuBer [31.12.2011 15:00:25]

#

Kiitos. Nyt toimii!

-tossu- [31.12.2011 15:01:47]

#

Macro kirjoitti:

Enkös juuri sanonut niin?

Sanoit, että mysql_real_escape_string escapettaa kenoviivat. Niinhän se tekee, mutta tekstissä ei ole kenoviivoja ellei niitä joku sinne kirjoita, sillä rivinvaihtokoodeja ei ole vielä tässä vaiheessa escapetettu. Rivinvaihdoille siis tapahtuu seuraavaa: rivinvaihtokoodi (ASCII dec. 10) -> merkkijono \n. Aika turhaa pilkunviilaustahan tämä oli. :)

ZuBer [31.12.2011 16:59:51]

#

Minulle tuli ongelma, kun lataan merkkijonon jossa on sanaväli tekstikenttään (text), kaikki sanavälin jälkeen häviää. Vain eka sana jää. Kun taas käytän textarea:a, kaikki toimii. En vain haluaisi käyttää sitä, sillä se ladattava merkkijono on "aihe" ja aiheessa on vain yksi rivi.

<INPUT NAME="aihe"
TYPE="text" SIZE=40 VALUE=<?php echo $aihe ; ?>></p>

Macro [31.12.2011 17:20:23]

#

Se häviää, koska HTML-koodisi virheellistä.

<input type="text" name="aihe" size="40" value="<?php echo $aihe; ?>">

Opettele kirjoittamaan tagit ja attribuutit pienillä kirjaimilla, laittamalla attribuuttien arvot lainausmerkkeihin ja lopettamaan rivitys tagin sisällä.

Mod. vaihtoi oikeat kooditagit!

ZuBer [31.12.2011 17:32:20]

#

Kiitos! Ja kiitos opetuksesta, koitan opetella. Se onkin helpompaa, ettei tarvitse capsia naputella. :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta