0

我有一个带有隐藏字段的表单,看起来像这样:

     <form id="myform" method="post" action="/myphp.php">

        <div>
            <label for="name">Name</label>
            <input type="text" id="name" name="name" />
        </div>
        <div>
            <input type="hidden" id="id" name="title" value="Bob's Group (test)" />
        </div>
        <div>     
            <input type="submit" value="Sign up" class="send_button" />
        </div>   


      </form>

隐藏值“title”从 Perch CMS php 内联脚本中获取其值,在本例中为“Bob's Group (test)”。

处理此表单的 php 脚本如下所示:

<?php

// Get and check input
$title = check_input($_POST['title']);
echo "title: $title<br>";

$name = check_input($_POST['name']);

$title = mysql_real_escape_string($title);

// Some sql queries that use $title
?>

输出如下所示:

标题:鲍勃的小组(测试)标题:

换句话说, mysql_real_escape_string 导致 title 变成一个空白字符串。

有没有办法处理这个表单值并生成一个安全的 sql 字符串来使用?

4

2 回答 2

0

mysql_real_escape_string()是 MySQL 服务器端。它需要一个活动的数据库连接。在检查时检查您是否有一个。

只是一个注释,而不是一个建议:mysql_escape_string()是客户端,即即使没有活动的 MySQL 连接也可以在 PHP 中工作。

于 2012-09-02T17:21:16.760 回答
0

您必须与 MySQL 建立活动连接才能使 msyql_real_escape_string() 工作。您很可能从 m_r_e_s() 中返回布尔值 FALSE,因为您尚未连接,并且它正在发出错误。如果你这样做

$title = mysql_real_escape_string($title) or die(msyql_error());
                                         ^^^^^^^^^^^^^^^^^^^^^^

您很可能会收到“未连接”错误消息。

连接是必需的,因此 m_r_e_s 可以正确地转义 - 它基本上会询问服务器它必须转义的元字符是什么,以便它可以正确地完成它的工作。

于 2012-09-02T17:21:34.653 回答