gpt4 book ai didi

php - 在表单中选择类别后,从数据库中选择子类别

转载 作者:行者123 更新时间:2023-11-29 08:40:07 25 4
gpt4 key购买 nike

我目前有此表单 - 下面是其中的一个片段:

          <li>
<label for="Catid">Pick a Category:</label>
<select name="Catid">
<?php
$Products = New Products();
$Products->form_Cat_Picker();
?>
</select>
</li>
<li>
<label for="Subcatid">Sub Category:</label>
<select name="Subcatid">
<?php
$Products = New Products();
$Products->form_Subcat_Picker();
?>
</select>

好的,然后将其发送到 products.php,它在 products 类中执行以下操作:

function form_Cat_Picker() {
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if (!$mysqli) {
die('There was a problem connecting to the database.');
}
$catPicker = "SELECT Catid, Catname
FROM ProductCats
ORDER BY Catid";
if ($Result = $mysqli->query($catPicker)){
if (!$Result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
else {
$Result = $mysqli->query($catPicker);
}
while ($row = $Result->fetch_assoc()) {
echo '<option value="'.$row["Catid"].'">'.$row["Catname"]."</option>";
}
}
$mysqli->close();
}
function form_Subcat_Picker() {
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if (!$mysqli) {
die('There was a problem connecting to the database.');
}
$catPicker = "SELECT Subcatid, Subcatname, Parentid
FROM ProductSubCats
ORDER BY Subcatid";
if ($Result = $mysqli->query($catPicker)){
if (!$Result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
else {
$Result = $mysqli->query($catPicker);
}
while ($row = $Result->fetch_assoc()) {
echo '<option value="'.$row["Subcatid"].'">'.$row["Subcatname"]."</option>";
}
}
$mysqli->close();
}

这两者本质上都是从数据库中返回类别和子类别的列表,以填充表单的下拉列表。

问题是,我不希望出现子类别,除非在初始下拉框中选择了它们的父类别。我怎样才能实现这个目标?目前,我在 ProductSubCats 表中多了一列 Parentid,在 ProductCats 表中多了一列 Catid,它们连接起来。

但是我如何首先设置一个条件来创建一个选择选项/值的变量,然后说“这个变量$selected”。我会知道如何将它传递给该代码并使用条件 WHERE $selected = 无论如何,但它已经到了让我困惑的地步。谢谢

编辑 - 看来我的错误是忘记了 php 将在页面加载时运行一次。所以我应该让它显示所有数据,然后使用 jquery 仅显示已选择的数据。但我还应该有一个值 0 和一个空白条目。例如,如果我有一个值为 1 的类别和 2 个父 id 为 1 的子类别,我如何让 jquery 显示那些父 id 为 1 的子类别,而不是那些父 id 为 2 的子类别?用户选择后?

最佳答案

有几种方法可以处理这个问题,但大多数都是在前端。

如果您想使用 PHP 执行此操作,只需检查 $_POST['Catid'] 是否已设置,并在更改时自动提交第一个类别。您必须针对此行为进行一些编码。

如果您想在不加载页面的情况下完成此操作,那么您需要使用 AJAX 尝试动态填充第二个选择,或者隐藏/过滤值。无论哪种情况,您可能希望/需要使用 jQuery 来让您的生活变得更加简单。

但是,您似乎忘记了 PHP 是一种服务器端语言。因此,在用户做出选择后,PHP 无法填充第二个选择框。 JavaScript 可以,因为它在浏览器中运行,或者您可以刷新/重新提交页面并获取 POST 数据并使用它,但 PHP 仅在第一次点击页面时“运行一次”,然后将生成所有选择/数据.

更新:如果您希望以“快速而肮脏”的方式执行此操作,您可以填充每个子类别选择,并将它们分别放入一个 div 中。然后,为它们提供父类别的 ID,并将其可见性设置为 false:

        <div id='parentId1' style="display:none">
<select name="Subcatid">
<?php
$Products = New Products();
$Products->form_Subcat_Picker();
?>
</select>
</div>

您现在可以在父选择器中设置 onChange 函数,该函数显示/隐藏相应的其他值$("#parentId"+ ParentId).show()。这将为您提供很多帮助,但如果您花时间学习如何进行 AJAX 调用,那么使用 jQuery 就很容易做到,并且可能会得到您正在寻找的东西。这是一个很好的问题,它展示了如何做到这一点:jquery getJson populate Select Menu Question

关于php - 在表单中选择类别后,从数据库中选择子类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com