介于最小值和最大值之间的mysqli


Between min and max value mysqli

我必须创建一个带有两个文本字段的PHP网页,用户可以在其中输入SQL数据库中的最低和最高商品价格。所以我有带价格的商品。例如,如果用户想查看价格在4到15之间的商品,他可以提交,然后它将只显示该价格范围内的商品。我该怎么做?如何回应这一点?

谢谢!

到目前为止,我有这个:

$min=$_POST["minimum"];
$max=&$_POST["maximum"];
$result = mysqli_query($con,"SELECT * FROM items WHERE selling price BETWEEN {$min}+1 AND {$max}");

除了一个主要的SQL注入问题外,您的脚本看起来还不错。只是一些小类型和语法错误。将这个与你的进行比较:

$min=(int)$_POST["minimum"];
$max=(int)$_POST["maximum"];
$result = mysqli_query($con,"SELECT * FROM items WHERE selling_price BETWEEN {$min}+1 AND {$max}");

那么,我改变了什么?

  • 至少将已发布的值强制转换为int,以消除任何人向查询中注入恶意SQL代码的可能性。以后应该使用正确的转义
  • 您不需要在第二行的前面添加&字符。你不需要通过引用来赋值。只需指定简单的老方法
  • MySQL中的列名和表名不能包含空格。你确定这是列的正确名称吗?也许有下划线

是许多更安全、更简单的方法之一

$dsn = "mysql:dbname=test;host=127.0.0.1";
$dbh = new PDO($dsn, 'username', 'password');

if(isset($_POST["minimum"]) && isset($_POST["maximum"]))
{
 $min=floatval($_POST["minimum"]);    //+1 is not needed
 $max=floatval($_POST["maximum"]);
 $sth = $dbh->prepare("SELECT * FROM items WHERE selling_price BETWEEN ? AND ?");
 $sth->execute(array($min,$max));
 while($row = $sth->fetch(PDO::FETCH_OBJ))
 {
    print_r($row);
 }
}

这应该对你有用:

 if(isset($_POST['minimum'])){
        $min = $_POST['minimum'];
    }else{
        $min = '';
    }
    if(isset($_POST['maximum'])){
        $max = $_POST['maximum'];
    }else{
        $max = '';
    }
    $sql = "SELECT * FROM item WHERE selling_brice > '$min' AND  selling_price < '$max'";
    $query = mysqli_query($con, $sql);
    $count = mysqli_num_rows($query);
    if($query == true && $count > 0 ){
        while ($row = mysqli_fetch_assoc($query)){
            $price .= $row['selling_price'];
            $price .= '<br />'
        }
        echo $price;
    }else{
  echo "NO results to Display";
}

当然,这不是最好的mysql注入编程,您的查询使用*等……但这应该有效。