t3chguy
asked on
add rowspan if previous value equals current value php while
I'm trying to add a rowspan to table cell if the previous date is equal to the current row's date. I have it now so that it doesn't display the date, but I still need it to add a rowspan and that is what I'm stuck on.
$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities");
if(mysql_num_rows($getOpps) > 0)
{
$prevDate = '';
while($oppData = mysql_fetch_assoc($getOpps))
{
//Check registrations
$checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");
if(mysql_num_rows($checkReg) > 0)
{
while($regData = mysql_fetch_assoc($checkReg))
{
if($regData['totalRegistered'] > 0)
{
$totalRegistered = $regData['totalRegistered'];
}
else
{
$totalRegistered = '0';
}
}
}
$altrow = 'class="alt1"';
$currentDate = $oppData['event_date'];
$seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);
if($seatsAvailable > 0)
{
$link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
}
else
{
$link = 'All spots have been filled.';
}
echo '<tr>';
if($currentDate == $prevDate)
{
echo '<td> </td>';
}
else
{
echo '<td ' . $altrow . '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
}
echo '
<td ' . $altrow . '>'.$oppData['meeting_time'] .'</td>
<td ' . $altrow . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
</tr>';
$prevDate = $currentDate;
}
}
Do you mean here?
if($currentDate == $prevDate)
{
echo '<td> </td>';
}
Just change to and add the colspans amount
echo '<td colspan=""> </td>';
if($currentDate == $prevDate)
{
echo '<td> </td>';
}
Just change to and add the colspans amount
echo '<td colspan=""> </td>';
ASKER
echo '<td ' . $altrow . '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
^That cell there needs to have the rowspan added to it and this one...
<td colspan=""> </td>';
should no longer exist because the date has been carried down.
Replace that whole if else block with
$currentDate == $prevDate ? $cols=' colspan="2"' : $cols='';
echo '<td ' . $altrow . $cols . '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
ASKER
I need the rowspan to be set though. and if I use your code and change the colspan to rowspan it messes up the table view even more.
My mistake, just change it to rowspan.
$currentDate == $prevDate ? $rowspan=' rowspan="2"' : $rowspan='';
echo '<td ' . $altrow . $rowspan. '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
$currentDate == $prevDate ? $rowspan=' rowspan="2"' : $rowspan='';
if($currentDate != $prevDate){
echo '<td ' . $altrow . $rowspan. '>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
}
Yeah I realised where it was going wrong.
I'm hacking it in reverse, so everything is rowspan=2 unless it is the same date - I think my logic is right...
$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities");
if(mysql_num_rows($getOpps) > 0)
{
$prevDate = '';
while($oppData = mysql_fetch_assoc($getOpps))
{
//Check registrations
$checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");
if(mysql_num_rows($checkReg) > 0)
{
while($regData = mysql_fetch_assoc($checkReg))
{
if($regData['totalRegistered'] > 0)
{
$totalRegistered = $regData['totalRegistered'];
}
else
{
$totalRegistered = '0';
}
}
}
$altrow = 'class="alt1"';
$currentDate = $oppData['event_date'];
$seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);
if($seatsAvailable > 0)
{
$link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
}
else
{
$link = 'All spots have been filled.';
}
echo '<tr>';
$currentDate != $prevDate ? $rowspan=' rowspan="2"' : $rowspan='';
if($currentDate != $prevDate){
echo '<td ' . $altrow . 'rowspan="2">' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
}
echo '
<td ' . $altrow . $rowspan . '>'.$oppData['meeting_time'] .'</td>
<td ' . $altrow . $rowspan . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
</tr>';
$prevDate = $currentDate;
}
}
Can you post the HTML, that screen shot looks like its not terminating the <TR>
ASKER
<table width = "750px" cellspacing = "0" cellpadding = "0">
<tr>
<td class="tblHeader">Date</td>
<td class="tblHeader">Time</td>
<td class="tblHeader">Need</td>
</tr><tr><td class="alt1"rowspan="2">Monday, Nov 18</td>
<td class="alt1" rowspan="2">11am-1pm</td>
<td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC1">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC2">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Tuesday, Nov 19</td>
<td class="alt1" rowspan="2">11am-1pm</td>
<td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC3">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC4">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Wednesday, Nov 20</td>
<td class="alt1" rowspan="2">11am-1pm</td>
<td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC5">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC6">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Thursday, Nov 21</td>
<td class="alt1" rowspan="2">11am-1pm</td>
<td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC7">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 3 <a href="registerNow.php?id=SCC8">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Friday, Nov 22</td>
<td class="alt1" rowspan="2">4pm-6pm</td>
<td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC10">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC9">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Saturday, Nov 23</td>
<td class="alt1" rowspan="2">10am-1pm</td>
<td class="alt1" rowspan="2">0 of 2 <a href="registerNow.php?id=SCC11">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">1pm-3pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC12">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Sunday, Nov 24</td>
<td class="alt1" rowspan="2">1pm-4pm</td>
<td class="alt1" rowspan="2">0 of 5 <a href="registerNow.php?id=SCC13">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="2">Monday, Nov 25</td>
<td class="alt1" rowspan="2">11am-1pm</td>
<td class="alt1" rowspan="2">0 of 3 <a href="registerNow.php?id=SCC14">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 4 <a href="registerNow.php?id=SCC15">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">5:30PM</td>
<td class="alt1">0 of 3 <a href="registerNow.php?id=SCC16">Volunteer Now</a></td>
</tr></table>
Gonna have to store the rows in a var til you have made one pass, think I've got the logic correct here
$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities");
if(mysql_num_rows($getOpps) > 0)
{
$prevDate = '';
$currow="";
while($oppData = mysql_fetch_assoc($getOpps))
{
//Check registrations
$checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");
if(mysql_num_rows($checkReg) > 0)
{
while($regData = mysql_fetch_assoc($checkReg))
{
if($regData['totalRegistered'] > 0)
{
$totalRegistered = $regData['totalRegistered'];
}
else
{
$totalRegistered = '0';
}
}
}
$altrow = 'class="alt1"';
$currentDate = $oppData['event_date'];
$seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);
if($seatsAvailable > 0)
{
$link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
}
else
{
$link = 'All spots have been filled.';
}
if($currentDate == $prevDate ){
$currow=str_replace('spantemp',' rowspan="2"',$currow);
}
else {
echo str_replace('spantemp','',$currow);
$currow = "";
}
$currow .= '<tr>';
if($currentDate != $prevDate){
$currow .= '<td ' . $altrow . 'spantemp>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
}
$currow .= '
<td ' . $altrow . '>'.$oppData['meeting_time'] .'</td>
<td ' . $altrow . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
</tr>';
$prevDate = $currentDate;
}
}
echo str_replace('spantemp','',$currow);
ASKER
Close! The only issue now is the last record (the third) for the 25th moved to the left column where it should be apart of the rest.
Can you have more than 2 rows? That's what it looks like from the last part
ASKER
Yes...there is just the one case where I have 3 rows.
Try this, I'm not quite sure its right but I will be leaving soon
$getOpps = mysql_query("SELECT id, group_id, group_name, event_date, max_size, day, meeting_time, avaliable_seats FROM occ_schedule WHERE location_id = '".$location."' ORDER BY event_date") or ("Critical Error! Cannot pull volunteer opportunities");
if(mysql_num_rows($getOpps) > 0)
{
$prevDate = '';
$currow="";
$rowcounter=0;
while($oppData = mysql_fetch_assoc($getOpps))
{
//Check registrations
$checkReg = mysql_query("SELECT COUNT(id) as totalRegistered FROM occ_volunteers WHERE group_id = '".$oppData['group_id']."'") or die("Critical Error! Cannot check registrations.");
if(mysql_num_rows($checkReg) > 0)
{
while($regData = mysql_fetch_assoc($checkReg))
{
if($regData['totalRegistered'] > 0)
{
$totalRegistered = $regData['totalRegistered'];
}
else
{
$totalRegistered = '0';
}
}
}
$altrow = 'class="alt1"';
$currentDate = $oppData['event_date'];
$seatsAvailable = ($oppData['avaliable_seats'] - $totalRegistered);
if($seatsAvailable > 0)
{
$link = '<a href="registerNow.php?id='.$oppData['group_id'].'">Volunteer Now</a>';
}
else
{
$link = 'All spots have been filled.';
}
if($currentDate == $prevDate ){
$rowcounter++;
}
elseif($rowcounter!=0) {
echo str_replace('spantemp','rowspan="'.$rowcounter.'"',$currow);
$currow = "";
$rowcounter=0;
}
else{
echo str_replace('spantemp','',$currow);
$currow = "";
$rowcounter=0;
}
$currow .= '<tr>';
if($currentDate != $prevDate){
$currow .= '<td ' . $altrow . 'spantemp>' . $oppData['day'] .', ' . date("M d", strtotime($oppData['event_date'])) . '</td>';
}
$currow .= '
<td ' . $altrow . '>'.$oppData['meeting_time'] .'</td>
<td ' . $altrow . '>'.$totalRegistered . ' of ' . $oppData['avaliable_seats'] .' ' . $link . '</td>
</tr>';
$prevDate = $currentDate;
}
}
echo str_replace('spantemp','',$currow);
ASKER
Yeah everything became misaligned with that last update.
Can you post the HTML, makes it easier to understand where it is going wrong rather than trying to wrack my brain.
ASKER
<table width = "750px" cellspacing = "0" cellpadding = "0">
<tr>
<td class="tblHeader">Date</td>
<td class="tblHeader">Time</td>
<td class="tblHeader">Need</td>
</tr><tr><td class="alt1"rowspan="1">Monday, Nov 18</td>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC1">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC2">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="1">Tuesday, Nov 19</td>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC3">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC4">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="1">Wednesday, Nov 20</td>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC5">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC6">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="1">Thursday, Nov 21</td>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC7">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 3 <a href="registerNow.php?id=SCC8">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="1">Friday, Nov 22</td>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC10">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC9">Volunteer Now</a></td>
</tr><tr><td class="alt1"rowspan="1">Saturday, Nov 23</td>
<td class="alt1">10am-1pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC11">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">1pm-3pm</td>
<td class="alt1">0 of 2 <a href="registerNow.php?id=SCC12">Volunteer Now</a></td>
</tr><tr><td class="alt1">Sunday, Nov 24</td>
<td class="alt1">1pm-4pm</td>
<td class="alt1">0 of 5 <a href="registerNow.php?id=SCC13">Volunteer Now</a></td>
</tr><tr><td class="alt1">Monday, Nov 25</td>
<td class="alt1">11am-1pm</td>
<td class="alt1">0 of 3 <a href="registerNow.php?id=SCC14">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">4pm-6pm</td>
<td class="alt1">0 of 4 <a href="registerNow.php?id=SCC15">Volunteer Now</a></td>
</tr><tr>
<td class="alt1">5:30PM</td>
<td class="alt1">0 of 3 <a href="registerNow.php?id=SCC16">Volunteer Now</a></td>
</tr>
</table>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Excellent solution! Thank you for all the work you put into it!
https://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/A_11177-PHP-MySQL-Deprecated-as-of-PHP-5-5-0.html