-1

カテゴリを作成し、投稿の作成は成功しましたが、投稿を編集すると問題が発生し、投稿を編集するとカテゴリが失われます..テーブルにカテゴリを取得する必要があり、変更できます

<?php

$sql = "SELECT catid, catname, parentid FROM categories";
$res = mysql_query($sql);

// initialize $categories to make sure it is an array
$categories = array();
while ($row = mysql_fetch_assoc($res)) {
$parent = intval($row['parentid']);
$categories[$parent][] = $row;
    }
    ?>
    <table border="0" cellpadding="10" cellspacing="0">
    <tr>
    <td valign="top">

    <?php
    $category_string = "";
    function build_categories_options($parent, $categories, $level) {
        global $category_string;
        if (isset($categories[$parent]) && count($categories[$parent])) {
            $level .= " - ";
            foreach ($categories[$parent] as $category) {
                $opt_value = substr($level.$category['catname'],3);
                $category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';
                build_categories_options($category['catid'], $categories, $level);
            }
            $level = substr($level, -3);
        }
        return $category_string;
    }
    $category_options = build_categories_options(0, $categories, '');
    $category_options = '<select class="chosen" name="categories" id="categories">'.$category_options.'</select>';
    echo $category_options; 
    ?>
</td>

25行目にある私の問題

$category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';

最初にカテゴリを取得し、残りの結果を表示する必要があります。

4

1 に答える 1

0

カテゴリごとに、空のオプションとカテゴリ情報を含む 2 つのオプションが表示されます。

$category_string .= '<option value=""></option><option value="'.$category['catid'].'">'.$opt_value.'</option>';

これはあなたのループの中にあります。したがって、ループが繰り返されるたびに、2 つのオプションが作成されます。空白の 1 つとあなたのカテゴリの 1 つ。の最初に空白のオプションが1 つあれば十分だと思います<select>。これがあなたが望んでいたものだと思います:

// notice we are initializing $category_string with an empty option here
$category_string = '<option value=""></option>';

function build_categories_options($parent, $categories, $level) {
    global $category_string;
    if (isset($categories[$parent]) && count($categories[$parent])) {
        $level .= " - ";
        foreach ($categories[$parent] as $category) {
            $opt_value = substr($level.$category['catname'],3);

            // removed extra empty category and put it in $category_string initialization
            $category_string .= '<option value="'.$category['catid'].'">'.$opt_value.'</option>';
            build_categories_options($category['catid'], $categories, $level);
        }
        $level = substr($level, -3);
    }
    return $category_string;
}

また、@MoeTsao がコメントで述べたように、mysql_*PHP では関数の使用が推奨されていないため、関数の使用を避けるようにしてください。代わりに、mysqli_*またはPDOを使用してください。

于 2012-10-01T12:41:01.840 に答える