【发布时间】:2022-11-20 01:46:04
【问题描述】:
我确实有一些产品目录。目前我可以列出类别(level1)和子类别(level2)。 我想添加一个可能是子子类别(level3)的第三级。 添加有效,但列表(循环)不起作用,因为它限制了我的 2 个级别。
我需要一些帮助来解决这个问题。
这是添加和列出的代码,mysql 结构是:
CREATE TABLE `categories` (
`lcat_id` smallint(5) UNSIGNED NOT NULL,
`lcat_name` varchar(255) NOT NULL DEFAULT '',
`lcat_path` varchar(255) NOT NULL DEFAULT '',
`sub_cat` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我的代码是:
<?php
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>?action=newcat" method ="POST">
Category Name : <input type = "text" name = "cat_name" maxlength="250"><br><br>
Sub of category : <select name="lcat_id">
<option value=''>0</option>
<?php
$sql_cat = mysqli_query($db_connect,"SELECT * from ".TABLE_CATS." WHERE sub_cat='0' ORDER BY lcat_id") or die(mysqli_error($db_connect));
while($row_cat = mysqli_fetch_array($sql_cat)) {
extract($row_cat);
/*
$id = $row_cat["lcat_id"];
$name = $row_cat["lcat_name"];
$sub_cat = $row_cat["sub_cat"];
*/
echo "<option value='".$row_cat["lcat_id"]."'>".$row_cat['lcat_name']."</option>";
$sql_subcat = mysqli_query($db_connect,"SELECT * from ".TABLE_CATS." WHERE sub_cat='".$row_cat["lcat_id"]."' ") or die(mysqli_error($db_connect));
while($row_subcat = mysqli_fetch_array($sql_subcat)) {
extract($row_subcat);
/*
$id = $row_subcat["lcat_id"];
$namea = $row_subcat["lcat_name"];
$sub_cata = $row_subcat["sub_cat"];
*/
echo "<option value='".$row_subcat['lcat_id']."'>-> ".$row_subcat['lcat_name']."</option>";
}
}
?>
</select>
<input type = "submit" value = "New Category"><br>
</form>
<?php
if ($_GET['action']=="newcat"){
if ($_POST['cat_name']==""){
print "You did not put anything.<br/><a href=".$_SERVER["PHP_SELF"].">Go back</a>";
}
$sql_cat = mysqli_query($db_connect,"SELECT lcat_name from ".TABLE_CATS." WHERE lcat_name='".$_POST['cat_name']."' ") or die(mysqli_error($db_connect));
while($row_cat = mysqli_fetch_array($sql_cat)) {
extract($row_cat);
$name = $row_cat["lcat_name"];
}
if ($row_cat['cat_name']){
print "Category <b>".$_POST['cat_name']."</b> already exists in <b>".$mysql_db."</b>.<br>Please chose new name.<br/><a href=".$_SERVER["PHP_SELF"].">Go back</a>";
}
$sql_subcat = mysqli_query($db_connect,"SELECT * from ".TABLE_CATS." WHERE sub_cat='".$row_cat['lcat_id']."' AND lcat_name='".$row_cat["lcat_name"]."'") or die(mysqli_error($db_connect));
while($row_subcat = mysqli_fetch_array($sql_subcat)) {
extract($row_subcat);
$namea = $row_subcat["lcat_name"];
$sub_cat = $row_subcat["sub_cat"];
}
if ($row_subcat['lcat_name']) {
echo ("Sub-category <b>".$row_subcat['lcat_name']."</b> already exists in <b>$mysql_db</b>. Please chose new name.<br/><a href=".$_SERVER["PHP_SELF"].">Go back</a>");
exit;
} else {
$sql_query = "INSERT INTO ".TABLE_CATS." (lcat_name, lcat_path, sub_cat) VALUES ('".$_POST['cat_name']."','".$_POST['cat_name']."','".$_POST['lcat_id']."')";
$result = mysqli_query($db_connect,$sql_query);
echo "You added category :<b> ".$_POST['cat_name']."</b> in <b>$mysql_db</b><br/><a href=".$_SERVER["PHP_SELF"].">Go back</a>.";
}
}
?>
【问题讨论】:
-
如果您创建一个传入起始类别并返回所有子类别的函数,您可以根据需要调用它。
-
请举个例子,这样我就可以开始了?
-
sub_cat是指parent_id吗?你希望lcat_path有什么?您在此类别表上缺少 PK。 -
lcat_path 基本上是 url slug ,它只用于 seo。我没有 parent_ID,我正在使用 sub_cat 信息,
-
那么
sub_cat是表示当前类别的父级的列吗?它没有对lcat_id的任何外键引用?也许(重新)访问How to Ask 会是最好的。这个问题肯定需要稍微重组一下,这样它的各个部分的意思就很清楚了。