I am new to PHP and working on my own CMS for a project. Mostly to just give myself a project to learn the language. The CMS is working but I am just tracking down some bugs in it. So here it goes...
I am trying to list all of my published articles for each section. It does this correctly but I am having an issue in the code statement that follows around the line of
echo </br></br><br> .ucfirst($row[ section ]). Articles: ; //[ section ] is the name
Now If I am showing all my sections its correct, because its querying in ascending order, but if I go with just one section it always just shows the section name of the very first section it never picks up the section that its currently showing articles for. Is there a way that I can have a first priming read to get the section name, then reset it back to 0 times through the loop for the while ($stories = $result->fetch_assoc())
loop so I dont miss an article?
I had reworked it to use the join so I could get the name of the section with the section id number itself. The joined sql statement I have does just what I need. But I am not initiating the call to the joined statement until after I have listed the section name and then the article count (the while ($stories = $result->fetch_assoc())
).
//query for getting the sections to the list each ones articles
$querySection = select * from sections order by section asc ;
$resultSection = $handle->query($querySection);
if ($resultSection->num_rows)
{
//hard coded to only show the scection ONE time...
//SQL repeats the rows the number of sections there are. So lets cheat.
if(isset($sectionHolder) && $sectionHolder > 0)
$counterHolder = 9998;
else
$counterHolder = 0;
while ($row = $resultSection->fetch_assoc())
{
if(isset($sectionHolder) && $sectionHolder > 0)
//we are looking at one specific section
$query =
select articles.*, sections.section
from articles
INNER JOIN sections
ON art_sec=sections.id
where articles.art_sec = .$sectionHolder. and articles.published IS NOT NULL
ORDER BY sections.section, articles.headline asc
;
else //just looping through everything we have...
$query = select * from articles where art_sec = .$row[ id ]. and published IS NOT NULL order by art_sec asc ;
$result = $handle->query($query);
if($result->num_rows > 0 && $counterHolder != 9999)//we have a defined section to go into
{
echo </br></br><br> .ucfirst($row[ section ]). Articles: ;
echo $result->num_rows;
echo </br></p> ;
if ($result->num_rows)
{
echo <table width="90%"> ;
echo <tr><th>Headline</th> ;
echo <th>Modified</th></tr> ;
while ($stories = $result->fetch_assoc())
{
echo <tr><td width="75%"> ;
echo $stories[ headline ];
echo $stories[ sections.section ];
echo </td><td> ;
echo date( m-j-y, h:i , $stories[ modified ]);
echo </td><td> ;
//add to array
$array[] = $stories[ id ]; // add every ID on this page to the array.
} //end while of stories
echo </table></br></br></br></br> ;
$counterHolder += 1; //adds one to only come in once if the section is selected or all times if its all sections.
} // end if results num rows
}//end if results num rows >0 and counter != 9999
}//end while row-fetch
}//end if ResultSection-numrows
Maybe someone could also try and help me figure out a way to take out the delimiter of counter. I messed around with other ways but that was the only logic I could come up with to solve my problem, and it just doesnt seem like a very effective way to code. The issue was that when I was looking at just one section and it had 5 articles, it would show the section Name then list its 5 articles, 5 times, vs only being done once. So I have a counter going to only go inside the loop one time, if a section is passed in.
This is my first post on here, If I have posted too much and need to break it down more just say so (i figured more is better than bits and pieces). I could also post the entire page of code if needed.
Thanks