使用PHP在数据库中存储动态创建元素的HTML


Storing HTML of a Dynamically Created Element in Database Using PHP

我正在创建一个用户可以在其中创建表的页面。它们可以添加行、数据和样式。每当用户添加行或数据时,它都会附加到页面

上显示的原始空白HTML表元素上
<table class='preview_table' id='preview' name='preview'>
    <!-- this is the space where entered info forms a table -->
        <thead></thead>
        <tbody></tbody>
</table> 

作为预览。然后,用户可以设置预览的样式,并且样式也会添加到表及其子元素中。

我希望能够采取结果的HTML代码,并将其放入数据库中,最好使用PHP,当用户点击保存按钮。这是我的PHP代码:

if(isset($_POST['submitted'])){
    $prob = false;
    if(!empty($_POST['title']) && !empty($_POST['type']) && !empty($_POST['name'])){
        $new_title = mysql_real_escape_string(trim($_POST['title']));
        $new_type = mysql_real_escape_string(trim($_POST['type']));
        $new_name = mysql_real_escape_string(trim($_POST['name']));
        $new_table = '' ;
        $new_id = $id;
    }else{
        echo '<p style="background-color:red;font-size:20px;">Enter values for all fields</p>';
        $prob = true;
    }
    if(!$prob){
        $q = "INSERT INTO tables (id , active , type , name , title , html_code) VALUES ('$new_id' , 'Y' , '$new_type' , '$new_name' , '$new_title' , '$new_table')";
        if(@mysql_query($q)){
            echo '<p style="background-color:green;font-size:20px;">Success!</p>';
        }else{
            echo '<p>'.mysql_error().'</p>';
        }
    }
}

我想将表的HTML代码设置为变量$new_table。到目前为止,我试过

$new_table = $_POST['preview'];

但我现在明白为什么这不起作用了。我还尝试使用ob_start和ob_get_contents,但这也不起作用。我对PHP相当陌生,所以可能有一些相当简单的东西我遗漏了。因此,我的问题是:如何使用PHP将动态创建的元素的HTML存储到数据库中?

任何和所有的帮助是非常感谢!谢谢你。

name=table必须是像<input><textarea>这样的表单元素才能发送到服务器。

如果必须使用当前的方法,请在提交表单之前使用jQuery将其存储在表单元素中。

HTML:

<form id="form" method="post" action="/some.php">
    <input type="hidden" id="hidden_preview" name="preview" value="">
    <!-- etc -->
jQuery:

$('#form').on('submit', function() {
    var str = $('#preview')[0].outerHTML; // not a jQuery property
    $('#hidden_preview').val(str);
});
https://developer.mozilla.org/en-US/docs/Web/API/element.outerHTML


也就是说,我强烈建议使用某种形式的markdown而不是HTML来防止站点中的跨站点脚本攻击。它更容易输入,不难学习,让您使用标准的<textarea>表单元素,如果您喜欢,有JS插件创建工具栏(如StackOverflow),使进入markdown更容易。