php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.07.2006, 13:04  
Erfahrener Benutzer
 
Registriert seit: 10.06.2005
Beiträge: 254
matthros
Standard foreach in for schleife

Hallo, mein Problem ist das bei dem eintrag saison_rang_xx immer zuviel eingtragen wird, also jedes mal wenn die forschleife durchgeht werden die vereine, die eigentlich schon beim ersten mal dran gewesen wäre,
nochmal mitzugenommen, sie befinden sich somit vielfach in der
$vereinsname, so kommt es zu einem rang über 800, der eigentlich
nur für jede liga von 1 bis 16 gehen dürfte.

PHP-Code:
<?php
 
include("connect.inc.php");
require(
"config.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Unbenanntes Dokument</title>
</head>

<body>
</body>
</html>
<?php
    
// Fragt die aktuelle Saison ab(zB 1)
    
$sql_saison "SELECT saison FROM aktuelles";
    
$result_saison mysql_query($sql_saison) OR die(mysql_error());
    
$row_saison mysql_fetch_assoc($result_saison);
    
$aktuelle_saison $row_saison['saison'];
    
    
// fragt ab welche bzw. wieviele ligen schon existieren
    
$sql_ligenuebersicht "SELECT ligen FROM ligenuebersicht";
    
$result_ligenuebersicht mysql_query($sql_ligenuebersicht) OR die(mysql_error());
    
$num_ligenuebersicht mysql_num_rows($result_ligenuebersicht);

// Beginn der for-schleife, geht von 1 bis Anzahl der existierenden ligen durch
for ($i=1$i<=$num_ligenuebersicht$i++) {
    
// Assoziativ Array damit ich bei jedem schleifendruchgang mit der untenstehenden deklaration der
    // Variable $ligendurchgang = $ligen[$i] die entsprechende liga bekomme indem an der stelle $i das entsprechende
    // Array augerufen wird, bei Durchlauf 1 die liga1 usw.
    
$ligen[1] = "liga1"$ligen[2] = "liga2/1"$ligen[3] = "liga2/2"$ligen[4] = "liga3/1"$ligen[5] = "liga3/2"$ligen[6] = "liga3/3"$ligen[7] = "liga3/4"$ligen[8] = "liga4/1"; ; $ligen[9] = "liga4/2"$ligen[10] = "liga4/3"$ligen[11] = "liga4/4";
    
$ligendurchgang $ligen[$i];


    
// Abfrage von vereinsdaten und sortierung, damit ein Ranglistenprofil entsteht
    
$sql "SELECT vereinsname,liga,tore,gegentore,diff,punkte FROM vereine WHERE liga='$ligendurchgang' ORDER BY punkte DESC, diff DESC,     tore DESC, vereinsname ASC;";
    
$result mysql_query($sql) OR die(mysql_error());
    
// While-schleife in der ein array mit key vereinsname und value liga entsteht
    
while($row mysql_fetch_assoc($result)) {
            
        
$vereine[$row['vereinsname']] = $row['liga'];

    }
    
// Foreach-schleife mit der ich die Daten in die Tabelle ligahistorie schreibe
    
foreach($vereine as $vereinsname => $liga) {
        
        echo 
$vereinsname;
        
// mit diesem block ermittle ich den Rang innerhalb der Liga
        
$i2++;
        if(
$row[0]==$vereinsname) {
            
$rang $i2;
           break;
    
        }
        
$saison "Saison $aktuelle_saison";
        
// UPDATE der Daten in table ligahistorie
        
$query "UPDATE ligahistorie SET saison_$aktuelle_saison='$saison',     saison_rang_$aktuelle_saison='$i2',saison_liga_$aktuelle_saison='$liga' WHERE verein='$vereinsname'"
        
mysql_query($query) or die ("MySQL-Fehler mit $query
mysql_error());
        
    }
    
//Ende der forschleife

?>
matthros ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.07.2006, 13:53  
Gast
 
Beiträge: n/a
Standard

Notwendige Vorarbeiten:
Code konsequent einrücken.
Code in übersichtliche (logische) Blöcke einteilen.
Sinn und Zweck der einzelnen Blöcke beschreiben.

Gespannt bin ich bespw auf die Erläuterungen zu
Zitat:
for ($i=1; $i<=$num_ligenuebersicht; $i++) {
$ligen[1] = "liga1"; $ligen[2] = "liga2/1"; $ligen[3] = "liga2/2"; $ligen[4] = "liga3/1"; $ligen[5] = "liga3/2"; $ligen[6] = "liga3/3"; $ligen[7] = "liga3/4"; $ligen[8] = "liga4/1"; ; $ligen[9] = "liga4/2"; $ligen[10] = "liga4/3"; $ligen[11] = "liga4/4";
aber auch noch einiger anderer Dinge
 
Alt 25.07.2006, 13:56  
Erfahrener Benutzer
 
Registriert seit: 10.06.2005
Beiträge: 254
matthros
Standard

dieses array ist notwendig um bei den einzelnen
schleifendurchläufen jeweils nur die vereine der abgefragten
ligen zu bekommen.
matthros ist offline  
Alt 25.07.2006, 14:39  
Erfahrener Benutzer
 
Registriert seit: 10.06.2005
Beiträge: 254
matthros
Standard

sagt mir doch einfach warum die variable $vereinsname immer wieder mit den alten werten auch noch gefüllt wird
matthros ist offline  
Alt 25.07.2006, 14:40  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Bruchpilot
Notwendige Vorarbeiten:
Code konsequent einrücken.
Code in übersichtliche (logische) Blöcke einteilen.
Sinn und Zweck der einzelnen Blöcke beschreiben.
 
Alt 25.07.2006, 14:59  
Erfahrener Benutzer
 
Registriert seit: 10.06.2005
Beiträge: 254
matthros
Standard

so, hab jetzt bisschen eingerückt und kommentiert
matthros ist offline  
Alt 25.07.2006, 15:52  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
<?php
require 'connect.inc.php';
require 
'config.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>Unbenanntes Dokument</title>
    </head>
    <body>
<?php
// Fragt die aktuelle Saison ab(zB 1)
/* eine Tabelle mit einem einzigen Feld und einem einzigen Datensatz? */
$sql_saison "SELECT saison FROM aktuelles";
$result_saison mysql_query($sql_saison) OR die(mysql_error());
$row_saison mysql_fetch_assoc($result_saison);
$aktuelle_saison $row_saison['saison'];

// fragt ab welche bzw. wieviele ligen schon existieren
/* Dafür gibt es Count() , [url]http://www.w3schools.com/sql/func_count_ast.asp[/url] */
$sql_ligenuebersicht "SELECT ligen FROM ligenuebersicht";
$result_ligenuebersicht mysql_query($sql_ligenuebersicht) OR die(mysql_error());
$num_ligenuebersicht mysql_num_rows($result_ligenuebersicht);

// Beginn der for-schleife, geht von 1 bis Anzahl der existierenden ligen durch
for ($i=1$i<=$num_ligenuebersicht$i++) {
    
// Assoziativ Array damit ich bei jedem schleifendruchgang mit der untenstehenden deklaration der
    // Variable $ligendurchgang = $ligen[$i] die entsprechende liga bekomme indem an der stelle $i das entsprechende
    // Array augerufen wird, bei Durchlauf 1 die liga1 usw.
    /* Warum werden den ligen hier und nicht schon in der Datenbank die Namen zugeordnet?
    Oder eine andere id?
    Wie auch immer. Das Feld auf diese Weise innerhalb der Schleife
    immer und immer wieder mit festen Werten zu füllen, ist mindestens unbedacht.
    */
    
$ligen[1] = "liga1"$ligen[2] = "liga2/1"$ligen[3] = "liga2/2"$ligen[4] = "liga3/1"$ligen[5] = "liga3/2"$ligen[6] = "liga3/3";
    
$ligen[7] = "liga3/4"$ligen[8] = "liga4/1"; ; $ligen[9] = "liga4/2"$ligen[10] = "liga4/3"$ligen[11] = "liga4/4";
    
$ligendurchgang $ligen[$i];


    
// Abfrage von vereinsdaten und sortierung, damit ein Ranglistenprofil entsteht
    /* Dann könnte nämlich der größte Teil es Skripts bis hierher als eine relativ einfache sql Abfrage geschrieben werden
        [url]http://www.w3schools.com/sql/sql_join.asp[/url]
    */
    
$sql "SELECT
            vereinsname,liga,tore,gegentore,diff,punkte
        FROM
            vereine
        WHERE
            liga='$ligendurchgang'
        ORDER BY
            punkte DESC,
            diff DESC,
            tore DESC,
            vereinsname ASC;"
;
    
$result mysql_query($sql) OR die(mysql_error());
    
    
// While-schleife in der ein array mit key vereinsname und value liga entsteht
    /* Wozu, wenn Du das Feld gleich im Anschluss unverändert ausgeben läßt? */
    
while($row mysql_fetch_assoc($result)) {
        
$vereine[$row['vereinsname']] = $row['liga'];
    }

    
// Foreach-schleife mit der ich die Daten in die Tabelle ligahistorie schreibe
    
foreach($vereine as $vereinsname => $liga) {
        echo 
$vereinsname;
        
// mit diesem block ermittle ich den Rang innerhalb der Liga
        
$i2++;
        if(
$row[0]==$vereinsname) {
            
$rang $i2;
            break;
        }
        
$saison "Saison $aktuelle_saison";

        
// UPDATE der Daten in table ligahistorie
        
$query "UPDATE
                ligahistorie
            SET
                saison_$aktuelle_saison='$saison',
                saison_rang_$aktuelle_saison='$i2',
                saison_liga_$aktuelle_saison='$liga'
            WHERE
                verein='$vereinsname'"
;
        
mysql_query($query) or die ("MySQL-Fehler mit $query
mysql_error());
    }
//Ende der forschleife
?>
    </body>
</html>
 
Alt 25.07.2006, 18:54  
Erfahrener Benutzer
 
Registriert seit: 10.06.2005
Beiträge: 254
matthros
Standard

lasse jetzt nach jedem durchlauf das array mit unset löschen,
jetzt kommt nur jeder verein ein mal vor,
leider wird jetzt gleich durchnummeriert, und nicht bei jeder liga
bei 1 angefangen.
matthros ist offline  
Alt 25.07.2006, 19:40  
Erfahrener Benutzer
 
Registriert seit: 10.06.2005
Beiträge: 254
matthros
Standard

habs geschafft, $i2 nach jedem durchlauf auf 0 zurückgesetzt
matthros ist offline  
Alt 25.07.2006, 20:17  
Gast
 
Beiträge: n/a
Standard

Warum fragst Du eigentlich, wenn Du dann ...irgendwas machst?
Ich hab mir jetzt jedenfalls notiert, in Dein Wirrwarr garnicht erst reinzugucken.
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eindimensionales Array ohne index per foreach erstellen phpbeginner PHP Tipps 2008 4 10.03.2008 14:18
foreach equivalent aber mit Datenmanipulation Matt PHP Tipps 2008 2 26.02.2008 16:47
Lambda-Funktion und array_map/_filter gegen foreach KingCrunch PHP Tipps 2007 5 29.04.2007 10:28
foreach verändert die werte des arrays das durchlaufen wird Crypi PHP Tipps 2007 5 10.01.2007 08:24
foreach mit zwei übergebenen Arrays ? [erledigt] horstenpeter PHP Tipps 2006 1 03.09.2006 16:47
foreach -> key snatch-ic PHP Tipps 2006 3 18.08.2006 11:58
foreach() wird einmal zu oft durchlaufen Dilandau PHP Tipps 2006 15 07.07.2006 17:14
foreach geht aber abfrage nicht... GELight PHP Tipps 2006 8 01.03.2006 23:53
durch foreach auch normalen String durchlaufen lassen PHP Tipps 2006 7 14.01.2006 13:20
ProgressClass zeigt Fortschritte in foreach nicht a PHP Tipps 2006 9 13.01.2006 00:11
$_FILES mit foreach() PHP Tipps 2005-2 5 20.10.2005 10:27
foreach: Fehler beim ersten Aufruf mristau2k5 PHP Tipps 2005-2 3 15.08.2005 23:14
foreach probleme PHP Tipps 2005 7 26.04.2005 17:54
foreach: Übergabe by reference Stümper PHP Tipps 2005 2 15.02.2005 15:35
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql select from bundesliga torverhaeltnis

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.