2010-08-15 3 views
1

Я хочу, чтобы иметь возможность подсчитать, какая подкатегория моя новая категория, так что я могу дать ей ее правильное значение url, например подкатегория 3 значение url будет сохранено как &sub3=categoryКак подсчитать уровень подкатегории с помощью PHP и MySQL

Вот пример категории.

Web Design //parent category 0 
    Programming //sub-cat 1 
     HTML //sub-cat 2 
      Basics //sub-cat 3 
SEO 
Networking 

Код PHP, который я до сих пор рассматривал с этой частью, приведен ниже.

if(isset($_POST['url']) && $parent_id >= 1){ 
    $url = '&sub=' . $_POST['url']; 
} 

Вот мой полный PHP-скрипт.

if (isset($_POST['submitted']) && !empty($_POST['category']) && !empty($_POST['url'])) { 

    if (isset($_POST['parent_id'])) { 
     $parent_id = (int) $_POST['parent_id']; 
    } else { 
     $parent_id = 0; 
    } 

    if(isset($_POST['url']) && $parent_id == 0){ 
     $url = '?cat=' . $_POST['url']; 
    } 

    if(isset($_POST['url']) && $parent_id >= 1){ 
     $url = '&sub=' . $_POST['url']; 
    } 

    $q = sprintf("INSERT INTO categories (parent_id, category, url) VALUES (%d, '%s', '%s')", $parent_id, mysqli_real_escape_string($mysqli, $_POST['category']), mysqli_real_escape_string($mysqli, $url)); 
    $r = mysqli_query($mysqli, $q); 

    if (mysqli_affected_rows($mysqli) == 1) { 
     echo '<p>The category has been added!</p>'; 
    } else { 
     echo '<p>The category could not be added!</p>'; 
    } 

} 
echo '<form action="index.php" method="post"> 
<fieldset> 
<legend>Add a category</legend> 
<p>Category: <input name="category" type="text" size="60" maxlength="255" /></p> 
<p>Parent category:'; 
echo '<select name="parent_id"> 
     <option value="0">None</option>'; 

    function make_list ($parent, $depth) { 
     global $option;  
     foreach ($parent as $id => $cat) { 
      $indent = str_repeat('&nbsp; ', $depth * 2); 
      echo '<option value="' . $cat['id'] . '">'; 
      if($cat['parent_id'] != 0){ 
       echo $indent; 
      } 

      echo $cat['category'] . '</option>';     
      if (isset($option[$id])) {    
       make_list($option[$id], $depth+1);    
      }      
     }  
    } 

    $mysqli = mysqli_connect("localhost", "root", "", "sitename"); 
    $dbc = mysqli_query($mysqli,"SELECT * FROM categories ORDER BY parent_id, category ASC"); 
    if (!$dbc) { 
     print mysqli_error(); 
    } 

    $option = array(); 

    while (list($id, $parent_id, $category) = mysqli_fetch_array($dbc, MYSQLI_NUM)) { 
     $option[$parent_id][$id] = array('category' => $category, 'id' => $id, 'parent_id' => $parent_id); 
    } 

    $depth = 0; 

    make_list($option[0], $depth+1); 

echo '</select></p> 
<p>Category URL: <input name="url" type="text" size="60" maxlength="255" /></p> 
<input name="submitted" type="hidden" value="true" /> 
<input name="submit" type="submit" value="Add This Category" /> 
</fieldset> 
</form> 
'; 

ответ

0

Если вы не хотите, чтобы проходным результаты, чтобы найти глубину вашей категории, просто добавить еще один столбец под названием «глубина» в таблице категорий, и дать каждой категории глубину его родителя + 1.

Смежные вопросы