Toon posts:

[PHP] html uit een text halen die uit een DB komt

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik zit met een klein probleempje:

ik wil de html uit mijn nieuws berichten halen.
dit deed ik eerst voordat ik de zooi in mijn MySQL db gooide.

maar toen ik een edit functie ging bouwen kwam ik erachter dat dat heel irritant werkt als je al die gefilterde zooi enzo uit je db haalt en dan wil editten.

Dus nu wou ik het pas filteren etc als het uit de db komt, maar dat lukt dus niet :(

ik gebruik de volgende codes:

de zooi in de DB gooien:
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
<?
   if ($submit) { 
      // Maak verbinding met MySQL server 
      $server = mysql_connect(); 
      mysql_select_db("site", $server); 
      
      // Zet voor 'gevaarlijke' tekens (', ", en \) een extra \ 
      $ond = addslashes($ond);
      $art = addslashes($art);
      
      // aantal nieuws berichten tellen
      $select = "SELECT * FROM news"; 
      $resultaat = mysql_query($select); 
      $aantal = mysql_num_rows($resultaat); 
      $id = "$aantal + 1";
      
      // Maak SQL query om toe te voegen (INSERT) 
      $sql = "INSERT INTO news (ond, art, id) 
         VALUES ('$ond', '$art', '$id')"; 
      
      // Voer SQL uit 
      mysql_query($sql) or die("Oops..."); 
      
      // Geef bevestiging 
      echo "Cool, news is suxesvol toegevoegd.\n";
}
?>

sorry voor de teksten erbij, maar das zodat ik het goed begrijp enzo, want kben pas sinds het weekend met MySQL bezig :)

en nu de code waarmee ik het uit de DB haal:
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
<?
 // Maak verbinding met MySQL server 
 $server = mysql_connect(); 
 mysql_select_db("site", $server); 

 // Maak een voorbeeld SQL-query 
 $sql = "SELECT * FROM news"; 
   
 // Voer die query uit 
 $resultaat = mysql_query($sql); 
   
 // Aantal rijen 
 $aantal = mysql_num_rows($resultaat); 
 
 echo "<html><head><title>News!</title></head>\n";
 echo "<body bgcolor=#ff0000>\n";
 echo "<u>Er zijn <b>$aantal</b> artikels gevonden:</u><br>\n";
 echo "<table border=1>\n";
 
 // Maak een lus om alle items te laten zien 
 while ($record = mysql_fetch_object($resultaat)) { 
 $id = "$record->id";
 $bla = "$record->ond";
 $blaat = "$record->art";
 $ond = "htmlentities($bla)";
 $iets = "htmlentities($blaat)";
 $art = "nl2br($iets)";
    echo "<tr>\n";
    echo "<td valign=top>id: $id</td>\n";
    echo "<td><b>$ond</b></td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td>.</td>\n";
    echo "<td>$art\n</td>\n";
    echo "</tr>\n";
 } 
echo "</table></body></html>"
?>

het gaat fout bij het nl2br en htmlentities, wie heeft een andere oplossing? :)

Verwijderd

Er zijn 2 manieren om dit mooi op te lossen:

1) Zet geen HTML codes in je database, maar voeg alleen opmaak toe tijdens het ophalen en weergeven. Dit zorgt voor een simpele datastructuur waarbij je content en layout gescheiden houdt.

Nadeel is dat het wat performance kost, omdat je iedere keer tijdens het displayen je data moet formatten.

2) Zet zowel de oorspronkelijke als de opgemaakte content in je database (in 2 aparte velden natuurlijk). Als je een stuk content of wijzigt zul je dus 2 keer zoveel opslaan, maar tijdens het displayen alleen de opgemaakte content displayen, zodat je niet bij iedere keer tonen de opmaak hoeft toe te voegen, wat weer performance scheelt.

PS: Er zijn vast nog meer oplossingen, maar deze leken mij goed bij jouw sitiuatie aan te sluiten.

Succes :)

Verwijderd

Topicstarter
Op maandag 07 januari 2002 19:36 schreef MrX het volgende:
Er zijn 2 manieren om dit mooi op te lossen:

1) Zet geen HTML codes in je database, maar voeg alleen opmaak toe tijdens het ophalen en weergeven. Dit zorgt voor een simpele datastructuur waarbij je content en layout gescheiden houdt.

Nadeel is dat het wat performance kost, omdat je iedere keer tijdens het displayen je data moet formatten.

2) Zet zowel de oorspronkelijke als de opgemaakte content in je database (in 2 aparte velden natuurlijk). Als je een stuk content of wijzigt zul je dus 2 keer zoveel opslaan, maar tijdens het displayen alleen de opgemaakte content displayen, zodat je niet bij iedere keer tonen de opmaak hoeft toe te voegen, wat weer performance scheelt.

PS: Er zijn vast nog meer oplossingen, maar deze leken mij goed bij jouw sitiuatie aan te sluiten.

Succes :)
1) ik zet geen lay out in mijn DB, maar dat anti HTML is tegen van die irri gastjes die news ofzo submitten en dan html gaan gebruiken |:(

2) Hoe bedoel je opgemaakt content? :)

Verwijderd

Ik blaat onzin ... |:(

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 15-09 19:23

WoutF

Hoofdredacteur
Ik gebruik altijd
striptags();
deze functie hakt automatisch alle HTML tags uit een variabele

Verwijderd

Topicstarter
Op maandag 07 januari 2002 20:21 schreef woutf het volgende:
Ik gebruik altijd
striptags();
deze functie hakt automatisch alle HTML tags uit een variabele
de functies weet ik wel, en die staan ook in mijn script, dus hier hep ik nix aan :(

  • WoutF
  • Registratie: Maart 2000
  • Laatst online: 15-09 19:23

WoutF

Hoofdredacteur
Op maandag 07 januari 2002 20:23 schreef Schum1 het volgende:

[..]

de functies weet ik wel, en die staan ook in mijn script, dus hier hep ik nix aan :(
Nou sorry hoor :(
die functie zie ik anders nergens in het stuk code wat je geplaatst hebt

Verwijderd

Topicstarter
Op maandag 07 januari 2002 20:35 schreef woutf het volgende:

[..]

Nou sorry hoor :(
die functie zie ik anders nergens in het stuk code wat je geplaatst hebt
ik gebruik htmlentities ipv striptags :)

  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 04-05 00:03

Engineer

Software

.

[ Voor 98% gewijzigd door Engineer op 13-10-2018 17:31 ]


Verwijderd

Topicstarter
hmm, maar heeft er iemand een oplossing, of heeft ier iemand uberhaut gekeken naar het deel waar ik dnek dat de fout zit? :)

Verwijderd

niemand schelden als dit volledig fout is maar:

kan je niet iets doen als replace <%> (%=toch alle mogelijke inhouden?> met niks?

Verwijderd

Topicstarter
De commands die ik gebruik zijn niet fout, maar dit stukje zit de fout in:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
 while ($record = mysql_fetch_object($resultaat)) { 
 $id = "$record->id";
 $bla = "$record->ond";
 $blaat = "$record->art";
 $ond = "htmlentities($bla)";
 $iets = "htmlentities($blaat)";
 $art = "nl2br($iets)";
    echo "<tr>\n";
    echo "<td valign=top>id: $id</td>\n";
    echo "<td><b>$ond</b></td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td>.</td>\n";
    echo "<td>$art\n</td>\n";
    echo "</tr>\n";
 } 
?>

wie weet hoe dat wel moet? :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16:30

Janoz

Moderator Devschuur®

!litemod

Wat gaat er dan precies mis? Ik zie niks fout aan je code (Behalve dan bij het invoegen :), denk eens aan count(*D ipv * + mysql_num_rows, en lees eens iets over het toevoegen van autoincrement bij je ID veld)

Zoals het er nu uit ziet zet ie html tags keurig om in > ed. Af wil je die tags juist helemaal niet zien?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • clevy
  • Registratie: Juni 2001
  • Laatst online: 03-07-2024

clevy

It&#039;s a race !

waarom laat je de php code geen javascript code schrijven die met document.write het spul als html neerkalkt ?

a word to the wise is more often the start of an argument than the help it ought to be


Verwijderd

Topicstarter
Zo gaat het fout:

de code waarmee ik het uit de DB haal geeft nix uit de DB weer, maar geeft dit:
code:
1
2
3
4
5
6
Er zijn 1 artikels gevonden:
 ____________________________
|id: 0| htmlentities(blaat)  |
|-----+--------------------- |
|.    | nl2br(htmlentities())|  
 ----------------------------

dus hij laat een deel van de code zien ipv het nieuws en het het onderwerp, ID doet 'ie wel goed, maar dat komt omdat ik daar geen "gezeik" voor heb staan.

dus waar zit dan de fout in het "gezeik"? :P

Verwijderd

Topicstarter
geen php freakz hier die het me kunnen vertellen? :'(

Verwijderd

code:
1
"htmlentities($var)"

wordt:
code:
1
htmlentities($var);

en lees eens iets over netjes programmeren, die variabelen naampjes slaan werkelijk alles...

Verwijderd

Topicstarter
Op dinsdag 08 januari 2002 08:34 schreef Grofur het volgende:
code:
1
"htmlentities($var)"

wordt:
code:
1
htmlentities($var);

en lees eens iets over netjes programmeren, die variabelen naampjes slaan werkelijk alles...
bedankt, dat werkt wel :)

maar die vars waren om ff te testen :)
Pagina: 1