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



假设我有一个巨大的预制数据库,其中包含如下汽车信息(列)(该数据库已经有大约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>

如果我想将这些值插入DB中,我已经创建了供将来使用的消毒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');
?>

在decide.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>
例如,如果用户只勾选了汽车名称并点击了Submit CHOICES按钮,网站会将用户重定向到function.php,并统计和回声出与他插入的名称相同的DB中的行数。

如果他勾选了生产年份和轮子大小,网页(function.php)将计数并从DB中回显行数,其中生产年份和车轮大小与用户输入的相同。

同样适用于3个勾选的复选框,如果他决定勾选最大速度、生产年份和汽车名称,网页(function.php)将计数并从DB中回显行数,其中最大速度和&生产年份&amp;汽车名称与用户的输入相匹配。

我想知道是否有一种方法可以为此创建一个函数,而不仅仅是为每种情况手动使用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);
		}	

谢谢你帮助我更好地理解了你正在尝试做什么。在我看来,你的逻辑中的主要问题是,你无法识别需要查询的col名称,因为你没有传递数据。试试这样的东西:

<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>

一旦你在复选框数组中有了colname,你就可以使用它,这样你就不需要手动查询所有的可能性。

<?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);
}   
}
?>

让我知道是如何运作的

您需要根据选中的复选框构建查询。像低于的东西

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个或多个,则将构建选择部分和内部联接查询。

相关内容

  • 没有找到相关文章

最新更新