Jump to content

Recommended Posts

I have quite a long .php page but I've attached the end of it. I was wondering if I can change the order it is displayed. Basically $j is a year. And currently it goes from 1894 until 2019. I don't think anything is currently telling it to sort either way, it just by default shows that way. But I want it to show 2019 first and go down to 1894. I had this written for me by someone who I can no longer get hold of.

	$total_record=count($session_player);
	$i=0;
	$palyerslink="";
	foreach($session_player as $var=>$val)
	{
		$i++;
		if($i==$total_record)
			$palyerslink.="<a href='/history/?pid=$var' title='view this in more detail'>$val</a>";
		else
			$palyerslink.="<a href='/history/?pid=$var' title='view this in more detail'>$val</a>, ";
		
	}
	if(!empty($session_player))
	{
		$tr++;
		$records.="<tr class=row>
		            <td class=border-right><a href='/history/browse?season=$j'>$j-$value</a></td>
		            <td class=border-right>$max_goal_season</td>
		            <td>$palyerslink</td>
		            </tr>";
	}
}
$records.="</table></div>";
echo $records;
?>

 

This is the end of the page where the records are then displayed using the echo.

I'm not sure if more code is needed though, I could post it in full if needed

Edited by alxne
Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/
Share on other sites

Sorry @requinix I'm not that good with this, it just looks a mess to me! Here's the whole thing

<?php
$competitions=array();
$competitions[]="Championship";
$competitions[]="Division One";
$competitions[]="Division One (old)";
$competitions[]="Division Two (old)";
$competitions[]="League One";
$competitions[]="Midland League";
$competitions[]="Premier League";
$competitions[]="South Regional League";
$competitions[]="Southern Section";
$competitions[]="Midland Division";
$competitions[]="North";
$competitions[]="South";
$competitions[]="Midland Section";
$competitions[]="FA Cup";
$competitions[]="League Cup";
$competitions[]="League Trophy";
$competitions[]="UEFA Champions League";
$competitions[]="UEFA Cup";
$competitions[]="UEFA Cup Winners Cup";
$competitions[]="Anglo-Italian Cup";
$competitions[]="Members Cup";
$competitions[]="War Cup";
$q="select max(date) as max_date,min(date) as min_date from seasonstats";
$qr=mysqli_query($ccppdbc, $q) or die($q.mysqli_error($ccppdbc));
$r=mysqli_fetch_object($qr);
$max_date=$r->max_date;
$max_dates=explode('-',$max_date);
$maxdate=$max_dates[0]+1;
$min_date=$r->min_date;
$min_dates=explode('-',$min_date);
$mindate=$min_dates[0];
$session_option="<select name=session class=jmp onchange='submit_form();'>";
$tr=0;
$records="<div class='mainBox box_inner--border secondary table-responsive'><h1 class='history_title'>Top goalscorers</h1>
<table class='table' cellspacing='0'>
			<tr class='ipsButtonBar ipsType_reset'>
<th width=8%>Season</th>
<th width=8%>Goals</th>
<th width=84%>Players</td></th>";
for($j=$mindate;$j<='2017';$j++)
{
	$value=substr($j+1,-2 );
	$session_player=array();
	$q="select t.playerid,t.goals,p.firstname,p.lastname,p.playerid from topscorers as t,players as p where t.goals is true and season='$j' and t.playerid=p.playerid";
	$qr=mysqli_query($ccppdbc,$q) or die($q.mysqli_error($ccppdbc));
	while($r=mysqli_fetch_object($qr))
	{
		$pid=$r->playerid;
		$goals=$r->goals;
		$firstname=utf8_encode($r->firstname);
		$lastname=utf8_encode($r->lastname);
		$session_player[$pid]="$firstname $lastname";
	}
	$total_record=count($session_player);
	$i=0;
	$palyerslink='';
	foreach($session_player as $var=>$val)
	{
		$i++;
		if($i==$total_record)
			$palyerslink.="<a href=/history/players?pid=$var title='view this in more detail'>$val</a>";
		else
			$palyerslink.="<a href=/history/players?pid=$var title='view this in more detail'>$val</a>, ";
		
	}
	if(!empty($session_player))
	{
		$tr++;
		$records.="<tr class=ftrow>
		<td class=border-right><a href='/history/browse?season=$j'>$j-$value</a></td>
		<td class=border-right>$goals</td>
		<td>$palyerslink</td></tr>";
	}
}

for($j='2018';$j<=$maxdate;$j++)
{
	$value=substr($j+1,-2 );
	//$val=$i;
	if($j==1890) continue;
	$session=$j;
	$session1=$session+1;
	$session_value=$session.'-08-01';
	$session1_value=$session1.'-06-31';
	$total_goals=0;
	$match_ids=array();
	$session_player=array();
	$q="select id from seasonstats where date >='$session_value' and date <='$session1_value' order by date";
	$qr=mysqli_query($ccppdbc, $q) or die($q.mysqli_error($ccppdbc));
	while($r=mysqli_fetch_object($qr))
	{
		$match_ids[]=$r->id;
	}
	if(!empty($match_ids))
	{
		$match_id_list=implode(',',$match_ids);
		$players_ids=array();
		$q="select distinct(_player_id) from seasonteamstats where matchid in ($match_id_list) order by lastname";
		$qr=mysqli_query($ccppdbc, $q) or die($mysqli_error($ccppdbc));
		while($r=mysqli_fetch_object($qr))
		{
			//$firstname=$r->firstname;
			//$lastname=$r->lastname;
			$playerid=$r->_player_id;
			$players_ids[$playerid]=$playerid;	
		}
		//$players_names=array_unique($players_names);
		$total_players=count($players_ids);
		$max_goal_season=0;
		foreach($players_ids as $var=>$val)
		{
			$total_goals=0;
			$total_penalties=0;
			$q="select * from seasonteamstats where _player_id='$val' and matchid in ($match_id_list) order by lastname";
			$qr=mysqli_query($ccppdbc, $q) or die($q.mysqli_error($ccppdbc));
			while($r=mysqli_fetch_object($qr))
			{
				$firstname=utf8_encode($r->firstname);
				$lastname=utf8_encode($r->lastname);
				$pid=$r->_player_id;
				if($session>=1915 and $session<=1918) 
				{
					$goals=$r->wargoals1;
					$penalties=$r->warpenalties1;
				}
				elseif($session>=1939 and $session<=1945)
				{
					$goals=$r->wargoals;
					$penalties=$r->warpenalties;				}
				else
				{
					$goals=$r->goals;
					$penalties=$r->penalties;
				}
				$total_goals+=$goals+$penalties;
			}
			if($max_goal_season==$total_goals)
			{
				$session_player[$pid]="$firstname $lastname";
			}
			else if($max_goal_season<$total_goals)
			{
				$session_player=array();
				$max_goal_season=$total_goals;
				$session_player[$pid]="$firstname $lastname";
			}
			
		}
		
	}
	$total_record=count($session_player);
	$i=0;
	$palyerslink="";
	foreach($session_player as $var=>$val)
	{
		$i++;
		if($i==$total_record)
			$palyerslink.="<a href='/history/players?pid=$var' title='view this in more detail'>$val</a>";
		else
			$palyerslink.="<a href='/history/players?pid=$var' title='view this in more detail'>$val</a>, ";
		
	}
	if(!empty($session_player))
	{
		$tr++;
		$records.="<tr class=ftrow>
		            <td class=border-right><a href='/history/browse?season=$j'>$j-$value</a></td>
		            <td class=border-right>$max_goal_season</td>
		            <td>$palyerslink</td>
		            </tr>";
	}
}
$records.="</table></div>";
echo $records;
?>

 

Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578481
Share on other sites

for($j=$mindate;$j<='2017';$j++)
{

That's what you need to change.

It's currently counting from $mindate to 2017 by adding one to $j (that's what $j++ means) each time. You want that to instead count from 2019 to $mindate by subtracting one from $j (that would be $j--) each time.

When you have that working, why 2019 specifically? Is it because that was last year? Since it says 2017 now, does that mean someone forgot to update it last year to say 2018? If you want the year to be dependent on the current year then you can have PHP do that automatically instead of having to edit the script...

Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578482
Share on other sites

Anytime I change that piece of code the page crashes. Probably as I don't know how it should be

2017 doesn't matter, it still works for years after that. Basically all data up for 2017 is stored in the database, but everything after is generated. I did that mainly to save page times.

Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578484
Share on other sites

The syntax of a for loop is

for (<initialization>; <condition to check>; <action to take on each loop>) {
	...
}

For you,

  • The initialization would be starting the $j variable at 2017
  • The condition to check is that $j is greater than or equal to (since it will be counting down) $mindate
  • The action is to decrement (--) $j
Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578489
Share on other sites

This summarises a section of your code ...

for($j='2018';$j<=$maxdate;$j++) {
    $q="select id from seasonstats where date >='$session_value' and date <='$session1_value' order by date";
    while($r=mysqli_fetch_object($qr)) {
        $q="select distinct(_player_id) from seasonteamstats where matchid in ($match_id_list) order by lastname";
        while($r=mysqli_fetch_object($qr)) {
            foreach($players_ids as $var=>$val) {
                $q="select * from seasonteamstats where _player_id='$val' and matchid in ($match_id_list) order by lastname";
            }
        }
    }
}

Do you find it takes a while to run?

You need to learn to use JOINs and you can do all this in one efficient query. The golden rule is "Don't run queries inside loops"

Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578494
Share on other sites

The page loads within a few seconds.

A few seconds is probably a long time?

$j is not used in your script and has no effect on any of the code following it which is why it hasn't been changed and why you haven't noticed, is this causing other problems though?

As Barand points out, really you should look change the query which would allow you to arrange the results in descending order as well as joining all the queries together in one.

Barand:

for($j='2018';$j<=$maxdate;$j++) {

Should that have been:

for($j='2018';$j<=$maxdate;$j--) {

Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578517
Share on other sites

6 minutes ago, Barand said:

I didn't say is was right - it's just what was in the code I was condensing to illustrate the nested loops.

Yeah, I wasn't trying to be clever, I wasn't sure if I'd missed something. I had intended to edit the post after clarification but I can't now, sorry.

Link to comment
https://forums.phpfreaks.com/topic/310861-change-the-order/#findComment-1578521
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.