-2

继我之前提出的一个问题(得到了非常有帮助的回答 - 谢谢)之后,我有一个后续问题。

我设法将一个表单放入我的页面,该表单成功链接到另一个页面,并过滤了结果。然后我在下面直接添加了另一个表单(作为第二个搜索过滤器),但第二个表单不起作用。代码是:

<p style="margin-left:20px;">Search by:<br />
<form action="ordersfiltered.php" method="post">
order_no: <input type="int" name="order_no" />
<input type="Submit" />
</form>
<form action="ordersfiltered_name.php" method="post">
name: <input type="text" name="name" />
<input type="Submit" />
</form></p>

就像我说的,如果我在第一个框中输入 order_no 并单击“提交”,那么我会进入另一个页面,并相应地过滤结果。但是,当我在第二个框中输入名称时,我得到的页面包含所有表格标题等,但没有结果。作为参考,我在“ordersfiltered.php”页面上的相关代码是:

$result = mysql_query("SELECT * FROM orders WHERE order_no = " . $_POST["order_no"]);

(注意,我意识到我不应该使用 SELECT * - 它在我要更改的列表中)。这工作正常。

我在“ordersfiltered_name.php”上的代码是:

$result = mysql_query("SELECT * FROM orders WHERE name = " . $_POST["name"]);

任何想法为什么第一个有效但第二个无效?

另外 - 如果可能的话,我想修改它添加类似 WHERE name LIKE '%...%' 的内容,以防用户没有输入整个内容。

再次感谢。

4

2 回答 2

0

我认为这与它order_no是一个数字并且name是一个字符串的事实有关。字符串必须用引号括起来。

因此,改变:

$result = mysql_query("SELECT * FROM orders WHERE name = " . $_POST["name"]);

至:

$name =  mysql_real_escape_string($_POST['name']);
$result = mysql_query("SELECT * FROM orders WHERE name = '". $name ."'");

您还需要检查$_POST['name']没有任何引号。

编辑 1.你总是可以or die(mysql_error())在你的mysql命令之后使用。然后,您将能够看到这些命令不起作用的原因。

$_POST[..]编辑 2.在查询中使用它是非常危险的。您应该首先检查它的值并确保“清理”它。

编辑 3.Another 注意,考虑移动到PDO.

于 2012-08-24T17:00:39.310 回答
0

您说先前提出的问题有一些有用的答案,尽管您似乎没有使用其中任何一个:在 mysql 查询中使用 PHP 表单(我不会从那里重复所有有效点......)。

也就是说,您缺少已发布变量的引号和转义:

$result = mysql_query("SELECT * FROM orders WHERE name = '" . mysql_real_escape_string($_POST["name"])) . "'";
于 2012-08-24T17:04:12.593 回答