将选中的复选框值与数据库中的值进行比较

时间:2019-02-02 22:42:02

标签: php database function checkbox compare

假设我有一个庞大的预制数据库,其中包含以下汽车信息(列)(该数据库已经有3000行):

ID ....汽车名称....轮毂尺寸....生产年份....最大速度

在炫魅用户输入4种中的形式的信息:

    <form action="sanitize.php" method="post"> 
		<input type="text" name="car_name"  placeholder="CAR NAME"><br>
		<input type="text" name="wheel_size" placeholder="WHEEL SIZE"><br>
		<input type="text" name="year" placeholder="YEAR of PROD"><br>
		<input type="text" name="max_speed" placeholder="MAX SPEED"><br>
			  <button>Submit </button>
  </form>

我已经建立以备将来使用sanitize.php如果我想要将这些值到数据库,它看起来水木清华这样的:

<?php

$dbServerName = "localhost";
$dbUsername = "root";
$dbPassword = "";
$dbName = "cars";
$conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName);
// Sanitize POST Array
 $POST = filter_var_array($_POST, FILTER_SANITIZE_STRING);

 $car_name = mysqli_real_escape_string($conn, $POST['car_name']);
 $wheel_size = mysqli_real_escape_string($conn,$POST['wheel_size']);
 $year = mysqli_real_escape_string($conn,$POST['year']);
 $max_speed = mysqli_real_escape_string($conn,$POST['max_speed']);

session_start();
  $_SESSION['car_name'] = $car_name;
  $_SESSION['wheel_size'] = $wheel_size;
  $_SESSION['year'] = $year;
  $_SESSION['max_speed'] = $max_speed;

// Redirect to decide page
header('Location: decide.php');
?>

define.php页面上是复选框,根据用户选择打勾的复选框,网站将回显它在数据库中的出现次数。

<form action="function.php" method="post">
  <input type="checkbox" name = "checkbox[]" value="<?php echo   $_SESSION['car_name']; ?>"> Car name<br>
  <input type="checkbox" name = "checkbox[]" value="<?php echo   $_SESSION['wheel_size']; ?>"> Wheel size<br>
  <input type="checkbox" name = "checkbox[]" value="<?php echo   $_SESSION['year']; ?>"> YEAR of PROD<br>
  <input type="checkbox" name = "checkbox[]" value="<?php echo   $_SESSION['max_speed']; ?>"> MAX SPEED<br>

  <button>Submit CHOICES</button>
</form>
例如,如果用户选中唯一的汽车名称,点击的按钮提交选择,网站将用户重定向到function.php和计数和回声出的行从数据库具有相同的名字,因为他enetered数量。

如果他勾选了生产年份和车轮尺寸,则网页(function.php)将计数并从DB中回显行号,其中生产年份和车轮尺寸就像用户输入的一样。

如果他决定勾选最大速度,生产年份和汽车名称,则3个被打勾的复选框相同。网页(function.php)将计数并从数据库中回显最大速度&&生产年份&&的行数。汽车名称与用户的输入相符。

我想知道是否有办法为此创建函数,而不仅仅是针对每种情况手动使用if语句。这将是永无止境的这样的代码,如果我决定,我需要一些额外的列添加到我的数据库。

如果php中的语句看起来像这样:

$KAR = $_SESSION['car_name'];

            $sql="SELECT * FROM ecars WHERE car_name = '".$KAR"'";

		if ($result=mysqli_query($conn,$sql))
		{
		    // Return the number of rows in result set
		    $rowcount=mysqli_num_rows($result);
		    printf("Number of cars which have same NAME as you entered: %d.\n",$rowcount);
		    echo "<br>";
		    // Free result set
		    mysqli_free_result($result);
		}	

2 个答案:

答案 0 :(得分:0)

您需要根据选中的复选框来构建查询。像下面的东西

select
    a.count_cars,
    b.count_wheel
from
(
select
        count(*) count_cars
from
    dc_cars
) a
inner join
(
    select
        count(*) count_wheel
    from dc_wheel
)b

*这可能不是最佳选择,而只是给您一个想法

因此,根据用户的选择,如果选择2个或更多,则将构造选择部分和内部联接查询。

答案 1 :(得分:0)

感谢帮助我更好地了解了您要做什么。在我看来,您逻辑中的主要问题是您无法识别需要查询的列名,因为您没有传递该数据。尝试这样的事情:

<form action="function.php" method="post">
  <input type="checkbox" name = "checkbox[car_name]" value="<?php echo   $_SESSION['car_name']; ?>"> Car name<br>
  <input type="checkbox" name = "checkbox[wheel_size]" value="<?php echo   $_SESSION['wheel_size']; ?>"> Wheel size<br>
  <input type="checkbox" name = "checkbox[year]" value="<?php echo   $_SESSION['year']; ?>"> YEAR of PROD<br>
  <input type="checkbox" name = "checkbox[max_speed]" value="<?php echo   $_SESSION['max_speed']; ?>"> MAX SPEED<br>

  <button>Submit CHOICES</button>
</form>

一旦您在复选框数组中包含了列名,就可以使用该列名,这样就不必为每种可能性手动进行查询。

<?php
// The $_POST['checkbox'] array needs to survive the sanitizing part
foreach($_SESSION['checkbox'] as $col=>$value){

    $sql="SELECT * FROM ecars WHERE $col = '$value'";
    $col_title = str_replace('_', ' ', $col);

    if ($result=mysqli_query($conn,$sql)){
        // Return the number of rows in result set
        $rowcount=mysqli_num_rows($result);
        $vars = array($col_title, $rowcount); 
        printf("Number of %d which have same VALUE as you entered: %d.\n",$vars);
        echo "<br>";
        // Free result set
        mysqli_free_result($result);
    }   

}
?>

让我知道如何解决