Enters vervangen door <br>?
Ik ben voor mijn profielwerkstuk bezig met het maken van een eigen CMS. Één van de functies van dit CMS is het weergeven van artikelen die in de database staan. Echter, deze enters worden niet goed weergegeven op de website. Dat is eigenlijk logisch, want ik heb er geen <br> in staan.
Als het formulier wordt ingevuld met enters, dan wordt het wel zo opgeslagen in de database, dit heb ik al uitgevonden met de <pre> tag. Nu wil ik graag alle enters die dus in de database staan vervangen met een <br>. De meest logische manier lijkt me dit om op het Ascii nummer van de Enter te zoeken in de tekst, en deze via php te vervangen met <br>.
Ik kom echter niet uit de replace string van php die http://php.net/manual/en/function.str-replace.php gegeven staat. Mijn vraag
is dan ook of iemand mij kan helpen die string toe te passen op de volgende pagina:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
require_once('includes/DbConnector.php');
// Create an object (instance) of the DbConnector
$connector = new DbConnector();
// Execute the query to retrieve articles
$result = $connector->query('SELECT ID,title,thearticle,datetime FROM cmsarticles ORDER BY ID DESC LIMIT 0,5');
while ($row = $connector->fetchArray($result)){
$datetime = $row['datetime'];
$y=substr($datetime, 0, 4);
$m=substr($datetime, 5, 2);
$d=substr($datetime, 8, 2);
$h=substr($datetime, 11,2);
$i=substr($datetime, 14,2);
// Get an array containing the results.
// Loop for each item in that array
echo '<p><h1>';
echo $row['title'];
echo '</h1>';
echo '<b><h5>Geplaatst op: ';
echo $d;
echo '-';
echo $m;
echo '-';
echo $y;
echo ' om ';
echo $h;
echo ':';
echo $i;
echo '</h5></b><width="30" style:" font="Calibri">';
echo $row['thearticle'];
echo '</pre><br><a href="../../../viewArticle.php?id='.$row['ID'].'">';
echo 'Lees meer...';
echo '</a> </p>';
}
// Create an object (instance) of the DbConnector
$connector = new DbConnector();
// Execute the query to retrieve articles
$result = $connector->query('SELECT ID,title,thearticle,datetime FROM cmsarticles ORDER BY ID DESC LIMIT 0,5');
while ($row = $connector->fetchArray($result)){
$datetime = $row['datetime'];
$y=substr($datetime, 0, 4);
$m=substr($datetime, 5, 2);
$d=substr($datetime, 8, 2);
$h=substr($datetime, 11,2);
$i=substr($datetime, 14,2);
// Get an array containing the results.
// Loop for each item in that array
echo '<p><h1>';
echo $row['title'];
echo '</h1>';
echo '<b><h5>Geplaatst op: ';
echo $d;
echo '-';
echo $m;
echo '-';
echo $y;
echo ' om ';
echo $h;
echo ':';
echo $i;
echo '</h5></b><width="30" style:" font="Calibri">';
echo $row['thearticle'];
echo '</pre><br><a href="../../../viewArticle.php?id='.$row['ID'].'">';
echo 'Lees meer...';
echo '</a> </p>';
}
Alvast bedankt!
Gewijzigd op 15/09/2010 16:35:27 door Alex Zijlstra
kijk anders eens naar de functie nl2br
Code (php)
1
2
3
4
5
2
3
4
5
$y=substr($datetime, 0, 4);
$m=substr($datetime, 5, 2);
$d=substr($datetime, 8, 2);
$h=substr($datetime, 11,2);
$i=substr($datetime, 14,2);
$m=substr($datetime, 5, 2);
$d=substr($datetime, 8, 2);
$h=substr($datetime, 11,2);
$i=substr($datetime, 14,2);
Alex, bij deze verwijs ik je hier naar toe. (aangenomen dat je MySQL gebruikt)
- Is "connector" niet een rare naam om je database class te noemen, als het meer doet als alleen connecten naar de database ?
- Om enters om te zetten in "html enters", nl2br
- code inspringen
@ Niek s
Bedankt! Ik zal binnenkort even kijken naar de link over de data. Het werkt nu in ieder geval, en dat is het belangrijkste, dat het handiger kan, daar kijk ik niet raar van op ;)
Ik heb de nl2br pagina bekeken, en is het juist dat ik &row['thearticle'] gewoon als string kan gebruiken? Wat moet ik vervolgens met het tweede deel over xhtml?
Alvast bedankt!
gewoon:
echo '<een tag><andere html>' . nl2br($row['article']) . '</andere html></een tag>';
Het lijkt me overigens dat je je <br> alvast in je database wil opslaan. Anders ga je elke keer dat je een pagina aanroept die klote \n vervangen. Intensief, zeker als je het ook meteen goed kan doen :)
Merijn Venema op 15/09/2010 17:56:58:
Het lijkt me overigens dat je je <br> alvast in je database wil opslaan. Anders ga je elke keer dat je een pagina aanroept die klote \n vervangen. Intensief, zeker als je het ook meteen goed kan doen :)
Het lijkt me niet?
Zet gewoon het originele bericht in de database, als je even snel in de database wil kijken zie je tenminste al die HTML er niet in.
Alex Zijlstra op 15/09/2010 17:17:58:
@ Karl Karl, ik vind het fijn dat je zo vriendelijk hebt gereageerd! Ik denk wel dat je mijn vraag niet goed had begrepen.. Ik wilde weten hoe ik het moest toepassen, een link naar een lijst waarin de string staat die ik nodig heb is niet veel hulp. Als jij het trouwens bagger vind, zou ik graag de punten horen waarvan jij vind dat ik ze moet aanpassen! :)
Nee hoor, ik heb je vraag goed begrepen. Jij begrijpt mij niet, of wilt er niet de moeite voor doen. Zoals je zelf kan zien in je eerste post zit je een beetje raar te klooien met string replace. Als je gewoon de strings pagina had bekeken, dan had je zo nl2br kunnen vinden. Of je had natuurlijk wat zoekwerk kunnen verrichten, je bent heus niet de enige / eerste met dit probleem.
Verder is mijn hulp enorm. Je moet eens leren zelf dingen te verzinnen, dan kopiëren. Daar leer je namelijk niks van. Zeker met zulke enorm simpele dingen.
Zoals al eerder aangegeven suggereert de naam van je DB object dat je DB object vast niet correct in elkaar steekt. Dat ding maakt toch wel gebruik van PDO / mysqli?
Ook zoals eerder vermeld heb je gewoon datum / tijd functies als je gebruik maakt van databases. Daarvoor hoef je dus geen rare trucjes uit te halen.
Zeventien regels echo wijst er overduidelijk op dat je geen gebruik maakt van een template engine o.i.d. Dat betekend dus dat je voor jezelf meer werk verschaft want het onderhoud is ingewikkelder omdat je op meerdere plekken 'design' hebt. Ook is het nog eens onoverzichtelijk ('Waar komt die tag nou vandaan?').
Verder hoor je een p-tag niet te gebruiken om de andere tags te gebruiken. Ook dingen als <b> zijn ouderwets, gebruik CSS, ook al moet je dat eerst nog leren (zie font). Heb jij overigs de tag width uitgevonden?
Als je geen html / css kan, moet je ook geen php doen. Eerst html / css leren voordat je met php gaat beginnen (of je moet in dos willen werken ofzo).
Alex Zijlstra op 15/09/2010 17:17:58:
Wat belet jou om wat te testen? Je gaat toch niet die variabele by reference aanroepen? Die ampersand is toch een typo?
Voor je xhtml vraag, zie: nl2br.
Merijn Venema op 15/09/2010 17:56:58:
Het lijkt me overigens dat je je <br> alvast in je database wil opslaan. Anders ga je elke keer dat je een pagina aanroept die klote \n vervangen. Intensief, zeker als je het ook meteen goed kan doen :)
Nee, je wilt je data zo origineel mogelijk houden. Misschien wil je het later wel ophalen met javascript, of in flash ofzo, dan heb je niks meer aan die enters. Je doet dus gewoon die nl2br (en alle andere dingen als htmlentities) pas nadat je je data uit de database hebt gehaald.
Waar baseer jij op dat nl2br intensief is? Zo'n database verbinding, en objecten zijn veel intensiever.
</sarcasm>
@ Karl Karl, Bedankt voor de tips, hier kan ik meer mee. Ik zal binnenkort even kijken naar het efficiënter maken van de Datum en tijd. Ik had de nl2br functie wel gevonden, maar dacht dat deze niet op mij van toepassing was. Ik zit nu in het 3e jaar van Informatica op het Voortgezet Onderwijs, ik verwacht dus ook neit dat mijn code foutloos is, maar ben al lang blij dat het werkt zoals het nu doet. :)
Alex :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$qry = "SELECT
veld1,
veld2,
veld3,
DATE_FORMAT( datum, '%d-%m-%Y %H:%i' ) AS datum
FROM
tabel
ORDER BY
veld2 ASC";
if( $sql = mysql_query( $qry ) )
{
# Alle data weergeven
/*
Hier moet je nog het volgende doen:
1 - Kijken of er wel data is.
2 - Data in while loop gooien
3 - Data echoën
Je datum kan je dan weergeven met: echo $rec['datum'];
*/
}
else
{
# Fout in de query
}
?>
$qry = "SELECT
veld1,
veld2,
veld3,
DATE_FORMAT( datum, '%d-%m-%Y %H:%i' ) AS datum
FROM
tabel
ORDER BY
veld2 ASC";
if( $sql = mysql_query( $qry ) )
{
# Alle data weergeven
/*
Hier moet je nog het volgende doen:
1 - Kijken of er wel data is.
2 - Data in while loop gooien
3 - Data echoën
Je datum kan je dan weergeven met: echo $rec['datum'];
*/
}
else
{
# Fout in de query
}
?>
Wel, misschien kan je ook even kijken naar mysqli want mysql is al beetje verouderd. Kleine moeite om het in een keer goed te doen.