【问题标题】:Formatting MySQL query for HTML input field为 HTML 输入字段格式化 MySQL 查询
【发布时间】:2013-08-15 19:40:13
【问题描述】:

我在格式化数据字符串以进入 HTML 输入字段时遇到问题。这是我的查询:

$sql_active = "SELECT * FROM table WHERE id='$id'";
$result_active = $mysqli->query($sql_active);
$row = mysqli_fetch_array($result_active);
$job_description = stripslashes($row['job_description']);

然后我使用 $job_description 变量在页面上显示信息。在页面的后面,我有一个隐藏的表单字段,我也需要将信息放入其中。那么我这样做:

<input type="hidden" name="description" value="<?php echo $mysqli->real_escape_string($job_description); ?>" />

问题是当用户第一次输入描述字段时,他们可以使用引号、双引号等(任何他们想要的)。在我在这里的这个例子中,它不允许信息超过引号。它的显示如下:

<input type="hidden" name="description" value="PLEASE NOTE: YOU MUST HAVE EXPERIENCE\r\n\r\nOne of the city\'s best employers. Basic \" handyman\" repair skills preferred. ">

当它碰到第一个撇号时,它会转义它,但由于用户同时使用了撇号和引号,它会感到困惑。

【问题讨论】:

    标签: php html mysql input


    【解决方案1】:

    你完全误解了逃跑的目的。这些函数是特定于目的的——当您输出到 HTML 上下文时,执行 SQL 转义序列是没有意义的,因为 HTML 不使用 SQL 样式的转义,SQL 也不使用 HTML 样式的转义。您可以使用适当的工具来完成手头的工作。由于你在做 HTML,你需要使用 htmlspecialchars(),例如

    <input ... value="<?php echo htmlspecialchars($job_description) ?>" />
                                 ^^^^^^^^^^^^^^^^
    

    您只会在提交表单并且在 SQL 上下文中使用提交的数据时使用 sql 转义内容。

    【讨论】:

    • 好吧(显然我对此比较陌生)。谢谢,这很完美! (我可以在五分钟内接受你的回答……)
    猜你喜欢
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多