代码之家  ›  专栏  ›  技术社区  ›  user1805543

如何以下拉php oop方式选择分层类别?

  •  0
  • user1805543  · 技术社区  · 8 年前

    我正在尝试创建一个可以在下拉列表中列出层次类别的函数。 使用orient objected

    $conn=新mysqli(DB\u服务器、DB\u用户名、DB\u密码、DB\u名称);

    数据库: cat\u id cat\u name parent\u id seo\u url

    我这样把它们列为普通类别。

                          <?php
                            $sql = "SELECT * FROM categories";
                           if($result = $conn->query($sql)){
                            if($result->num_rows > 0){
                                while($row = $result->fetch_array()){
                                echo "<option value=".htmlspecialchars($row[cat_id]).">".htmlspecialchars($row[cat_name])."</option>";
                                }
                            // Free result set
                             $result->free();
                            } else{
                                echo "No records matching your query were found.";
                                }
                            } else{
                                echo "ERROR: Could not able to execute $sql. " . $conn->error;
                            }
    
                            // Close connection
                            $conn->close();
                          ?>
    

    但这不是我想要的。

    我想要的是(主类别在顶部,所有子类别都属于它下面的列表)。

    main category
    -Sub Category 
    main category
    -Sub Category
    

    这就是我创建的函数

    function categoryTree($parent_id = 0, $sub_mark = ''){
        global $conn;
    $sql = "SELECT * FROM categories WHERE parent_id = $parent_id";
                           if($result = $conn->query($sql)){
                            if($result->num_rows > 0){
                                while($row = $result->fetch_array()){
                                            echo '<option value="'.$row['cat_id'].'">'.$sub_mark.$row['cat_name'].'</option>';
                categoryTree($row['cat_id'], $sub_mark.'---');
                                }
                            // Free result set
                             $result->free();
                            } else{
                                echo "No records matching your query were found.";
                                }
                            } else{
                                echo "ERROR: Could not able to execute $sql. " . $conn->error;
                            }
    
                            // Close connection
                            $conn->close();
        }
    

    但函数返回空。 编辑 我将conn传递给变量并在此处粘贴代码,FUNCTION返回空的无下拉框。 编辑2: 我更改了查询类型和连接类型,我不想在函数中使用全局连接,但不能在不使用全局$连接的情况下列出;。 如何在不使用全局$conn;的情况下列出?

    2 回复  |  直到 8 年前
        1
  •  0
  •   pedram shabani    8 年前

    注意:未定义变量:conn in 意味着在类connect Db之外包含文件将不起作用。

    对于测试,如果您想确保您的PHP文件可以首先连接到数据库 var\U转储($conn) 在PHP文件中。

    如果您有一个输出,这意味着与数据库的连接对您有效。否则,您必须更正它

    你的文件连接必须是这样的

    <?php
    $con = mysqli_connect("localhost","user","password","dbName");
    
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
    ?>
    

    然后必须将该文件包含在PHP文件中(( 它是指任何文件 需要连接到数据库 ))

    include 'yourPatch/con.php';
    
        2
  •  0
  •   user1805543 user1805543    8 年前

    我准备好了,谢谢你的帮助。 以下是解决方案

        $stmt = $conn->prepare("SELECT cat_id, cat_name, seo_url FROM categories WHERE parent_id = ?");
        function list_categories($stmt, $parent_id = 0){
        $stmt->reset();
        $stmt->bind_param('i', $parent_id);
        $stmt->execute();
        $stmt->bind_result($cat_id, $cat_name, $seo_url);
        $cats = array();
        while($stmt->fetch()) $cats[] = array('cat_id' => $cat_id, 'cat_name' => $cat_name, 'seo_url' => $seo_url);
    
        foreach($cats as $row) {
            echo'<ul>';
                echo'<li><a href="'.htmlspecialchars($row['cat_id']).'-'. htmlspecialchars($row['seo_url']).'">'. htmlspecialchars($row['cat_name']).'</a>';
                list_categories($stmt, htmlspecialchars($row['cat_id']));
                echo'</li>';
            echo'</ul>';
        }
    }
    
    推荐文章