Archief - PHP: Probleem met output van agenda

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

T-b0

Legacy Member
Dag allemaal,

Heb een agenda geschreven die enkel voor het huidige jaar displays geeft. Elke maand wordt als een titel weergegeven met de corresponderende events eronder. Vervolgens de volgende maand enzoverder

Probleem : hij geeft alle events onder July weer terwijl er verschillende voor andere maanden zijn :-s
Code:
<h1>Agenda <?php echo date("Y") ; ?></h1>

<table width="100%"  border="1" cellspacing="0" cellpadding="0">

<?php
include('dbconnect.php');
$currentmonth = date("m");
$currentyear = date("Y");

$sql = mysql_query("select * from agenda order by monthfield, date desc") or die(mysql_error());

$prevCat='';
while($row = mysql_fetch_array($sql))
{
	$event = $row["eventfield"];
	$id = $row["idfield"];
	$url = $row["urlfield"];
	$date = $row["date"];
	$month = $row["monthfield"];
	
	$val = strtotime($month);
	$month2 = date("F", $val);
	$datecorrection = strtotime($date);
	$year = date("Y", $datecorrection);
	$day = date("l", $datecorrection);
	$numberday = date("dS", $datecorrection);
	
	
	if($currentyear == $year) {

	// is the month different ?
	// if so, print it
		if ($month2 != $prevCat)  {
		echo "<tr><td><h1>$month2</h1></td></tr>";
		}
 		echo  "<tr><td><b><a href='$url'>$event</a></b></td>";
		echo  "<td>$day the $numberday<td></tr>";
	}
$prevCat = $month2;
}
?>
</table>

Hoop dat iemand me kan helpen
Dank bij voorbaat

killgore

Legacy Member
als wat wordt month opgeslagen

want als da een cijfertje 1-12 (of 0-11) is, dan moete daar geen strtotime op toepassen ze :p.

T-b0

Legacy Member
Als ik er geen strtotime op toepas is het altijd januari =-)

Maar ik zou het liefst die DATE_FORMAT functie in mysql gebruiken maar ik kan er niet aan uit op hun site...
Want vind het echt stom dat de gebruiker de maand en dan nog eens de volledige datum moet ingeven...

killgore

Legacy Member
en nu een antwoord op mijn vraag :s? Als wat wordt je maand opgeslagen in db?

killgore

Legacy Member
string of getal?
nu ja, zoveel doet het er neit toe

maak gewoon ergens een array aan

$months["01"] = "January"; (of natuurlijk 1 als het getal is).
$months["02"] = "February";
...

en werk met die zaken om om te zetten naar tekst.

Zo is dat tenminste al correct, en kijk dan of je originele bug nog voorkwam ;).

edit: je kan ook met mktime werken, maar als je echt enkel months nodig hebt vind ik de array-oplossing beter.

Trouwens: ik snap niet wrom je niet gewoon je month uit de date van het event haalt :s?

Tyfius

Legacy Member
Veel eenvoudiger:
PHP:
-- 
-- Table structure for table `agenda`
-- 

CREATE TABLE `agenda` (
  `id` int(11) NOT NULL auto_increment,
  `date` date NOT NULL,
  `event` text NOT NULL,
  `url` varchar(200) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

-- 
-- Dumping data for table `agenda`
-- 

INSERT INTO `agenda` (`id`, `date`, `event`, `url`) VALUES (1, '2006-07-27', 'Test event 1', 'http://www.test.be'),
(2, '2006-08-31', 'Laatste werkdag', 'http://www.feest.be');
MySQL maakt gebruik van het formaat YYYY-MM-DD.
PHP:
$curmonth = date("m");
$curyear = date("Y");
$prevCat = '';

$res = mysql_query("SELECT date, event, url FROM agenda ORDER BY date DESC");

while ($row = mysql_fetch_row($res))
{
    $date   = $row[0];
    $event  = $row[1];
    $url    = $row[2];

    $_year  = date("Y", strtotime($date));
    $_month = date("m", strtotime($date));
    $_day   = date("d", strtotime($date));
    
    if ($curyear == $_year)
    {
        if ($_month != $prevCat)
        {
            echo '<tr><td><h1>'.date("F", strtotime($date)).'</h1></td></tr>';
        }
        echo '<tr><td><b><a href="'.$url.'">'.$event.'</a></b></td>'
            .'<td>'.$_day.' the '.date("dS", strtotime($date)).'</td></tr>';
    }
    $prevCat = $_month;
}
Die $_year, $_month en $_day kan je in principe ook met date("", strtotime()); wegwerken, maar voor alle duidelijkheid heb ik ze zo laten staan.

orez

Legacy Member
Tyfius...

gewoon DATE_FORMAT(datefield,"%M") AS Month

Lukt toch ook perfect... en is minder code, en is sneller als ik me ni vergis.

en T-b0... Als je niet wijsraakt uit de DATE_FORMAT String... hmm... toch mooi uitgelegd, en redelijk basic SQL ? Lees het nog maar es opnieuw :P

Tyfius

Legacy Member
Jah, dat werkt inderdaad ook, maar de TS zei dat hij DATE_FORMAT niet echt begreep, dus het leek mij eenvoudiger van het dan ook in PHP zelf te doen. Doe ik trouwens ook, op die manier hou ik mijn SQL statements eenvoudiger en kan ik eventueel meer dingen doen met die datums.

T-b0

Legacy Member
SELECT DATE_FORMAT( date, "%M" ) AS
MONTH

MySQL retourneerde: Documentatie
#1054 - Unknown column 'date' in 'field list'

Raar aangezien date wel een field is binnen de table agenda....

T-b0

Legacy Member
Dan krijg ik nog steeds dezelfde error...
En het field is er nochtans...
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan