【问题标题】:How to store html in a mysql database如何将html存储在mysql数据库中
【发布时间】:2011-05-14 11:27:21
【问题描述】:

我正在尝试将 HTML 存储在数据库中,因此当我从数据库中检索表单时,我需要将其显示为表单而不是文本。 有没有办法做到这一点?

这是表格

$form = "<form id='' method='' action='' class=''>
    <input type='hidden' name='my-item-id' value= $uid />
    <input type='hidden' name='my-item-name' value=$title />
    <input type='hidden' name='my-item-price' value='1' />
    <input type='hidden' name='my-item-qty' value='1' />
    <input type='submit' name='my-add-button' class='button' value='Add to cart'/>
     </form>";

当我从数据库中检索上述内容时,它显示为文本,

数据库中的表单字段也是varchar(1000)

include('adodb.inc.php');
include('adodb-pager.inc.php');
$sql = 'select title as "TITLE",description as "DESCRIPTION",form as "ADD TO CART" from mathspapers order by sysdate desc';
$pager = new ADODB_Pager($db,$sql);

$pager->Render();

谢谢

【问题讨论】:

  • 您可能应该包含用于从数据库中读取值并将其发送到客户端的代码。
  • 请显示您用于检索代码的代码。另外,您的 varchar 字段的大小是多少?
  • 将 POST 保存为序列化就足够了?

标签: php mysql html


【解决方案1】:

当您在数据库中存储文本时,您可能会使用addslashes()
然后,当您从数据库返回文本时,在显示 HTML 文本之前需要 stripslashes() 之类的内容。 PHP Manual on stripslashes

【讨论】:

    【解决方案2】:

    建议您仅将表单字段名称和数据(值)存储为键值对,而不是将整个表单模式(和值)存储在 db 字段中。

    如果您以标准方式存储它们,您可以轻松使用它们,例如 ; (在表单处理页面使用)

    $form_data = "my-item-id=".$_POST["my-item-id"]."&my-item-name=".$_POST["my-item-name"]."&my-item-price=".$_POST["my-item-price"]."&my-item-qty=".$_POST["my-item-qty"];
    

    然后将 $form_data 仅存储在 db 中

    要使用 db 中的数据(肯定是在从 db 中提取 $form_data 之后),您可以使用 parse_str

    parse_str($form_data,$form_data_from_db);
    

    echo $form_data_from_db["my-item-id"] 将打印您存储的表单输入,例如

    但这些不是我的主要建议。 您将如何为每个存储的数据字段构建模式? 只需像许多 cms 一样构建一个函数来创建表单。

    试试这个;

    function myform_pattern_1($id,$method,$action,$class,$form_data){
    
    parse_str($form_data,$fd);
    
    $form_html = "<form id='' method='' action='' class=''>";
    $form_html .= "<input type='hidden' name='my-item-id' value='".$fd["my-item-id"]."' />";
    $form_html .= "<input type='hidden' name='my-item-name' value='".$fd["my-item-id"]."' />";
    $form_html .= "<input type='hidden' name='my-item-price' value='".$fd["my-item-id"]."' />";
    $form_html .= "<input type='hidden' name='my-item-qty' value='".$fd["my-item-id"]."' />";
    $form_html .= "<input type='submit' name='my-add-button' class='button' value='Add to cart'/>";
    $form_html .= "</form>";
    return $form_html;
    }
    

    在你喜欢的地方调用这个函数;

    echo myform_pattern_1("form_id","post","","form_class",$form_data);
    

    这种用法对您的方法有很大的好处。 您可以随时更改表单语法。您可能希望稍后集成一个 Jquery 验证插件,或者只是想使用另一种样式,甚至通过添加标签来更改语法,如果您将整个表单存储在 db 中,则必须更改所有存储的 db 字段。函数使用更加灵活。另外你不会使用db来存储不必要的-repeating-标签等。

    希望你喜欢,西斯

    有关 parse_str 的更多信息; http://php.net/manual/en/function.parse-str.phpenter code here

    【讨论】:

      【解决方案3】:

      如果我不得不猜测,我会说您的 VARCHAR 字段太小而无法占用所有 HTML,因此标记在某处被截断,导致 HTML 显示为文本。

      【讨论】:

      • 您好,感谢您的回复,我可以看到完整的文本形式,所以我不认为 varchar 很小。
      【解决方案4】:

      在没有更多支持证据的情况下,我的猜测是您正在将表单 html 转换为它们的 html 安全等效项,因此它只是作为文本“输出”,它只是文本。

      仔细检查您的输出,确认实际源代码与&amp;lt; 不一样

      【讨论】:

        【解决方案5】:

        来自 htmlspecialchars 的 PHP 文档: 某些字符在 HTML 中具有特殊意义 所做的翻译是那些对日常网络编程最有用的。如果您需要翻译所有 HTML 字符实体,请改用 htmlentities()。

        结果存储在数据库中,然后从数据库中提取。

        你有它。

        【讨论】:

          猜你喜欢
          • 2011-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多