假设我有一个巨大的预制数据库,其中包含如下汽车信息(列)(该数据库已经有大约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中回显行数,其中最大速度和&生产年份&;汽车名称与用户的输入相匹配。
我想知道是否有一种方法可以为此创建一个函数,而不仅仅是为每种情况手动使用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个或多个,则将构建选择部分和内部联接查询。