<li>变为&lt; li&gt;添加到数据库时</li>

时间:2013-02-22 14:33:09

标签: php html mysql

我有一个脚本,我将一个新项目写入我的数据库。 在这个脚本中,我有一个textarea元素,名称=“omschrijving”。 在该textarea中,用户可以指定&lt;李&GT;我用css设计过的元素。

问题是,当我输入时:&lt; li&gt; hello&lt; / li&gt;成为:&amp; lt; li&gt; hello&amp; lt; / li&gt;在我的数据库中。

我使用mediumtext类型列来存储textarea的值。

我的表格代码:

<form action="nieuwproject.php?action=toevoegen" method="post">

                            <fieldset class=""> <!-- Set class to "column-left" or "column-right" on fieldsets to divide the form into columns -->



                                <p>
                                    <label>Naam</label>
                                    <input class="text-input medium-input datepicker" type="text" id="medium-input" name="naam" />
                                </p>

                                <p>
                                    <label>Categorie</label>
                                    <select name="categorie" class="text-input medium-input">
                                       <?php $oObj->getCategorieDropdown(); ?> 
                                    </select>
                                </p>

                                <p>
                                    <label>Opdrachtgever</label>
                                    <input class="text-input medium-input datepicker" type="text" id="medium-input" name="opdrachtgever" />
                                </p>

                                <p>
                                    <label>Omschrijving</label>
                                    <textarea class="text-input textarea wysiwyg" id="textarea" name="omschrijving" cols="79" rows="15"></textarea>
                                </p>

                                <p>
                                    <label>Werkzaamheden</label>
                                    <textarea class="text-input textarea wysiwyg" id="textarea" name="werkzaamheden" cols="79" rows="15"></textarea>
                                </p>

                                <p>
                                    <input class="button" type="submit" value="Submit" />
                                </p>

                            </fieldset>

                            <div class="clear"></div><!-- End .clear -->

                        </form>

我的插入脚本代码:

function addProject() {
    $this->sQuery = "INSERT INTO projecten (naam,opdrachtgever,omschrijving,werkzaamheden,categorie) 
        VALUES ('" . $_POST['naam'] . "','" . $_POST['opdrachtgever'] . "','" . $_POST['omschrijving'] . "','" . $_POST['werkzaamheden'] . "','" . $_POST['categorie'] . "')";
    $this->rResult = mysql_query($this->sQuery);
}

有谁知道如何解决这个问题? 我知道这个脚本对黑客来说很有吸引力,因此没有必要指出这一点。

亲切的问候,

迈克尔

2 个答案:

答案 0 :(得分:2)

确定。
只需在代码中找到对数据库数据htmlspecialchars/htmlentities执行的地方并删除它。

我可以向您保证,数据库永远不会按照自己的意愿添加符号。
更改/添加到数据中的每个符号都是一些PHP代码的结果。

请注意,您的查询格式不正确 您必须通过单独格式化每个文字或使用预准备语句来格式化它 这与您的li&gt问题无关,但它与您的应用程序错误和漏洞相关

答案 1 :(得分:0)

http://php.net/manual/en/function.htmlentities.php http://www.php.net/manual/en/function.htmlspecialchars.php

据我所知,MySQL不会像这样清理你的html,所以代码中的某些内容正在传递$_POST['omschrijving']htmlentities()htmlspecialchars()。这些函数中的任何一个都会产生您在数据库中看到的输出。

编辑:

刚刚看到你的评论,这是你的WYSIWYG编辑器。好抓!