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

时间:2016-02-02 19:59:34

标签: 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 = $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>";
}

我意识到这非常脆弱,我应该使用POST方法来隐藏URL中的参数。我尝试阅读在线论坛,但我发现没有什么可以帮助我将其转换为POST方式来检索数据。 那么,我如何使用POST方法来实现与我现在使用GET实现相同的结果?

2 个答案:

答案 0 :(得分:3)

这将为您提供有关如何执行此操作的一般信息。

HTML表单:

<form method="post" action="your_handler.php">
   <input type = "text" name = "search_query">
   <input type = "submit" name = "submit" value = "Search">
</form>

SQL / PHP并假设使用MySQLi API成功连接。

$conn = mysqli_connect("your_host", "user", "password", "db");

if (!$conn) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

if(isset($_POST['submit'])){

    if(!empty($_POST['search_query'])){

    $search_query = mysqli_real_escape_string($conn, $_POST['search_query']);

    $result = mysqli_query($conn, "SELECT * FROM TABLE WHERE col = '$search_query' ");

    if(!$result) { echo "Error: " . mysqli_error($conn); }

    if ($result->num_rows > 0) {

            while($row = $result->fetch_assoc()) {
                // perform what you want here
                // and check for errors on your query
            }

        }
    }

}

您也可以将SELECT *替换为所述列。

理想情况下,准备好的声明很适合。

旁注:不要将mysqli_等不同的MySQL API与PDO混用。他们只是不混在一起。

同时检查您的查询错误:

or die(mysqli_error($conn))添加到mysqli_query()

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

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

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

另外,请确保输入中没有引入任何空格,否则您的查询可能会失败。

答案 1 :(得分:2)

您不需要使用POST进行SELECT查询。你可以,但它真的更适合INSERT / UPDATE / DELETE,这些实际上会改变你的数据。对搜索结果使用类似链接的一个可能的优点是,它可以保存,加入书签,通过电子邮件发送等,而表单提交则不能。但你是对的,将你的整个查询放入类似的链接肯定是非常易受攻击。

您可以直接传递参数,而不是通过链接传递整个查询,而不是:

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

然后在显示代码中,您可以使用预准备语句并安全地绑定参数:

$kategorija = $_GET['kategorija'];

$sql = 'SELECT Slika, Naziv, Opis, Cijena FROM Proizvodi 
        WHERE Kategorija=? ORDER BY Proizvodac';

$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $kategorija);
$stmt->execute();
// etc.
相关问题