【问题标题】:Comparing checked checkbox values with values in DB将选中的复选框值与 DB 中的值进行比较
【发布时间】:2019-02-02 22:42:02
【问题描述】:

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

decision.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 并计算并回显 DB 中与他输入的名称相同的行数。

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

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

【问题讨论】:

  • 也许只有我一个人……但我不明白你想做什么。您能否发布一个使用 if “可以”做什么的示例,当我了解您要实现的目标时,我将帮助您找到更好的方法。请同时显示更多代码。
  • 我编辑了这篇文章,希望它更容易理解 Patrick

标签: php database function checkbox compare


【解决方案1】:

感谢您帮助我更好地了解您要做什么。在我看来,您逻辑中的主要问题是您无法识别需要查询的 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>

在复选框数组中包含 col 名称后,您就可以使用它,这样您就无需手动查询每种可能性。

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

}
?>

告诉我结果如何

【讨论】:

  • 我认为它应该可以工作,但我总是收到此错误:注意:未定义索引:第 11 行 C:\xampp\htdocs\cars\function.php 中的复选框警告:为 foreach 提供的参数无效() 在 C:\xampp\htdocs\cars\function.php 第 11 行有没有办法修复它?
  • 制作一个 $_SESSION['checkbox'] 的 var 转储并确保它不为空。我怀疑您的消毒部分可能与阵列有关。
  • 谢谢帕特里克,明白了!我的最后一个问题是,是否有办法创建这样的内容:用户填写表单,然后将他重定向到decision.php,在这里他必须勾选他选择的复选框。例如,如果他选择勾选汽车名称和车轮尺寸,网页将回显包含与用户在同一时间输入的相同汽车名称和车轮尺寸的行数!如果他选择勾选汽车名称、车轮尺寸和生产年份,网页将回显包含与用户在同一时间输入的名称、车轮、年份相同的行数!!!
  • 我设法弄明白了,无论如何谢谢你,你的建议很有帮助:) 祝你有美好的一天
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多