使用POST方法显示PHP数据库中的数据

使用POST方法显示PHP数据库中的数据,php,html,post,Php,Html,Post,我正在链接中使用此SQL查询从数据库检索数据 <div class="nav-laptop"><a href="proizvodi.php?upit=SELECT Slika, Naziv, Opis, Cijena FROM Proizvodi WHERE Kategorija='Laptop' ORDER BY Proizvodac Asc;">Laptop</a> 并使用 $sql = $_REQUEST['upit']; $result = $

我正在链接中使用此SQL查询从数据库检索数据

<div class="nav-laptop"><a href="proizvodi.php?upit=SELECT Slika, Naziv, Opis, Cijena FROM Proizvodi WHERE Kategorija='Laptop' ORDER BY Proizvodac Asc;">Laptop</a>

并使用

$sql = $_REQUEST['upit'];

$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<div class='proizvodi'>";
    // output data of each row
     $result->data_seek(0);
    while($row = $result->fetch_assoc()) {
        echo "<div class='row'>";
            foreach($row as $key => $value){
                echo "<div class='" . $key . "'>" . $value . "</div>";
            }
        echo "</div>";
        echo "<hr />";
    }
    echo "</div>";
}
else {
    echo "<div class='search-query-none'><img src='index/no result.png' width='754' height='198' /></div>";
}
$sql=$\u请求['upit'];
$result=$conn->query($sql);
如果($result->num_rows>0){
回声“;
//每行的输出数据
$result->data\u seek(0);
而($row=$result->fetch_assoc()){
回声“;
foreach($key=>$value的行){
回显“$value.”;
}
回声“;
回声“
”; } 回声“; } 否则{ 回声“; }
我意识到这是非常脆弱的,我应该使用POST方法从URL中隐藏参数。我试着阅读在线论坛,但我发现没有任何东西可以帮助我将其转换为POST方式来检索数据。
那么,我如何使用POST方法来获得与我现在使用GET获得的相同的结果呢?

这将为您提供一个关于如何实现这一点的总体思路

HTML格式:

<form method="post" action="your_handler.php">
   <input type = "text" name = "search_query">
   <input type = "submit" name = "submit" value = "Search">
</form>
您也可以用所述列替换
SELECT*

理想情况下,一份准备好的声明很好使用

  • (如果你想调查PDO)
旁注:不要将不同的MySQL API(如
mysqli_u1;
与PDO混合使用。他们就是不混在一起

根据您的查询检查错误:

或die(mysqli\u error($conn))
添加到
mysqli\u query()

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

这将为您提供如何执行此操作的总体思路

HTML格式:

<form method="post" action="your_handler.php">
   <input type = "text" name = "search_query">
   <input type = "submit" name = "submit" value = "Search">
</form>
您也可以用所述列替换
SELECT*

理想情况下,一份准备好的声明很好使用

  • (如果你想调查PDO)
旁注:不要将不同的MySQL API(如
mysqli_u1;
与PDO混合使用。他们就是不混在一起

根据您的查询检查错误:

或die(mysqli\u error($conn))
添加到
mysqli\u query()

添加到文件的顶部,这将有助于查找错误

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

对于
选择
查询,不需要使用
POST
。可以,但它更适合于
INSERT/UPDATE/DELETE
,即实际更改数据的事情。使用类似于搜索结果的链接的一个可能优势是,它可以保存、添加书签、通过电子邮件发送等,而表单提交无法保存这些内容。但你是对的,把你的整个查询放到这样的链接中肯定是非常脆弱的

您可以只传递参数,而不是通过链接传递整个查询,如下所示:

<a href="proizvodi.php?kategorija=Laptop">Laptop</a>

对于
SELECT
查询,不需要使用
POST
。可以,但它更适合于
INSERT/UPDATE/DELETE
,即实际更改数据的事情。使用类似于搜索结果的链接的一个可能优势是,它可以保存、添加书签、通过电子邮件发送等,而表单提交无法保存这些内容。但你是对的,把你的整个查询放到这样的链接中肯定是非常脆弱的

您可以只传递参数,而不是通过链接传递整个查询,如下所示:

<a href="proizvodi.php?kategorija=Laptop">Laptop</a>

您必须使用表单(最简单的方法)通过POST方法发送参数。只发送可能更改的参数-如您案例中的类别。然后使用预先准备好的语句以避免受到攻击。您应该使用PHP构建查询。从URL发送查询是非常不安全的。如果有人发现了它并加载了
proizvodi.php?upit=delete from proizvodi
,那么您的整个数据表就不见了;或者可能更糟,将所有文本更改为链接。请查看,和/或。您必须使用表单(最简单的方式)通过POST方法发送参数。只发送可能更改的参数-如您案例中的类别。然后使用预先准备好的语句以避免受到攻击。您应该使用PHP构建查询。从URL发送查询是非常不安全的。如果有人发现了它并加载了
proizvodi.php?upit=delete from proizvodi
,那么您的整个数据表就不见了;或者可能更糟的是,将所有文本更改为链接。请看,和/或。哇,这看起来不错。“我会看看的。”“嗜血成性的享受!”;-)干杯,非常感谢你!昨晚我的电脑出了问题,现在我终于成功了。希望现在SQL注入比以前安全多了(肯定是…):我还有很多东西要学。@blooddunk非常欢迎你,很高兴我能帮上忙,干杯!哇,这看起来不错。“我会看看的。”“嗜血成性的享受!”;-)干杯,非常感谢你!昨晚我的电脑出了问题,现在我终于成功了。希望现在SQL注入比以前安全多了(肯定是…):我还有很多东西要学。@blooddunk非常欢迎你,很高兴我能帮上忙,干杯!我试着使用它,但它没有返回结果hm。可能是查询错误。我试着使用它,但它没有返回结果hm。可能是查询错误。