Ik ben het weer helemaal kwijt en kom er niet uit.

Ik wil simpele tabellen maken met een kop erboven en daaronder de linken die bij die kop horen.

Hoe maak ik mijn query zo dat de juiste linken in de juiste tabel terecht komen?



testpagina

#
# Table structure for table `linken`
#

CREATE TABLE linken (
link_id int(5) NOT NULL auto_increment,
link_naam varchar(255) NOT NULL default '',
link_url varchar(255) NOT NULL default '',
cat_id int(5) NOT NULL default '0',
PRIMARY KEY (link_id)
) TYPE=MyISAM;


#
# Table structure for table `categorie`
#

CREATE TABLE categorie (
cat_id int(5) NOT NULL auto_increment,
cat_naam varchar(255) NOT NULL default '',
volgende_pagina varchar(255) NOT NULL default '',
PRIMARY KEY (cat_id)
) TYPE=MyISAM COMMENT='Categorie namen';


<?php
//Laat zien hoeveel linken er in die categorie zitten:
$teller = "SELECT COUNT(link_id) AS teller FROM linken ";
$resultaatTeller = mysql_query($teller) or die ("Sorry maar kan de teller niet weergeven.");
$laatZienTeller = mysql_fetch_assoc($resultaatTeller);

//Laat de categorie naam zien boven in de tabel
$queryNaam = 'SELECT * FROM categorie ORDER BY cat_naam';
$resultNaam = mysql_query($queryNaam) or die ("Sorry maar ik kan de naam van de categorie niet weergeven, probeer het later opnieuw.");
while ($rowNaam = mysql_fetch_object($resultNaam))
{
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'&nbsp;<div class="teller"> ' . $laatZienTeller['teller'].'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
//Laat de linken zien
$queryLink = 'SELECT * FROM linken ORDER BY RAND()LIMIT 0,3';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");

while ($rowLink = mysql_fetch_object($resultLink))
{
echo '<tr>';
echo '<td>-'. $rowLink->link_url.'</a>';
echo '</td>';
echo '</tr>'.ENTER;
}
echo '<tr>';
echo '<td class="meer">';

echo '<a href="index2.php?categorie=' . $rowNaam->cat_naam . '&pagina='.$rowNaam->volgende_pagina.'"><font class="meer">Meer in de categorie '.$rowNaam->cat_naam.'&nbsp;-></font></a>';

echo '</td>';
echo '</tr>';


echo '</table>';

}
}
?>
Heb net even naar de code zitten kijken maar waarom doe je dit eigenlijk met tabellen? Een tabel is voor tabellarische gegevens en niet voor lijsten. Als je gewoon met <ol> of <ul> zou werken kun je heel gemakkelijk na een x aantal <li>'s een nieuwe kunnen beginnen.
Op de vervolgpagina staan bv alle linken van kinderkleding. Omdat ze daar op de indexpagina op hebben geklikt.

Omdat dit er natuurlijk heel veel kunnen worden wil ik dat ook net als op de index pagina netjes in 4 rijen van 10 linken.

Ik heb het geprobeerd om het op dezelfde manier te doen als op de index pagina maar dan krijg je maar 1 rij te zien.

Dit is de code van de index pagina:


<?php
echo '<table align="center"><tr>';
$kolommen = 4;

//Laat de categorie naam zien boven in de tabel
$queryNaam = 'SELECT * FROM winkel_categorie ORDER BY cat_naam';
$resultNaam = mysql_query($queryNaam) or die ("Sorry maar ik kan de naam van de categorie niet weergeven, probeer het later opnieuw.");
while ($rowNaam = mysql_fetch_object($resultNaam))
{
//Laat zien hoeveel linken er in die categorie zitten:
$teller = 'SELECT COUNT(link_id) AS teller FROM winkel_linken  WHERE cat_id = '. $rowNaam->cat_id .'';
$resultaatTeller = mysql_query($teller) or die ("Sorry maar kan de teller niet weergeven.");
$laatZienTeller = mysql_fetch_assoc($resultaatTeller);
echo '<td valign="top"><table width="185" align="left" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'&nbsp;<div class="teller"> ' . $laatZienTeller['teller'].'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
//Laat de linken zien
$queryLink = 'SELECT cat_id,link_url FROM winkel_linken WHERE cat_id = '. $rowNaam->cat_id .' ORDER BY RAND()  LIMIT 0,10';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");
$j = 0;
while ($rowLink = mysql_fetch_object($resultLink))
{
    $j++;
    echo '<tr>';
    echo '<td class="link">-'. $rowLink->link_url.'';
    echo '</td>';
    echo '</tr>'.ENTER;
    if($j == 10){        
        echo '<tr>';
        echo '<td class="meer">';
        echo '<a href="index.php?cat_id='.$rowNaam->cat_id.'"><font class="meer">Meer in de categorie '.$rowNaam->cat_naam.'&nbsp;-></font></a>';
        echo '</td>';
        echo '</tr>';
        }
    
}
        
        

        echo '</table>'.ENTER;
    
$counter++;
    if($counter==$kolommen)
    {
        echo '</td></tr></table><table align="center"><tr>';
        $counter = 0;
    }
}

echo '</td></tr></table>'.ENTER;
}

?>



Ik gebruik tabellen omdat ik geen andere manier wist om overal mooie kopjes boven te krijgen.

En wat jij nu zegt zal best waar zijn maar ik zie het nu helemaal niet meer zitten.
Het blijft moeilijk dat php.......

CSS:
    ul {
        list-style-item: none; /* geen bolletjes ervoor */
    }
    li.kopje {
        background: mooi kopkleurtje;
    }
    li.leesmeer {
        background: mooi leesmeer kleurtje;
    }

Een lijstje van tien ziet er dan zo uit:

    <ul>
        <li class="kopje">kinderkleding</li>
        <li>item 1</li>
        <li>item 2</li>
        <li>item 3</li>
        <li>item 4</li>
        ... enz
        <li class="leesmeer">lees meer...<li>
    </ul>

Het voordeel van deze methode, is dat hij verticaal doortelt. Een tabel telt eerst horizontaal door.
Dit is mijn <ul> lijstje op de vervolgpagina:


<?php
//Laat de categorie naam zien boven in de tabel
$queryNaam = 'SELECT * FROM winkel_categorie WHERE cat_id = '.$_GET['cat_id'].' ORDER BY cat_naam';
$resultNaam = mysql_query($queryNaam) or die ("Sorry maar ik kan de naam van de categorie niet weergeven, probeer het later opnieuw.");

while ($rowNaam = mysql_fetch_object($resultNaam))
{
//Dit is de code voor een tabel
echo '<ul>';
echo '<li class="kopje">'.$rowNaam->cat_naam.'</li>'.ENTER ;

//Laat de linken zien
$queryLink = 'SELECT cat_id,link_url FROM winkel_linken WHERE cat_id = '. $rowNaam->cat_id .' ORDER BY link_url ';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");
if(mysql_num_rows($resultLink) > 0) // Er is iets gevonden
    {

        while($i < 10 AND $rowLink = mysql_fetch_object($resultLink))
        {
         echo '<li class="link">-'. $rowLink->link_url.'</li>'.ENTER;
		}
	}
		echo '<li class="leesmeer">';
		echo '<a href="http://www.winkeltop10.nl/index2.php" target="_parent"><font class="meer">Terug</font></a>';
        echo '</li>'.ENTER;
		}
        echo '</ul>'.ENTER;
    
}
?>


en dit is de css:


ul {
	list-style-item: none;
	width: 185px;
	background: #FFFFFF;
	list-style: url(none) none;
	margin: 0px;
	padding: 0px;
}
li.kopje {
	background: #4261B6;
	font: bold 12px Verdana, Arial, Helvetica, sans-serif;
	color: #FFFFFF;
}
li.leesmeer {
	background: #FCED9F;
	font: 10px Verdana, Arial, Helvetica, sans-serif;
	color: #000000;
	height: 10px;
}
li.link {
	margin: 0px;
	padding: 0px 2px;
	text-align: left;
}



-Is het mogelijk om de linken dichter op elkaar te krijgen? Ik had padding en margin al op 0px gezet.

En hoe krijg je nu 4 kolommen naast elkaar met 10 linken erin en dan weer opnieuw 4 kolommen daaronder?
Het lukt niet.

Dit is de code die ik nu heb en laat 1 kolom zien.
Maar hij moet er dus 4 naast elkaar zetten en dan daaronder weer verder gaan. Iedere kolom bevat 10 linken.



<?php
//Laat de categorie naam zien boven in de tabel
$queryNaam = 'SELECT * FROM winkel_categorie WHERE cat_id = '.$_GET['cat_id'].' ORDER BY cat_naam';
$resultNaam = mysql_query($queryNaam) or die ("Sorry maar ik kan de naam van de categorie niet weergeven, probeer het later opnieuw.");

while ($rowNaam = mysql_fetch_object($resultNaam))
{
//Dit is de code voor een tabel
echo '<ul>';
echo '<li class="kopje">'.$rowNaam->cat_naam.'</li>'.ENTER ;

//Laat de linken zien
$queryLink = 'SELECT cat_id,link_url FROM winkel_linken WHERE cat_id = '. $rowNaam->cat_id .' ORDER BY link_url ';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");

while($rowLink = mysql_fetch_object($resultLink))
	{
	echo '<li class="link">-'. $rowLink->link_url.'</li>'.ENTER;
	}
	echo '<li class="leesmeer">';
	echo '<a href="http://www.winkeltop10.nl" target="_parent"><font class="meer">Terug</font></a>';
    echo '</li>'.ENTER;
}//einde while
echo '</ul>';
}//einde if
?>
Jan Koehoorn schreef op 16.09.2006 09:26
@ Robert: is ENTER een define van jezelf voor regeleindes? Probeer eens uit of PHP_EOL werkt? Die past zich automatisch aan naar elk platform.

@ Elsy: los van de indeling met tabellen en dergelijke zou ik je aanraden een zoekmogelijkheid in je indexpagina in te bouwen. Vooral op sites zoals jij ze maakt (met verzamelingen hyperlinks) is dat heel handig voor een bezoeker. Verder heb ik even naar je aanmeldformulier gekeken, maar ik zie daar nergens een mogelijkheid om een URL op te geven. Klopt dat?


Elsy had het al zo'n beetje gezegd. Ik heb zelf die .ENTER er niet ingezet, maar wel laten staan, omdat het bij haar gewoon leek te werken.
Wat de zoekfunctie betreft, dat is een heel goed idee. Ik vond het er op de index pagina (waar van elke categorie een paar linkjes staan) heel netjes en overzichtelijk uit zien. Het was mooi geweest als hetzelfde op de vervolgpagina ook kon.
Ik denk dat ik wat over het hoofd zie, ik ben net terug van m'n werk, dus ik zal eens kijken.
@ Elsy & Robert: Ik heb er dit van gemaakt:
<?php
//Laat de categorie naam zien boven in de tabel
$sql = "
SELECT c.cat_id, c.cat_naam, l.link_url
FROM winkel_categorie AS c, winkel_linken AS l
WHERE cat_id = " . $_GET['cat_id'] . "
AND c.cat_id = l.cat_id
ORDER BY cat_naam
";
$res = mysql_query($sql) or die ("Sorry maar ik kan de naam van de categorie niet weergeven, probeer het later opnieuw.");
$teller = 0;
$list_completed = false;
while ($row = mysql_fetch_assoc ($res)) {
if ($teller % 12 == 0) {
echo '<ul>';
echo '<li class="kopje">' . $row['cat_naam'] . '</li>' . ENTER ;
}
echo '<li class="link">-' . $row['link_url'] . '</li>' . ENTER;
$list_completed = false;
if ($teller % 12 == 11) {
echo '<li class="leesmeer"><a href="http://www.winkeltop10.nl"; target="_parent">Terug</a></li>' . ENTER;
echo '</ul>';
$list_completed = true;
}
}
if (!$list_completed) {
echo '<li class="leesmeer"><a href="http://www.winkeltop10.nl"; target="_parent">Terug</a></li>' . ENTER;
echo '</ul>';
}
?>
[edit]
Als dit werkt (niet getest) komen de lijsten eerst nog ONDER elkaar te staan. Met CSS kun je ze naast elkaar krijgen, maar eerst maar zien of het werkt.
[/edit]
Bedankt Jan dat je het nog wil proberen voor mij :)

Ik krijg deze foutmelding:

Sorry maar ik kan de naam van de categorie niet weergeven, probeer het later opnieuw.

ik zie zo niet wat er fout is.
$sql = "
SELECT c.cat_id, c.cat_naam, l.link_url
FROM winkel_categorie AS c, winkel_linken AS l
WHERE cat_id = " . $_GET['cat_id'] . "
AND c.cat_id = l.cat_id
ORDER BY cat_naam
";

Kan dit wel zo?? (ik doel op de "WHERE cat_id = ")
Moet dat geen "WHERE c.cat_id =" zijn?

Hetzelfde geld dan voor ORDER BY cat_naam, dat zou dan ORDER BY c.cat_naam moeten zijn.

Reageren