Gegevens uit database lezen als HTML voor update
Ik ben begonnen een eigen cmsje te gaan maken om te kijken of dit een beetje wil lukken.
Ik gebruik TinyMCE als HTML-editor.
Als ik iets in de editor typ en het bijvoorbeeld bold maak zie ik in de database <b></b> tags om mijn tekst staan. Als ik de gegevens uit de database lees is de tekst ook nog steeds bold.
Als ik de tekst wil updaten probeer ik de tekst weer in de editor te laden. Dit lukt echter niet. Zonder de HTML-editor lukt het wel.
Heeft iemand enig idee waarom het lezen van gegevens uit de database om het te updaten niet goed werkt? Soms toont ie helemaal niets en soms 1 woord met wat tekens als ">. Meer niet...
ik hoop dat jullie een oplossing weten...
alvast bedankt
Gewijzigd op 01/01/1970 01:00:00 door Yori Hak
Mag ik misschien even de code van je HTML editor zien?
Van de update.php, insert.php of index.php??
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
TinyMCE neemt als ware je textarea over. Je kunt de content gewoon aanroepen met mysql_real_escape_string($_POST['content']). Hierin zal html instaan.
Pepijn schreef op 09.05.2008 23:54:
TinyMCE neemt als ware je textarea over. Je kunt de content gewoon aanroepen met mysql_real_escape_string($_POST['content']). Hierin zal html instaan.
mysql_real_escape_string() Gebruik je wanneer je data in de database zet, niet wanneer je het eruit haalt ;-)
en in dit geval staat het helemaal op de verkeerde plek, want nu gebruik je het op $_POST
<textarea></textarea>
dit werkt niet...
dit is mijn pagina nu: (dit werkt dus ook niet)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<html>
<head>
<title>TinyMCE Test</title>
<script language="javascript" type="text/javascript" src="jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
// Example content CSS (should be your site CSS)
content_css : "css/content.css",
// Drop lists for link/image/media/template dialogs
template_external_list_url : "lists/template_list.js",
external_link_list_url : "lists/link_list.js",
external_image_list_url : "lists/image_list.js",
media_external_list_url : "lists/media_list.js",
// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
});
</script>
</head>
<body>
<?php
// stap 1: db variabelen, vul deze in voor jouw situtatie
$host = "localhost";
$user = "root";
$pass = "";
$db = "tinymce";
// stap 2: connectie naar database
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
// stap 3: database selecteren
mysql_select_db($db) or die ("Unable to select database!");
?>
<h1>Item bewerken</h1>
<?php
//is er al op ok gedrukt?
if(isset($_POST['knop']))
{
// stap 4: query definieren in variabele
// haal gegevens op die in het formulier zijn ingevuld
$inhoud = $_POST['inhoud'];
$id = $_POST['id'];
//maak update query
$query = "UPDATE pagina SET
inhoud = '{$inhoud}'
WHERE id ={$id}";
// stap 5/6: query uitvoeren en resultaat laten zien
if( mysql_query($query) )
{
print("Item is aangepast. Terug naar <a href=\"select.php\">overzicht</a>");
}
else
{
print("Item is niet aangepast:<b>".mysql_error()."</b> query is:".$query);
}
}
else
{
//De gegevens moeten eerst uit de database opgevraagd worden.
// stap 4: query definieren in variabele
$query = "SELECT id,inhoud FROM pagina WHERE id=".$_GET['id'];
// stap 5: query uitvoeren
$resultaat = mysql_query($query) or die("Het opvragen van gegevens is mislukt:".mysql_error());
$rij = mysql_fetch_assoc($resultaat);
// stap 6: laat resultaten in een html formulier zien zodat deze kunnen worden aangepast
$id_db = $rij['id'];
$inhoud_db = $rij['inhoud'];
// stap 7: netjes afsluiten
//maak de array leeg, netjes...
mysql_free_result($resultaat);
?>
<form name="form1" id="form1" method="post" action="<?php print($_SERVER['PHP_SELF']) ?>">
<table>
<tr>
<td>id</td>
<td><?php print($id_db); ?><input name="id" type="hidden" value="<?php print($id_db); ?>" /></td>
</tr>
<tr>
<td>inhoud</td>
<td><textarea><?php print($inhoud_db); ?></textarea></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input name="knop" type="submit" value="Opslaan" /></td>
</tr>
</table>
</form>
<?php
}
// stap 8: connectie sluiten
mysql_close($connection);
?>
</body>
</html>
<head>
<title>TinyMCE Test</title>
<script language="javascript" type="text/javascript" src="jscripts/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
tinyMCE.init({
// General options
mode : "textareas",
theme : "advanced",
plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
// Theme options
theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_statusbar_location : "bottom",
theme_advanced_resizing : true,
// Example content CSS (should be your site CSS)
content_css : "css/content.css",
// Drop lists for link/image/media/template dialogs
template_external_list_url : "lists/template_list.js",
external_link_list_url : "lists/link_list.js",
external_image_list_url : "lists/image_list.js",
media_external_list_url : "lists/media_list.js",
// Replace values for the template plugin
template_replace_values : {
username : "Some User",
staffid : "991234"
}
});
</script>
</head>
<body>
<?php
// stap 1: db variabelen, vul deze in voor jouw situtatie
$host = "localhost";
$user = "root";
$pass = "";
$db = "tinymce";
// stap 2: connectie naar database
$connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
// stap 3: database selecteren
mysql_select_db($db) or die ("Unable to select database!");
?>
<h1>Item bewerken</h1>
<?php
//is er al op ok gedrukt?
if(isset($_POST['knop']))
{
// stap 4: query definieren in variabele
// haal gegevens op die in het formulier zijn ingevuld
$inhoud = $_POST['inhoud'];
$id = $_POST['id'];
//maak update query
$query = "UPDATE pagina SET
inhoud = '{$inhoud}'
WHERE id ={$id}";
// stap 5/6: query uitvoeren en resultaat laten zien
if( mysql_query($query) )
{
print("Item is aangepast. Terug naar <a href=\"select.php\">overzicht</a>");
}
else
{
print("Item is niet aangepast:<b>".mysql_error()."</b> query is:".$query);
}
}
else
{
//De gegevens moeten eerst uit de database opgevraagd worden.
// stap 4: query definieren in variabele
$query = "SELECT id,inhoud FROM pagina WHERE id=".$_GET['id'];
// stap 5: query uitvoeren
$resultaat = mysql_query($query) or die("Het opvragen van gegevens is mislukt:".mysql_error());
$rij = mysql_fetch_assoc($resultaat);
// stap 6: laat resultaten in een html formulier zien zodat deze kunnen worden aangepast
$id_db = $rij['id'];
$inhoud_db = $rij['inhoud'];
// stap 7: netjes afsluiten
//maak de array leeg, netjes...
mysql_free_result($resultaat);
?>
<form name="form1" id="form1" method="post" action="<?php print($_SERVER['PHP_SELF']) ?>">
<table>
<tr>
<td>id</td>
<td><?php print($id_db); ?><input name="id" type="hidden" value="<?php print($id_db); ?>" /></td>
</tr>
<tr>
<td>inhoud</td>
<td><textarea><?php print($inhoud_db); ?></textarea></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input name="knop" type="submit" value="Opslaan" /></td>
</tr>
</table>
</form>
<?php
}
// stap 8: connectie sluiten
mysql_close($connection);
?>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door Yori Hak
je fout is dat je de html-tag textarea fout gebruikt:
Code (php)
1
2
3
2
3
<textarea value="dit gaat niet werken"></textarea>
<textarea>dit gaat wel werken</textarea>
<textarea>dit gaat wel werken</textarea>
verder moet je nog wel het een en ander gaan doen aan sql injection en foutafhandeling, want je gebruikt $_GET['id'] rechtstreeks in je query en die() hoef je niet te gebruiken
nu laat ie de tekst wel in de editor alleen t opslaan werkt nu niet meer...
foutmelding:
Het opvragen van gegevens is mislukt:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Echo de query die de foutmelding geeft ook eens...
je moet quotes om je id zetten
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\Program Files\wamp\www\Test Tinymce\update.php on line 89
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\Program Files\wamp\www\Test Tinymce\update.php on line 97
Ja? En welke variabele gebruik je in mysql_fetch_assoc() en is dat wel een geldig resultaat van een mysql_query()?
een geldig opbouw van een query
$query_string = "UPDATE $tabelnaam SET itema='$itemforma', itemb='$itemformbl', WHERE id='$idform'";
of
$query_string = "SELECT id, itema, itemb FROM $tabelnaam WHERE id='$idform'";
voor dat je html opslaat on je mysql !!
$nieuwehtmltekst = str_replace("'","'",$htmltekstvanformulier);
Quote:
En haal dan variabelen ook nog buiten quotes:een geldig opbouw van een query
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$sQuery = "
UPDATE
tabelnaam
SET
kolom = '".$waarde."'
WHERE
id = ".$id;
?>
$sQuery = "
UPDATE
tabelnaam
SET
kolom = '".$waarde."'
WHERE
id = ".$id;
?>
Verder snap ik niet waarom je je tabelnaam in een variabele zou zetten. Daar is helemaal niets variabels aan, die verandert echt niet...
Quote:
Dit slaat de plank ook mis. Voordat je gegevens opslaat in een database is de enige functie die je gebruikt mysql_real_escape_string(). Op die manier worden alle gevaarlijke tekens geescaped.$nieuwehtmltekst = str_replace("'","'",$htmltekstvanformulier);
Als je html in je browser wilt weergeven gebruik je na het uitlezen uit de database de functie htmlentities().