2010-11-10 16 views
1

Voilà ma base de données:Je ne parviens pas à obtenir les catégories et sous-catégories

id   name  parent_id 

1   Computers NULL 
2   Apple  1 
3   Books  1 
4   Music  NULL 
5   CDs   4 
6   Records  4 

Mes catégories Fonction:

public function showCategories($parent_id = 0){ 
     if($parent_id == 0){ 
      $sql = "SELECT * FROM categories WHERE parent_id IS NULL"; 
     } else { 
      $sql = "SELECT * FROM categories WHERE parent_id =:parentid"; 
     } 

     $stmt = $this->db->prepare($sql); 
     $stmt->bindParam(':parentid', $parent_id); 
     $stmt->execute(); 

     $categories = array(); 
     while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
      array_push($categories, array($row['id'] => $row['name'])); 
     } 
     return $categories; 
    } 

Voilà ma page catégorie:

<?php 
//Instantiate categories class 
$categories = new categories($db); 
$categoriesMain = $categories->showCategories(0); 
?> 
<html> 
    <head></head> 
    <body> 
     <form action="" method="post"> 
      <?php //Get parent categories and put them into a select box ?> 
      <select name="categoriesMain"> 
       <?php for($i=0;$i<count($categoriesMain);$i++){ ?> 
         <option value="<?php echo $i; ?>"> 
          <?php echo $categoriesMain[$i]; ?> 
         </option> 
       <?php } ?> 
      </select> 
     <input type="submit" name="submit" value="submit"/> 
     </form> 

     <?php //if form submits then show sub categories ?> 
      <?php if(isset($_POST['submit'])){ 
        $categoriesSub = $categories->showCategories($_POST['categoriesMain']); 
        for($i=0;$i<count($categoriesSub);$i++){ 
         echo $categoriesSub[$i]; 
        } 
      } ?> 
    </body> 
</html> 

Permettez-moi de expliquer ce que j'ai des ennuis avec. Je pense que tout mon design est hors de propos parce que ça me donne l'impression d'avoir un bloc de cerveau en ce moment.

Dans la fonction, je renvoie un tableau tel que Array ([0] => Array ([1] => Computers) [1] => Array ([4] => Music)). Si vous pensez que c'est la mauvaise façon de le retourner, faites le moi savoir. Ok, voyez-vous CategoriesMain? J'utilise une boucle for pour sortir ce tableau et pour option=value im echoing $i cependant ce $ i va comme 1, 2, 3, 4 mais je veux que la valeur soit la valeur de la catégorie parente, par exemple. 1, 4 afin que je puisse recueillir la valeur en utilisant $_POST['cateogoriesMain'] dans la prochaine boucle pour où j'affiche cateogriesSub où il obtiendra les lignes de base de données pour ceux avec le parent_id = to whatever was selected in the selectbox précédemment. J'espère que ça a du sens.

Répondre

1

Vous devez utiliser la clé du tableau pour la valeur de l'option, comme ceci:

<select name="categoriesMain"> 
      <?php foreach ($categoriesMain as $k => $v) { ?> 
        <option value="<?php echo $k; ?>"> 
         <?php echo $v; ?> 
        </option> 
      <?php } ?> 
    </select> 

modifier aussi changer la ligne suivante dans la fonction php, au lieu de:

array_push($categories, array($row['id'] => $row['name'])); 

faire

$categories[$row['id']] = $row['name']; 
+0

Super merci! :) – Jonathan