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>';

}
}
?>
<?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.");
$kolommen = 4;
while ($rowNaam = mysql_fetch_object($resultNaam))
{

echo '<td valign="top">';
//Dit is de code voor een tabel
echo '<table width="185" align="left" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</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 .' ';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");
$i = 0;
$j = 0;
while($rowLink = mysql_fetch_object($resultLink))
{
$i++;
echo '<tr>';
echo '<td class="link">-'. $rowLink->link_url.'';
echo '</td>';
echo '</tr>'.ENTER;
if($i % 2 == 0 && $i < mysql_num_rows($resultLink) && $i %10 != 0){
//wanneer er 10 items in de tabel staan, en het totaal aantal items nog niet is bereikt
//Link "Terug" weergeven.
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>';
// tabel sluiten, en nieuwe maken
echo '</table><table width="185" align="left" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
}
elseif($i == mysql_num_rows($resultLink)){
//wanneer het totaal aantal items is bereikt
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>';
echo '</table>'.ENTER;
}
if($i % 10 == 0 && $i != mysql_num_rows($resultLink)){
echo '</td></tr></table><table align="center"><tr>';
$counter = 0;
}
}
}
}
?>

Zo dan?
Helaas, ik zal even in de bron kijken of ik iets zie.
Dit is de code die ik nu heb.

Ik heb in alle tabellen de align="left" weggehaald, misschien helpt dat?

[code]
<?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.");
$kolommen = 4;
while ($rowNaam = mysql_fetch_object($resultNaam))
{
//Dit is de code voor een tabel
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</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 .' ';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");
$i = 0;
$j = 0;
while($rowLink = mysql_fetch_object($resultLink))
{
$i++;
echo '<tr>';
echo '<td class="link">-'. $rowLink->link_url.'';
echo '</td>';
echo '</tr>'.ENTER;
if($i % 2 == 0 && $i < mysql_num_rows($resultLink) && $i %10 != 0){
//wanneer er 10 items in de tabel staan, en het totaal aantal items nog niet is bereikt
//Link "Terug" weergeven.
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>'.ENTER;
// tabel sluiten, en nieuwe maken
echo '</table><table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
}
elseif($i == mysql_num_rows($resultLink)){
//wanneer het totaal aantal items is bereikt
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>';
echo '</table>'.ENTER;
}
if($i % 10 == 0 && $i != mysql_num_rows($resultLink)){
echo '</td></tr></table>'.ENTER;
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
$counter = 0;
}
}
}
}
?>
En zo dan?

<?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.");
$kolommen = 4;
while ($rowNaam = mysql_fetch_object($resultNaam))
{
//Dit is de code voor een tabel
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</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 .' ';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");
$i = 0;
$j = 0;
while($rowLink = mysql_fetch_object($resultLink))
{
$i++;
echo '<tr>';
echo '<td class="link">-'. $rowLink->link_url.'';
echo '</td>';
echo '</tr>'.ENTER;
if($i % 10 == 0 && $i < mysql_num_rows($resultLink)){
//wanneer er 10 items in de tabel staan, en het totaal aantal items nog niet is bereikt
//Link "Terug" weergeven.
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>'.ENTER;
// tabel sluiten, en nieuwe maken
echo '</table><table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
$j++;
}
elseif($i == mysql_num_rows($resultLink)){
//wanneer het totaal aantal items is bereikt
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>';
echo '</table>'.ENTER;
}
if($j % 4 == 0){//na elke 4 rijen
echo '</td></tr></table>'.ENTER;
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
$counter = 0;
}
}
}
}
?>

(Ik heb wel even naar je eigen code gekeken, maar ik zie het nog niet helemaal hoe dat nu zit met de tabellen)
Sorry voor de late reactie maar mijn man zat erachter.

Dit werkt ook niet maar ik ga morgen wel verder kijken.

Slaap ze...
Wederom een paar kleine aanpassingen. Ik ben benieuwd:) (ik heb de code even doorgelopen, er een (volgens mij) overbodige while lus uitgehaald, de 1e, omdat daar als het goed is maar 1 resultaat uit komt)

Verder heb ik het met het tellen anders gedaan, en de controle dus ook. Ik ben benieuwd, volgens mij zou het moeten werken zo, ik zie niet meer waarom het fout zou kunnen gaan.

<?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.");
$kolommen = 4;
$rowNaam = mysql_fetch_object($resultNaam);
//Dit is de code voor een tabel
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</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 .' ';
$resultLink = mysql_query($queryLink) or die ("Sorry maar ik kan de linken van de categorie niet weergeven, probeer het later opnieuw.");
$i = 0;
while($rowLink = mysql_fetch_object($resultLink))
{
$i++;
echo '<tr>';
echo '<td class="link">-'. $rowLink->link_url.'';
echo '</td>';
echo '</tr>'.ENTER;
if($i % 10 == 0 && $i < mysql_num_rows($resultLink)){
//wanneer er 10 items in de tabel staan, en het totaal aantal items nog niet is bereikt
//Link "Terug" weergeven.
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>'.ENTER;
// tabel sluiten, en nieuwe maken
echo '</table><table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;

}
elseif($i == mysql_num_rows($resultLink)){
//wanneer het totaal aantal items is bereikt
echo '<tr>';
echo '<td class="meer">';
echo '<a href="http://www.winkeltop10.nl"; target="_parent"><font class="meer">Terug</font></a>';
echo '</td>';
echo '</tr>';
echo '</table>'.ENTER;
}
if(($i/10) % 4 == 0){//na elke 4 rijen
echo '</td></tr></table>'.ENTER;
echo '<table width="185" class="tabelborder" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td class="kopje">'.$rowNaam->cat_naam.'</div>' ;
echo '</td>';
echo '</tr>'.ENTER;
}
}
}
}
?>
Ik kon er niet van slapen en heb nog even iets geprobeerd. Het lukte niet. Toen dat van jou en je kunt het resultaat bekijken op www.winkeltop10.nl

De opzet van de index.php pagina is als volgt:

Daar maak ik een grote tabel aan die dus die 4 tabellen moet omsluiten. Dan sluit ik die grote tabel weer en begin een nieuwe op de volgende regel. Dit werkt goed.

Ik heb die opzet ook al op de vervolg pagina geprobeerd maar dan geeft hij maar 1 tabel met kinderkleding weer.
Daar had ik jouw code ook al geprobeerd om dan door te gaan ernaast tot je 4 kolommen vol hebt. Maar dat wil niet lukken.

Ga maar weer naar bed, anders val ik straks om.....zucht
@ 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?
@Jan

Ik heb die ENTER een keer van jouw afgekeken :)

Wat die zoekmogelijkheid betreft, dat lijkt me wel een goed idee maar ook weer niet zo eenvoudig.
Eerst maar eens op de vervolgpagina de kolommen goed krijgen, wat dus nog steeds niet lukt :(

Het formulier heb ik nu aangepast.
@ Elsy: grappig, die ENTER gebruik ik allang niet meer. Een zoekmogelijkheid is te verkiezen boven een ingewikkelde navigatie. Mensen zijn het gewend van Google en gebruiken het dus ook.

Wat wil je precies op je vervolgpagina? Een of meer kolommen van maximaal tien records?

Reageren