我有一个隐藏字段的表单,如下所示:
<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字符串来使用?
答案 0 :(得分:0)
mysql_real_escape_string()
是MySQL服务器端。它需要一个活动的数据库连接。检查你在检查时是否有一个。
只是一个注释,而不是一个建议:mysql_escape_string()
是客户端的,即使没有活动的MySQL连接,也可以在PHP中工作。
答案 1 :(得分: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可以正确地转义 - 它基本上询问服务器必须转义的元字符是什么,以便它可以正常工作。