在mysql查询中使用PHP表单
这里还有一个基本问题。我需要知道如何使用html表单过滤使用PHP的mysql查询结果。我一直在关注w3schools,我可以看到在一个页面上使用$\u POST如何输出到另一个页面。但我看不清楚如何将$帖子放入我的查询中。例如,我有一个页面,如下所示:在mysql查询中使用PHP表单,php,html,forms,Php,Html,Forms,这里还有一个基本问题。我需要知道如何使用html表单过滤使用PHP的mysql查询结果。我一直在关注w3schools,我可以看到在一个页面上使用$\u POST如何输出到另一个页面。但我看不清楚如何将$帖子放入我的查询中。例如,我有一个页面,如下所示: <form action="orderlist.php" method="post"> OrderNo: <input type="int" name="order_no" /> <input type="Subm
<form action="orderlist.php" method="post">
OrderNo: <input type="int" name="order_no" />
<input type="Submit" />
</form>
非常感谢试试这个:
$orderNumber = mysql_real_escape_string($_POST['order_no']);
$result = mysql_query("SELECT * FROM orders WHERE order_no = $orderNumber");
这将获取$u POST['order\u no']的值,并对其进行某种程度的净化。然后将$orderNumber的值应用于MySQL
不过,使用or会更好。如果正确使用SQL注入,两者都可以保护您。目前,您的代码很容易被SQL注入。尝试以下方法:
$orderNumber = mysql_real_escape_string($_POST['order_no']);
$result = mysql_query("SELECT * FROM orders WHERE order_no = $orderNumber");
这将获取$u POST['order\u no']的值,并对其进行某种程度的净化。然后将$orderNumber的值应用于MySQL
不过,使用or会更好。如果正确使用SQL注入,两者都可以保护您。目前,您的代码很容易被SQL注入。对于初学者,您应该切换到PDO或mysqli-mysql_*函数正在被弃用 关于你的问题:是的,你就是这样做的,带有WHERE子句。但是,在没有卫生设施的情况下直接从$u POST中连接变量是非常不安全的 也就是说,您至少应该这样做:
mysql_query('SELECT * FROM orders WHERE order_no = '.mysql_real_escape_string($_POST[order_no]));
还有一件事。。。不要使用SELECT*。您应该始终列出希望从数据库中获得的列—这样,如果出现列已更改之类的问题,查询可以让您知道。使用SELECT*你可以找回一个神奇的数据包——你不知道它是什么,更重要的是,它是否具有代码所依赖的值
所以,把它放在一起:
$pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
$sth = $pdo->prepare('
SELECT
`order_no`,
`ord_date`,
`est_completion_date`,
`status`,
`invoice_date`,
`inv_amount`,
`name`,
`fName`,
`lName`
FROM
orders
WHERE
order_no = :order_no
');
$sth->execute(array(':order_no'=>$_POST[order_no]));
while ($order= $sth->fetch()) {
echo "<tr>";
echo "<td>" . $order->order_no . "</td>";
echo "<td>" . $order->ord_date . "</td>";
echo "<td>" . $order->est_completion_date . "</td>";
echo "<td>" . $order->status . "</td>";
echo "<td>" . $order->invoice_date . "</td>";
echo "<td>" . $order->inv_amount . "</td>";
echo "<td>" . $order->name . "</td>";
echo "<td>" . $order->fName . "</td>";
echo "<td>" . $order->lName . "</td>";
echo "</tr>";
}
编辑:最后一个注释,您使用的输入无效;type=int不是可识别的输入类型,以及:
如您所见,HTML5确实有一个新的输入类型编号。它尚未完全采用,但如果您想使用它:
但是,请注意,并非所有浏览器都将输入限制为数字:
文件
mySql选择-
mysql\u查询已弃用-
PDO-
PDO::准备-
PDO语句::获取-
PDO语句::执行-
对于初学者,您应该切换到PDO或mysqli——mysql_*函数正在被弃用 关于你的问题:是的,你就是这样做的,带有WHERE子句。但是,在没有卫生设施的情况下直接从$u POST中连接变量是非常不安全的 也就是说,您至少应该这样做:
mysql_query('SELECT * FROM orders WHERE order_no = '.mysql_real_escape_string($_POST[order_no]));
还有一件事。。。不要使用SELECT*。您应该始终列出希望从数据库中获得的列—这样,如果出现列已更改之类的问题,查询可以让您知道。使用SELECT*你可以找回一个神奇的数据包——你不知道它是什么,更重要的是,它是否具有代码所依赖的值
所以,把它放在一起:
$pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
$sth = $pdo->prepare('
SELECT
`order_no`,
`ord_date`,
`est_completion_date`,
`status`,
`invoice_date`,
`inv_amount`,
`name`,
`fName`,
`lName`
FROM
orders
WHERE
order_no = :order_no
');
$sth->execute(array(':order_no'=>$_POST[order_no]));
while ($order= $sth->fetch()) {
echo "<tr>";
echo "<td>" . $order->order_no . "</td>";
echo "<td>" . $order->ord_date . "</td>";
echo "<td>" . $order->est_completion_date . "</td>";
echo "<td>" . $order->status . "</td>";
echo "<td>" . $order->invoice_date . "</td>";
echo "<td>" . $order->inv_amount . "</td>";
echo "<td>" . $order->name . "</td>";
echo "<td>" . $order->fName . "</td>";
echo "<td>" . $order->lName . "</td>";
echo "</tr>";
}
编辑:最后一个注释,您使用的输入无效;type=int不是可识别的输入类型,以及:
如您所见,HTML5确实有一个新的输入类型编号。它尚未完全采用,但如果您想使用它:
但是,请注意,并非所有浏览器都将输入限制为数字:
文件
mySql选择-
mysql\u查询已弃用-
PDO-
PDO::准备-
PDO语句::获取-
PDO语句::执行-
无注入漏洞需要“mysql\u connect”才能:
if(isset($_POST['order_no']))
{
$orderNo = mysql_real_escape_string($_POST['order_no']);
$result = mysql_query("SELECT * FROM orders WHERE order_no = $orderNo");
echo "<table border='5'>";
echo " <tr>";
echo " <th>order_no</th>";
echo " <th>ord_date</th>";
echo " <th>est_completion_date</th>";
echo " <th>status</th>";
echo " <th>invoice_date</th>";
echo " <th>inv_amount</th>";
echo " <th>name</th>";
echo " <th>fName</th>";
echo " <th>lName</th>";
echo " </tr>";
if(mysql_num_rows($result) == 0)
{
echo '<tr><td colspan="9">Order not found</td></tr>';
}
else
{
while($row = mysql_fetch_assoc($result))
{
echo "<tr>";
echo " <td>" . $row['order_no'] . "</td>";
echo " <td>" . $row['ord_date'] . "</td>";
echo " <td>" . $row['est_completion_date'] . "</td>";
echo " <td>" . $row['status'] . "</td>";
echo " <td>" . $row['invoice_date'] . "</td>";
echo " <td>" . $row['inv_amount'] . "</td>";
echo " <td>" . $row['name'] . "</td>";
echo " <td>" . $row['fName'] . "</td>";
echo " <td>" . $row['lName'] . "</td>";
echo "</tr>";
}
}
echo "</table>";
}
无注入漏洞需要“mysql\u connect”才能:
if(isset($_POST['order_no']))
{
$orderNo = mysql_real_escape_string($_POST['order_no']);
$result = mysql_query("SELECT * FROM orders WHERE order_no = $orderNo");
echo "<table border='5'>";
echo " <tr>";
echo " <th>order_no</th>";
echo " <th>ord_date</th>";
echo " <th>est_completion_date</th>";
echo " <th>status</th>";
echo " <th>invoice_date</th>";
echo " <th>inv_amount</th>";
echo " <th>name</th>";
echo " <th>fName</th>";
echo " <th>lName</th>";
echo " </tr>";
if(mysql_num_rows($result) == 0)
{
echo '<tr><td colspan="9">Order not found</td></tr>';
}
else
{
while($row = mysql_fetch_assoc($result))
{
echo "<tr>";
echo " <td>" . $row['order_no'] . "</td>";
echo " <td>" . $row['ord_date'] . "</td>";
echo " <td>" . $row['est_completion_date'] . "</td>";
echo " <td>" . $row['status'] . "</td>";
echo " <td>" . $row['invoice_date'] . "</td>";
echo " <td>" . $row['inv_amount'] . "</td>";
echo " <td>" . $row['name'] . "</td>";
echo " <td>" . $row['fName'] . "</td>";
echo " <td>" . $row['lName'] . "</td>";
echo "</tr>";
}
}
echo "</table>";
}
您的表单应该是这样的:
<form action="orderlist.php" method="post">
OrderNo: <input type="text" name="order_no" />
<input type="Submit" value="Submit"/>
</form>
注:
这类代码容易受到攻击,因此不建议将用户输入直接放入SQL查询,应始终首先对其进行筛选。您的表单应如下所示:
<form action="orderlist.php" method="post">
OrderNo: <input type="text" name="order_no" />
<input type="Submit" value="Submit"/>
</form>
注:
这类代码容易受到攻击,不建议将用户输入直接放入SQL查询中,应始终首先对其进行筛选。Try:$result=mysql\u querySELECT*FROM orders\u no=$_邮政[订单号];这可能无助于回答您的问题,但您应该停止使用mysql_*函数。他们被弃用了。请改用从PHP5.1起支持的或从PHP4.1起支持的。“如果你不确定该用哪一种,”安德鲁斯·杜德说,“那就很容易受到注射攻击。”。令人不快的这个网站在哪里托管?我有一个订单要查。具体来说,订单号为5;删除表格命令;:D@Matt-今天早上我路过一家叫Bobby's Table的餐厅,花了几分钟解释我为什么开始窃笑。试试:$result=mysql\u querySELECT*FROM orders\u no=$_邮政[订单号];这可能无助于回答您的问题,但您应该停止使用mysql_*函数。他们被弃用了。请改用从PHP5.1起支持的或从PHP4.1起支持的。“如果你不确定该用哪一种,”安德鲁斯·杜德说,“那就很容易受到注射攻击。”。令人不快的这个网站在哪里托管?我有一个订单要查。具体来说,订单号
r5;删除表格命令;:D@Matt-今天早上我路过一家叫Bobby's Table的餐馆,花了几分钟解释我为什么开始窃笑;这应该做它的Trip_标签吗?在所有可能的字符串函数中,我不明白你为什么主张使用那个。为什么不用mysql\u real\u escape\u字符串对其进行清理呢?为什么不加斜杠呢?英特瓦尔?strip_标记,也可以使用highlight_字符串来实现所有的功能-1@Chris-你说得对,我错了。我使用了错误的函数。编辑制作。打败我吧;这应该做它的Trip_标签吗?在所有可能的字符串函数中,我不明白你为什么主张使用那个。为什么不用mysql\u real\u escape\u字符串对其进行清理呢?为什么不加斜杠呢?英特瓦尔?strip_标记,也可以使用highlight_字符串来实现所有的功能-1@Chris-你说得对,我错了。我使用了错误的函数。编辑制作。我不认为答案会比这更全面。@user1620419很乐意帮忙!确保选择所选答案并单击绿色复选标记:我认为答案不会比这更全面。@user1620419很高兴提供帮助!确保选择所选答案,然后单击绿色复选标记:如果订单号为字母数字,该怎么办?已更新。他在他的查询中没有使用引号,所以我认为这是一个数字。可能是。。。只是说:如果订单号是字母数字怎么办?更新。他在他的查询中没有使用引号,所以我认为这是一个数字。可能是。。。只是说: