Gegevens uit database lezen als HTML voor update

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yori Hak

Yori Hak

09/05/2008 18:56:00
Quote Anchor link
Hallo,

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
 
PHP hulp

PHP hulp

08/05/2024 05:48:07
 
Thomas van Broekhoven

Thomas van Broekhoven

09/05/2008 19:16:00
Quote Anchor link
Mag ik misschien even de code van je HTML editor zien?
 
Yori Hak

Yori Hak

09/05/2008 20:40:00
Quote Anchor link
Van de update.php, insert.php of index.php??
 
Jesper Diovo

Jesper Diovo

09/05/2008 20:43:00
Quote Anchor link
TinyMCE zet HTML automatisch om. Als het goed is is het zo dat als je tekst invoert in een leeg tekstvak van TinyMCE, en deze d.m.v. de knopjes gaat opmaken, dat de tekst direct in die opmaak wordt weergegeven. Dus is het ook zo als je de tekst uit de database haalt en in TinyMCE editor zet.
Gewijzigd op 01/01/1970 01:00:00 door Jesper Diovo
 
W W

W W

09/05/2008 23:54:00
Quote Anchor link
TinyMCE neemt als ware je textarea over. Je kunt de content gewoon aanroepen met mysql_real_escape_string($_POST['content']). Hierin zal html instaan.
 
Erwin Nieuwenhuis

Erwin Nieuwenhuis

10/05/2008 11:13:00
Quote Anchor link
dus als jij je pagina uit de DB haalt, de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
    
    <textarea><?php echo $row['pagina']; ?></textarea>
    
Gewijzigd op 01/01/1970 01:00:00 door Erwin Nieuwenhuis
 
PHP Newbie

PHP Newbie

10/05/2008 11:41:00
Quote Anchor link
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 ;-)
 
Erwin Nieuwenhuis

Erwin Nieuwenhuis

10/05/2008 12:22:00
Quote Anchor link
en in dit geval staat het helemaal op de verkeerde plek, want nu gebruik je het op $_POST
 
Yori Hak

Yori Hak

10/05/2008 14:17:00
Quote Anchor link
Ik ben er nog niet echt uit.

<textarea>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $row['pagina']; ?>
</textarea>

dit werkt niet...

dit is mijn pagina nu: (dit werkt dus ook niet)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<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>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>&nbsp;</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
 
Erwin Nieuwenhuis

Erwin Nieuwenhuis

10/05/2008 14:22:00
Quote Anchor link
zet je code even tussen

je fout is dat je de html-tag textarea fout gebruikt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<textarea value="dit gaat niet 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
 
Yori Hak

Yori Hak

10/05/2008 14:41:00
Quote Anchor link
ik heb me code hierboven iets aangepast rond t textarea...
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
 
Joren de Wit

Joren de Wit

10/05/2008 14:44:00
Quote Anchor link
Echo de query die de foutmelding geeft ook eens...
 
Erwin Nieuwenhuis

Erwin Nieuwenhuis

10/05/2008 14:49:00
Quote Anchor link
je moet quotes om je id zetten
 
Yori Hak

Yori Hak

10/05/2008 14:56:00
Quote Anchor link
$resultaat = mysql_query($query) or die("Het opvragen van gegevens is mislukt:".mysql_error());
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
 
Joren de Wit

Joren de Wit

10/05/2008 14:59:00
Quote Anchor link
Ja? En welke variabele gebruik je in mysql_fetch_assoc() en is dat wel een geldig resultaat van een mysql_query()?
 
Erwin Nieuwenhuis

Erwin Nieuwenhuis

10/05/2008 15:00:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    echo $query;
?>


zet dit eens op regel 86
Gewijzigd op 01/01/1970 01:00:00 door Erwin Nieuwenhuis
 
Roppie

Roppie

10/05/2008 15:21:00
Quote Anchor link
Tips:

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("'","&#039;",$htmltekstvanformulier);
 
Joren de Wit

Joren de Wit

10/05/2008 15:39:00
Quote Anchor link
Quote:
een geldig opbouw van een query
En haal dan variabelen ook nog buiten quotes:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$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:
$nieuwehtmltekst = str_replace("'","&#039;",$htmltekstvanformulier);
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.

Als je html in je browser wilt weergeven gebruik je na het uitlezen uit de database de functie htmlentities().
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.