PHP Forum Categoriën probleempje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Richard Augspurger

Richard Augspurger

29/06/2011 20:55:07
Quote Anchor link
Hey,

Ik ben bezig met het scripten van een forum van een clan waar ik in zit, maar ik zit ff klem. :/

Normaal op een forum zie je iets als dit:

Categorie 1
sub1
sub2
sub3

Categorie 2
sub1
sub2
sub3

Wat ik nu heb is:

Categorie 1
sub1
sub1
sub1

Categorie 2
sub2
sub2
sub2

Categorie 2
sub3
sub3
sub3

Categorie 2
sub3
sub3
sub3

Dit hoort natuurlijk niet, haha.
Maar, hoe maak ik het zodat het een categorie laat zien, alle bijhorende subcategoriën eronder en dat dan herhalend en automatisch updatend.

Ik werk vanuit een database en ik ben nog niet zo heel lang bezig met php (ongeveer een maand of 4), maar ik vind het wel hartstikke leuk om te doen.

Hopelijk hoor ik snel van jullie.
 
PHP hulp

PHP hulp

07/05/2024 16:32:12
 
PHP Scripter

PHP Scripter

29/06/2011 21:05:05
Quote Anchor link
Kan je misschien wat relevante code laten zien?
 
Richard Augspurger

Richard Augspurger

29/06/2011 21:08:15
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$query
= "SELECT forumcategories.title as ct, forumsubcategories.title as sct, forumsubcategories.description as scd FROM forumcategories
LEFT JOIN forumsubcategories ON forumsubcategories.category_id = forumcategories.id"
;

$result = mysql_query($query);
$count = mysql_num_rows(mysql_query("SELECT title FROM forumsubcategories"));
    
echo $count;
    
while($c = mysql_fetch_array($result))
{

    $ct = $c['ct'];
    $sct = $c['sct'];
    $scd = $c['scd'];
        
    echo "<p>Category: $ct<br />";
    for($i = 0; $i < $count; $i++)
    {

        echo $sct . '<br />';
    }
}

?>


Hoe zet je dit in kleuren trouwens?
Gewijzigd op 29/06/2011 21:40:17 door Richard Augspurger
 
PHP Scripter

PHP Scripter

29/06/2011 21:37:10
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
class MyClass
{
    public function __construct()
    {

        $MyVariable = "Zie je deze mooie kleuren?!?!";
    }
}

?>


Door je code tussen de PHP tags te plaatsen.
Gewijzigd op 29/06/2011 21:38:27 door PHP Scripter
 
Richard Augspurger

Richard Augspurger

29/06/2011 21:39:50
Quote Anchor link
Oooohhhh.
 
Noppes Homeland

Noppes Homeland

29/06/2011 21:56:14
Quote Anchor link
Een paar tips:
1. mysql functies moet je niet nesten
2. als je _fetch_array zo graag wilt gebruiken geef dan op z'n minst de tweede parameter mee, dan ben je je ervan bewust wat je terug krijgt. Maar nog beter gebruik gewoon altijd _fetch_assco
3. maak geen overbodige variabelen aan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$groep
= '~';
while ($row = mysql_fetch_assoc($result)) {

      if ($row['ct'] != $groep) {
         // hier je categorie
         $groep = $row['ct']
      }

      
      // hier je subjes
}
?>

}
 
PHP Scripter

PHP Scripter

29/06/2011 22:01:53
Quote Anchor link
En probeer ook om je variabelen zo duidelijk mogelijk te maken.

"Het is gebruikelijk om variabelen een korte maar (duidelijke) beschrijvende naam te geven."
 
Richard Augspurger

Richard Augspurger

29/06/2011 22:08:56
Quote Anchor link
@Noppes Homeland

1. Ik weet wat nesten is, maar ik volg je ff niet.
2. Het is niet dat ik _fetch_array zo graag wil gebruiken, maar een vriend van mij raadde aan dat ik _fetch_array gebruik, in plaats van _fetch_assoc. Zelf werk ik altijd met _fetch_assoc en heb ik eerlijk gezegd geen idee wat _fetch_array doet tegenover de _fetch_assoc.

3. Welke overbodige variabelen? Wat bedoel je?

Ik ben nog vrij nieuw in het gebruik van PHP, vandaar.


@PHP Scripter
Ja, dat begrijp ik.

Maar ik heb dit expres zo gedaan, het zijn meer afkortingen.

ct = caterogy title
sct = subcategory title
scd = subcategory description
Gewijzigd op 29/06/2011 22:10:58 door Richard Augspurger
 
Noppes Homeland

Noppes Homeland

29/06/2011 22:34:35
Quote Anchor link
1. Je moet het lezen zoals het er staat:
mysql functies moet je niet nesten, als je dat wel doet maak je het onmogelijk je code te debuggen

2. Lees dan:
http://www.php.net/mysql_fetch_array en let hier goed op de 2de parameter, doe voor de gein ook eens een var_dump van het resultaat
http://www.php.net/mysql_fetch_assoc

3. deze
$ct = $c['ct'];
$sct = $c['sct'];
$scd = $c['scd'];

oh en nu zie ik ook nog dat je je strings quote met "" ipv '' en je je variabelen ook niet buiten de quotes haalt. variabalen buiten quotes is overzichtelijker, zie o.a. kleurtjes welke je ook in editors kan hebben

4. duidelijk naamgeving
Het gaat erom dat je je variabelen moet kunnen herkennen en ook nog moet kunnen zien wat de inhoud en type ervan is (string/int/float/boolean) zonder in de code terug te moeten zoeken waar die waarde dan vandaan komt.
 
Richard Augspurger

Richard Augspurger

29/06/2011 22:50:34
Quote Anchor link
Okee, zal het onthouden. Maar dat even terzijde.

Ik ben hier dus gekomen omdat ik vast zit met mijn script, niet omdat ik wil dat jullie mijn code nakijken en gaan bekritiseren/verbeteren. Ik heb eenmaal mijn manier van doen, jullie waarschijnlijk ook.
 
Noppes Homeland

Noppes Homeland

29/06/2011 23:04:12
Quote Anchor link
Ik heb reeds laten zien hoe je dit oplost!
 
Richard Augspurger

Richard Augspurger

29/06/2011 23:06:05
Quote Anchor link
Ah ja, ik zie het daar.

Maar wat doet $groep = "~"; dan?
Gewijzigd op 29/06/2011 23:12:13 door Richard Augspurger
 
Noppes Homeland

Noppes Homeland

29/06/2011 23:14:12
Quote Anchor link
Zie de if constructie binnen de while. Zonder $groep te definieren loopt het niet goed undefined var, en tja bij dit soort zaken ken ik een high value toe aan z'n variabele.

Let nu eens op de ~ staat tussen enkele quotes, en php maakt duidelijk onderscheid tussen '~' en "~".

Bij "~" gaat php-parser alsnog opzoek of er in de string variabelen verstopt zitten, wat bij '~' niet gebeurt. Tja en dat is zonde van die 1000ste miliseconde die php-parser daar aan moet besteden ;-). Maar ja dat is niet het issue.
Gewijzigd op 29/06/2011 23:18:47 door Noppes Homeland
 
Richard Augspurger

Richard Augspurger

29/06/2011 23:15:42
Quote Anchor link
Ja, nu zie ik het.
Ik ga het ff verder proberen met hulp van je voorbeeld en ik laat horen of het werkt.

Toevoeging op 29/06/2011 23:20:18:

Nu werkt het zoals ik het wilde.

Hartelijk bedankt!
 
PHP Scripter

PHP Scripter

30/06/2011 13:30:14
Quote Anchor link
Zou je misschien je oplossing hier kunnen posten? Dan kunnen andere gebruikers zien wat de oplossing is.
 
Richard Augspurger

Richard Augspurger

30/06/2011 14:35:47
Quote Anchor link
Tuurlijk.

Wat ik heb gedaan was middels het voorbeeld van Noppes Homeland.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$group
= "~";
    echo '<p>';
    while($cat = mysql_fetch_assoc($result))
    {
    
        if($cat['cattitle'] != $group)
        {

            $group = $cat['cattitle'];
            echo "<hr style='height: 3px; background-color: black;' /><h2>$cat[cattitle]</strong></h2>";
        }

        
        echo "<a href=\"?page=viewcat&subcatid=$cat[subcatid]\">$cat[subcattitle]</a><br />";
        
    }

echo '</p>';
?>


$group = "~"; geeft een onbelangrijke waarde op, gewoon om de variabel te initializeren.

De while controleerd of $group niet dezelfde waarde heeft als de categorie uit de database met een if statement, als dit zo is, schrijft de while de categorie en schrijft hij de variabel over.

Dit is gedaan om ervoor te zorgen dat elke categorie maar één keer wordt geschreven.

En daarna is het gewoon de subcategoriën koppelen aan een link die een id meegeeft die dan gecontroleerd worden op een andere pagina.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.