格式化HTML输入字段的MySQL查询

时间:2013-08-15 19:40:14

标签: php html mysql input

我无法格式化数据字符串以进入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. ">

当它击中第一个撇号时,它会逃脱它但是然后因为用户使用了撇号和引号,它会混淆。

1 个答案:

答案 0 :(得分:3)

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

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

在提交表单并且您在SQL上下文中使用提交的数据时,您只使用sql escape东西。