【问题标题】:How to fix error from posting html element and prevent it from running如何修复发布 html 元素的错误并阻止它运行
【发布时间】:2016-01-29 13:13:36
【问题描述】:

我正在调试我的网站, 我发现当我使用 post 文章发布 html、css 和 php 程序时 它将按照发布的方式运行我该如何解决这个问题,这样它就不会再次影响我的网站了

示例

当我提交这样的东西时

<style>
*{
display:none!important;
}
</style>

在整个页面上将不显示任何内容,而不是显示用户发布的内容。 另一个例子

<form>
<input type="text" value="Hello"/>
<input type="submit" value="submit"/>
<form>

此外,此 html 表单将作为 html 运行,而不是显示文本 请我如何在我的 php 中解决这个问题以避免这种情况。 我尝试在我的 php 中添加这个 mysql_real_escape_string($_POST['post']);,然后再将它发布到我的数据库,但仍然无法正常工作,谁能帮助我

这是我提交帖子的 php

<?php

if($_POST){
    $db_host = "localhost";
    $db_user = "root";
    $db_pass = "pass";
    $db_name = "posts";

    try {
         $db_conn = new PDO("mysql:host={$db_host};dbname={$db_name}",$db_user,$db_pass);
         $db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         $stmt = $db_conn->prepare("INSERT INTO posts(post) VALUES(:post)");

         $stmt->bindParam(':post', $post); 

         $form = $_POST;
         $post= mysql_real_escape_string($form['post']);

         $stmt->execute();

         echo "Post submited";

    }
    catch(PDOException $e)
    {
        echo "Error:" . $e->getMessage();
    }
    $db_conn = null;
}
?>

【问题讨论】:

  • mysql_real_escape_string() 不能很好地与 PDO 配合使用,并且不需要,因为您使用的是准备好的语句。 $form = $_POST 只是重新分配数组,sit 也是不必要的。
  • @JayBlanchard 我还能如何防止这种情况发生在我的页面上,至于mysql_real_escape_string()$form = $_POST 在我使用此帖子$post = $_POST['post'] 之前我没有使用它跨度>
  • 您的表单元素必须具有名称属性,否则不会发布任何内容。
  • 事实上,使用mysql_real_escape_string() 应该会产生错误,因为您没有使用mysql_ 扩展名进行连接。 首先查看您的 php 错误日志。如果为空,则更改php.ini 参数display_errors = On。如果您无法访问php.ini,因为您正在实时服务器上进行开发,那么在您的打开 PHP 标记之后添加错误报告到文件顶部测试时,例如&lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);看看它是否会产生任何东西。

标签: javascript php jquery css debugging


【解决方案1】:

尝试使用 htmlentities() 函数,因为它将所有适用的字符转换为 HTML 实体:

htmlentities ($form['post'])

【讨论】:

  • 为什么 OP 应该“试试这个”? 好的答案将始终解释所做的事情以及这样做的原因,不仅适用于 OP,也适用于 SO 的未来访问者。
  • 当我发布类似 &lt;style&gt;*{display:none;}&lt;/style&gt; 的内容时,我得到了这个输出 *{display:none;},当我发布输入时,它也将输入显示为 html @JayBlanchard
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2020-08-05
  • 2020-11-08
相关资源
最近更新 更多