Kom ihåg mig?
Home Menu

Menu


sortering av array (php)

 
Ämnesverktyg Visningsalternativ
Oläst 2009-12-09, 09:39 #1
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Standard sortering av array (php)

Hejsan!
bygger just nu en ligatabell för fotbollslag i php och har kommit till den parten där array'en måste sorteras.

jag har en tabell för alla lagen och en tabell för matcherna i databasen!
efter all uträkning av poäng, vinster, förluster mm så byggs en array med för varje lag där all information som ska visas i tabellen är värdet, den ser ut så här:

PHP-kod:
$team_in_table = array (
'team' => $team['name'],
'played' => $total_played,
'wins' => $total_wins,
'draw' => $total_draw,
'loses' => $total_loses,
'skillnad' => $skillnad,
'points' => $total_points );
?> 
här är ett exempel på hur den blir
PHP-kod:
Array ( [team] => Arsenal [played] => [wins] => [draw] => [loses] => [skillnad] => -[points] => 
Nu är problemet med sorteringen.
Hur får jag listan att först sorteras efter poäng, sedan om 2 eller flera lag har lika många poäng så ska den sorteras efter målskillnad ('skillnad' i array) ?
har googlat men utan resultat.

kan även släppa hela koden som är gjord här:
PHP-kod:
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<?php 
$id 
$_GET['id'];
if(!isset(
$id)){
die(
"inget id"); }
 
$placement 0;
 echo 
'<table border="1"><th></th><th></th><th>SM</th><th>P</th>';
include
'../dbcon.php'
//hämtar ligan
$get_league mysql_query("SELECT * FROM sk_league WHERE id = '".$id."'");
if(
mysql_num_rows($get_league) == 0){
die(
"Ingen liga"); }
$league mysql_fetch_array($get_league);

$get_teams mysql_query("SELECT * FROM sk_team WHERE league = '".$id."'");
while(
$team mysql_fetch_array($get_teams)){

//hemma matcher!
$home_wins 0;
$home_draw 0;
$home_loses 0;
$home_goals 0;
$home_ins 0;
$get_home mysql_query("SELECT * FROM sk_matches WHERE home_id = '".$team['id']."'");
$count_home mysql_num_rows($get_home);
while(
$home mysql_fetch_array($get_home)){
$home_goals $home_goals $home['goals_home'];
$home_ins $home_ins $home['goals_away'];
if(
$home['goals_home'] > $home['goals_away']){
$home_wins $home_wins 1; } else if ($home['goals_home'] == $home['goals_away']){
$home_draw $home_draw 1; } else if ($home['goals_home'] < $home['goals_away']){
$home_loses $home_loses 1; }}

//borta matcher!
$away_wins 0;
$away_draw 0;
$away_loses 0;
$away_goals 0;
$away_ins 0;
$get_away mysql_query("SELECT * FROM sk_matches WHERE away_id = '".$team['id']."'");
$count_away mysql_num_rows($get_away);
while(
$away mysql_fetch_array($get_away)){
$away_ins $away_ins $away['goals_home'];
$away_goals $away_goals $away['goals_away'];
if(
$away['goals_away'] > $away['goals_home']){
$away_wins $away_wins 1; } else if ($away['goals_home'] == $away['goals_away']){
$away_draw $away_draw 1; } else if ($away['goals_away'] < $away['goals_home']){
$away_loses $away_loses 1; }}
//totala statistik
$total_played $count_home $count_away;
$total_wins $home_wins $away_wins;
$total_draw $home_draw $away_draw;
$total_loses $home_loses $away_loses;
$total_goals $home_goals $away_goals;
$total_ins $home_ins $away_ins;

//poäng
$wins_points $total_wins;
$draw_points $total_draw;
$total_points $wins_points $draw_points;

//poängskillnad
$skillnad $total_goals $total_ins;

$team_in_table = array (
'team' => $team['name'],
'played' => $total_played,
'wins' => $total_wins,
'draw' => $total_draw,
'loses' => $total_loses,
'skillnad' => $skillnad,
'points' => $total_points );
$placement $placement 1;
?>
<tr><td><?= $placement?></td><tD><?= $team_in_table['team']; ?></tD><td><?= $team_in_table['played']; ?></td><td><?= $team_in_table['points']; ?></td></tr>

<?
}


echo "</table>";
  ?>
jag vet, det är inte den bästa koden, kunde gjort det bättre.

tacksam för svar!
//Philip Andersson!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 11:59 #2
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Kolla här:

http://php.net/manual/en/function.array-multisort.php
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 13:24 #3
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
hnn hnn är inte uppkopplad
Banned
 
Reg.datum: Mar 2004
Inlägg: 2 587
Funderat på att skydda dig mot SQL Injections?
hnn är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 14:18 #4
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av hnn Visa inlägg
Funderat på att skydda dig mot SQL Injections?
Han skrev ju precis att koden inte var den bästa? De flesta gör det vid post men väldigt många glömmer bort att göra det när det gäller get.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 14:55 #5
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Citat:
Ursprungligen postat av tartareandesire Visa inlägg
Han skrev ju precis att koden inte var den bästa? De flesta gör det vid post men väldigt många glömmer bort att göra det när det gäller get.
ursäkta men denna ska inte visas, detta är bara ett test och hela sidan ska inte visas, den ska ingå i en annan sida via include, kör annars alltid
Kod:
if(mysql_num_rows($result) == 0){
die(); }

jag tyckte jag kollade på multisort tidigare, får väll ta en extra titt då tack!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 17:36 #6
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
Tror annars hnn tänkte på att du inte filtrerade $_GET['id'] nånstans.
htmlspecialchars() är en fin funktion för det.

edit: Se Clarence post nedan, htmlspecialchars är INTE en fin funktion

Senast redigerad av crazzy den 2009-12-09 klockan 19:39
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 18:26 #7
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Clarence Clarence är inte uppkopplad
Administratör
 
Reg.datum: Jan 2003
Inlägg: 1 974
Citat:
Ursprungligen postat av crazzy Visa inlägg
Tror annars hnn tänkte på att du inte filtrerade $_GET['id'] nånstans.
htmlspecialchars() är en fin funktion för det.
Det är en funktion du kan använda för input/data som ska visas i t ex HTML. För input till (my)SQL bör du INTE använda den. Har du inte med ENT_QUOTES så escapar den t ex inte single quotes, vilket är den absolut vanligaste ingångsvägen till SQL injections. Och även om du sätter ENT_QUOTES så är den inte att anses som säker pga andra ingångsvägar.

Ett säkert kort är att använda databasmotorns egna escapes, t ex mysql_real_escape_string()/pg_escape_string(). Ett annat att använda prepared statements (se t ex mysqli_prepare).
Clarence är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 19:39 #8
crazzys avatar
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2007
Inlägg: 1 089
crazzy crazzy är inte uppkopplad
Har WN som tidsfördriv
crazzys avatar
 
Reg.datum: Aug 2007
Inlägg: 1 089
Det var något nytt för mej, tack för det, skall genast byta funktion för filtrering.
crazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 21:34 #9
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
Citat:
Ursprungligen postat av Clarence Visa inlägg
Det är en funktion du kan använda för input/data som ska visas i t ex HTML. För input till (my)SQL bör du INTE använda den. Har du inte med ENT_QUOTES så escapar den t ex inte single quotes, vilket är den absolut vanligaste ingångsvägen till SQL injections. Och även om du sätter ENT_QUOTES så är den inte att anses som säker pga andra ingångsvägar.

Ett säkert kort är att använda databasmotorns egna escapes, t ex mysql_real_escape_string()/pg_escape_string(). Ett annat att använda prepared statements (se t ex mysqli_prepare).
själv kör jag mysql_real_escape_string() vid alla input till databas.
men dem andra har jag inte stött på tidigare, får väll läsa mer om det då tackar!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-09, 23:22 #10
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av youheardit Visa inlägg
själv kör jag mysql_real_escape_string() vid alla input till databas.
men dem andra har jag inte stött på tidigare, får väll läsa mer om det då tackar!
Det var just det du inte gjorde i det här fallet Därav att det kom upp.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 09:28.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017