Mijn Tabel Tbl_Nieuws: Velddefinitie
. Datum: timestamp NOT NULL,
. Auteur: varchar(20) NOT NULL,
. Titel: varchar(50) NOT NULL,
. Verhaal: text,
. Categorie: varchar(10) default 'Senioren'
Het idee:
Ik wil een lijst met nieuwstitels presenteren waaruit men kan kiezen welk item men wil zien.
De lijst wil ik uit mijn tabel genereren. Met een code zoals;
<?php
// Performing SQL Query
$query= 'SELECT Titel FROM Tbl_Nieuws WHERE Categorie=\'Senioren\' ORDER BY Datum ASC'.' ';
$result=mysql_query($query) or die('Query failed: ' . mysql_error());
// Printing results in HTML
echo '<table width="100%" border="1">';
$line = mysql_fetch_array($result, MYSQL_ASSOC);
foreach (array_keys($line) as $col_value)
do {
echo '<tr><td nowrap><div class="style1">'.$line['Titel'].'</div></td>';
echo "\t</tr>\n";
} // do
while ($line = mysql_fetch_array($result, MYSQL_ASSOC));
echo "</table>\n";
?>
Nu wil ik het datumveld van de het gekozen item als selectie overhouden zodat ik deze kan gebruiken in het presenteren van het nieuwsartikel.
<?php
// Performing SQL Query
$query= 'SELECT Titel, Verhaal FROM Tbl_Nieuws WHERE GekozenDatum=Datum';
$result=mysql_query($query) or die('Query failed: ' . mysql_error());
// Printing results in HTML
$line = mysql_fetch_array($result, MYSQL_ASSOC);
foreach (array_keys($line) as $col_value)
do {
echo '<h1>'.$line['Titel'].'</h1>';
echo $line['Verhaal'];
} // do
while ($line = mysql_fetch_array($result, MYSQL_ASSOC));
// Free resultset
mysql_free_result($result);
// Closing connection
mysql_close($link);
?>
Mijn bedoeling is om in de linkerkolom het verhaal te presenteren terwijl er in de rechterkolom het nieuwsarchief staat.
Waar maak je de link aan naar een artikel? Zie nergens a href staan.
Je wilt de datum gebruiken om je artikel te presenteren, maar wat als er 2 artikelen zijn met dezelfde datum? Is het niet logischer om in je tabel een kolom id op te nemen en dat te koppelen aan een artikel?
Als er 1 artikel gekozen wordt, waarom dan do/while lus?
Andere opmerking: script op 1 manier. Zie in je 1e code de ene keer echo " staan en de andere keer echo ' . Niet consequent en de kans dat je daar een keer de mist mee ingaat.
De pagina (index) die nu met de pid kijkt of de pagina een string is en voorkomt in een bekend lijstje met pagina's (of wordt opgezocht in de database) en deze dan laat zien kan aangepast worden. In geval dat pid een string is kan de lijst met pagina's afgewerkt/geladen worden. In geval van een ctype_digit kan gekeken worden of deze pagina in de database voorkomt en, zoja, geladen worden.
Een andere en duidelijkere oplossing is een tweede parameter meegeven bij pid=nieuws&artikel=[id naar artikel]. Indien de pagina bestaat uit nieuws kan gekeken worden of er ook een artikel id is meegegeven en kan deze worden weergegeven na controle of deze ook echt bestaat.
Uiteraard is het misschien voor de overzichtelijkheid/structuur mooier om een pagina nieuws.php te maken die dit stuk afhandelt, maar voor het idee maakt het niks uit.
Daar kies ik in de rechterkolom een ander nieuws bericht en krijg nu een lege pagina http://mttv72.nl/index.php?pid=10 bijvoorbeeld.
Ik zou in ieder geval niet pid gebruiken voor een categorie (nieuws) en een nummer (10); dat gaat (in de toekomst) zeker verwarring geven.
Begin de pagina met php en controleer of er een artikel-id in de url staat. Zo ja; voer een query uit en zoek dat artikel er bij en toon het. Zo niet, dan geen query en een 'standaard'tekst dat ze uit nieuwsitems kunnen kiezen.
Aangezien ik het bovenstaande verhaal niet werkend krijg, wil ik het over een andere boeg gooien en wel d.m.v een keuze menu.
De code:
<?php
$query= 'SELECT NieuwsID, Titel FROM Tbl_Nieuws WHERE Categorie=\'Senioren\' ORDER BY Datum DESC'.' ';
$result=mysql_query($query) or die('Query failed: ' . mysql_error());
// Vul Nieuwsarchief
echo '<form><select name="$NieuwsNummer">'; //begin standaard het formulier
$line = mysql_fetch_array($result, MYSQL_ASSOC);
foreach (array_keys($line) as $col_value)
do {
echo '<option value="'.$line['NieuwsID'].'" >'.$line['Titel'].'</option>';
}
while ($line = mysql_fetch_array($result, MYSQL_ASSOC));
echo '</select>';
echo '</form>';