Ne benim PHP / MySQL koduyla yanlış?

1 Cevap php

Ben bütün kategorileri ve alt kategorileri listeleyen bir navigasyon menüsü inşa ediyorum. Sorun, sadece bir Bunların ve tüm döndürür. Ben kategoriler peki ben neden sadece bir sonucunu gösteren ve tüm emin değilim döngü içindeyken yankılandı var:

<?php

$query = mysql_query("SELECT * FROM categories_parent");

while ($row = mysql_fetch_assoc($query)) {

    $id = $row['id'];
    $name = $row['name'];
    $slug = $row['slug'];
    $childStatus = $row['child_status'];

    // if has child categories
    if ($childStatus == "1") {
        echo "<li class='dir'><a href='category.php?slug=$slug'>$name</a>";
        echo "<ul id='dropdown'>";

            $query = mysql_query("SELECT * FROM categories_child WHERE parent=$id");
            while ($row = mysql_fetch_assoc($query)) {
                $id   = $row['id'];
                $name = $row['name'];
                $slug = $row['slug'];

                echo "<li><a href='category.php?slug=$slug'>$name</a></li>";
            }

        echo "</ul>";
        echo "</li>";
    }
    // if singular parent
    else {
        echo "<li><a href='category.php?slug=$slug'>$name</a></li>";
    }

}

?>

Benim veritabanı tabloları:

--
-- Table structure for table `categories_child`
--

CREATE TABLE IF NOT EXISTS `categories_child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(1000) NOT NULL,
  `slug` varchar(1000) NOT NULL,
  `parent` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=139 ;

--
-- Dumping data for table `categories_child`
--

INSERT INTO `categories_child` (`id`, `name`, `slug`, `parent`) VALUES
(138, 'Britney Spears', 'category/celiberties/britney-spears/', 137),
(136, 'Tigers', 'category/animals/tigers/', 136),
(137, 'Horses', 'category/animals/horses/', 136),
(135, 'Lions', 'category/animals/lions/', 136);

--
-- Table structure for table `categories_parent`
--

CREATE TABLE IF NOT EXISTS `categories_parent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(1000) NOT NULL,
  `slug` varchar(1000) NOT NULL,
  `child_status` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=139 ;

--
-- Dumping data for table `categories_parent`
--

INSERT INTO `categories_parent` (`id`, `name`, `slug`, `child_status`) VALUES
(137, 'Celiberties', 'category/celiberties/', 1),
(138, 'TV Shows', 'category/tv-shows/', 0),
(136, 'Animals', 'category/animals/', 1);

1 Cevap

Eğer süre deyimi içinde senin $query ve $row redeclaring ediyoruz çünkü bulunuyor. Bu nedenle sizin hepsi yeni birinden idam edilmiştir çünkü beyanı sizin redeclared $query çizgisi başka bir sorgu almak ve return false çalışacağız while ifadesi dışarı bitirmek ve ardından dış olurken gömülü. Bunu overwrote çünkü eskisinin artık yok. Sen böyle $query2 olarak, döngü sırasında iç ve $row2 için farklı değişken adlarını kullanmak gerekir.