Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mysql查询中使用PHP表单_Php_Html_Forms - Fatal编程技术网

在mysql查询中使用PHP表单

在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

这里还有一个基本问题。我需要知道如何使用html表单过滤使用PHP的mysql查询结果。我一直在关注w3schools,我可以看到在一个页面上使用$\u POST如何输出到另一个页面。但我看不清楚如何将$帖子放入我的查询中。例如,我有一个页面,如下所示:

<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很高兴提供帮助!确保选择所选答案,然后单击绿色复选标记:如果订单号为字母数字,该怎么办?已更新。他在他的查询中没有使用引号,所以我认为这是一个数字。可能是。。。只是说:如果订单号是字母数字怎么办?更新。他在他的查询中没有使用引号,所以我认为这是一个数字。可能是。。。只是说: