PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum zählt es nicht hoch?


Alhambra
29.10.2004, 09:43:36
Hallo Experten :-)

befasse mich noch nicht so lange mit arrays, finde auch nichts wo man es vernünftig lernen kann.
Deshalb hier mein Problem:
Zu Übungszwecken will ich lediglich Tabellenplätze jedes Vereins in die DB schreiben.

So sieht es immo aus:

[php]
$abfrage = "
SELECT * FROM Deutschland Where Saison = '2' Order BY Punkte DESC,Toreplus-Toreminus DESC, Toreplus DESC,Quoteplus-Quoteminus DESC, Quoteplus DESC";

$resID = mysql_query($abfrage, $linkID);

if (!$resID) die("$abfrage");
$x=1;


while ($zeile = mysql_fetch_array($resID))
{



.
.
.
echo $x ;$x++;
.
.
.
$ax = $zeile["Verein"];
$tab[$ax]["Spieler"] = $zeile["Spieler"];
}
while(list($dsname,$dswert) = each($tab))
{
// Der Key wird ausgegeben
echo "$dsname : ";

// Eintrag in Datenbank

while(list($name,$wert) = each($dswert))
for ($x=1; $x<19; $x++) {
echo $x;
{

$eintrag = "Update Deutschland SET Platz = $x Where Verein= '$dsname' AND Saison = '2'";
$resID = mysql_query($eintrag, $linkID);
}}
.
.
[php]

Nun es wird eingetragen , aber alles mit 18. Habe schon verschiedene Varianten ausprobiert. Wo liegt mein Denkfehler? Oder ist der Ansatz völlig falsch?

Alhambra

c4
29.10.2004, 09:45:31
Erkläre mir mal bitte Zeile für Zeile, was das Ding machen soll: while(list($name,$wert) = each($dswert))
for ($x=1; $x<19; $x++) {
echo $x;
{

$eintrag = "Update Deutschland SET Platz = $x Where Verein= '$dsname' AND Saison = '2'";
$resID = mysql_query($eintrag, $linkID);
}}

Alhambra
29.10.2004, 10:14:34
Original geschrieben von _c_4_
Erkläre mir mal bitte Zeile für Zeile, was das Ding machen soll: while(list($name,$wert) = each($dswert))
for ($x=1; $x<19; $x++) {
echo $x;
{

$eintrag = "Update Deutschland SET Platz = $x Where Verein= '$dsname' AND Saison = '2'";
$resID = mysql_query($eintrag, $linkID);
}}


Nun vorab dieses echo $x habe ich nur reingeschreiben um zu sehen ob überhaupt was passiert.

Nun die Tabellenplätze werden weiter oben ja durch $x automatisch vergeben. Nun möchte ich dieses x aber auch in der DB haben damit ich sie an anderer Stelle auch benutzen kann.
im Moment zeigt echo $x hinter jedem Verein die Zahlen 1-18.

Al

xabbuh
29.10.2004, 10:20:46
while(list($name,$wert) = each($dswert)) // <- hier fehlt eine geschweifte Klammer
for ($x=1; $x<19; $x++) {
echo $x;
{ // <- was soll die geschweifte klammer hier?

$eintrag = "Update Deutschland SET Platz = $x Where Verein= '$dsname' AND Saison = '2'"; // <- du solltest Singlequotes schon konsequent durchführen (Platz = '$x')
$resID = mysql_query($eintrag, $linkID);
}}

c4
29.10.2004, 10:24:53
@xabbuh, ich hatte diese Klammerkonstruktion auch nicht kapiert und probiert:
1. Es klappt!
2. Schaut man es sich genauer an, erkennt man auch, dass das okay ist.

"du solltest Singlequotes schon konsequent durchführen (Platz = '$x')" Wieso das denn? Wenn es eine Zahl ist und immer eine Zahl sein wird, dann ist es doch absolut egal.

@Alhambra: Gib mal bitte ein print_r($dswert) ein und poste (Auszüge) der Ausgabe (die, die Du im Quelltext im Browser siehst!!), vielleicht hilft das weiter. Bisher sehe ich hier nicht durch.

Alhambra
29.10.2004, 10:47:05
Also,

$eintrag = "Update Deutschland SET Platz = '$x' Where Verein= '$dsname' AND Saison = '2'";
$resID = mysql_query($eintrag, $linkID);
}}
echo "<p>";
}

print_r($dswert);


print_r zeigt gar nichts an. Das echo "$dsname : "; gibt die Vereinsnamen brav in der gewünschten Reiehnfolge aus.

Al

Alhambra
29.10.2004, 10:49:30
Achso, http://www.weltliga.org/Vereinsligen/Auswertung.php

Ist alles zu sehen

c4
29.10.2004, 10:56:36
Jetzt sehe ich ja überhaupt nicht mehr durch.

each() (http://php.net/each) holt den aktuellen Key und Value aus einem Array. Bei Dir ist $dswert aber eine Zeichenkette, while(list($name,$wert) = each($dswert)) wird also vermutlich nie erfüllt sein.

Weiter oben machst Du es richtig: while(list($dsname,$dswert) = each($tab))

Warum machst Du dann also noch eine (sinnlose) while-Schleife? Nutze doch einfach die Werte aus der Ersten.

Wusstest Du eigentlich, dass Du bei UPDATE auch hochzählen kannst? Beispiel:
UPDATE tabelle SET feld=feld+1 WHERE name='wert';
Vielleicht hilft Dir das ja, Dein Chaos zu entwirren.




PS: http://validator.w3.org/check?uri=http://www.weltliga.org/Vereinsligen/Auswertung.php ...

Alhambra
29.10.2004, 11:03:19
Habs befürchtet das ich da völliges Chaos habe :-(

Erst mal deine Anregung testen, erst mal danke bis hierher.

Al

Alhambra
29.10.2004, 11:34:24
So neuer Versuch, habs wahrscheinlich zu kompliziert erklärt.
Habe nu alles unwichtige und alles was ich nicht verstehe erstmal rausgeschmissen:

$abfrage = "
SELECT * FROM Deutschland Where Saison = '2' Order BY Punkte DESC,Toreplus-Toreminus DESC, Toreplus DESC,Quoteplus-Quoteminus DESC, Quoteplus DESC";

$resID = mysql_query($abfrage, $linkID);

if (!$resID) die("$abfrage");
$x=1;


while ($zeile = mysql_fetch_array($resID))
{


?>

<TR>

<TD ><font color="#0080FF" size="-2" face="Geneva, Arial, Helvetica, sans-serif"><b><?php echo $x ;$x++;?></b> // Hier wird der Tabellenplatz durchgezählt </font></TD>

<TD ><font size="-2" face="Geneva, Arial, Helvetica, sans-serif"><b><?php echo($zeile[Verein])?></b>
</font></TD>
</TR>

<?php }

$eintrag = "Update Deutschland SET Platz = '$x' Where Verein= '$zeile[Verein]' AND Saison = '2'";
$resID = mysql_query($eintrag, $linkID);//Und hier soll halt der angezeigte Tabellenplatz für jeden Verein in die DB geschrieben werden



Hoffe so ist die Problematik die ich habe klarer.

Al

c4
29.10.2004, 11:40:33
Jap, ich glaube, nun könnte ich es kapiert haben!

Mach mal aus dem: $resID = mysql_query($eintrag, $linkID); Das: $resID = mysql_query($eintrag, $linkID) or die(mysql_error($linkID)); Wenn er was ausgibt (auch in den Quelltext im Browser schauen), dann zeig uns das mal.

Alhambra
29.10.2004, 11:54:48
Nein er gibt keine Fehlermeldung aus.

c4
29.10.2004, 11:58:28
Was hältst Du eigentlich von der Idee, das mysql_query() mit in die while()-Schleife zu packen?

Alhambra
29.10.2004, 12:41:27
heute Abend mal schauen,
erstmal zur Arbeit.

Al

Alhambra
31.10.2004, 08:36:24
So, habe ein wenig drüber nachgedacht, das mit er While-Schleife funzt nicht.
Habe jetzt folgendes gemacht:


<?php $abfrage = "
SELECT * FROM Deutschland Where Saison = '2' Order BY Punkte DESC,Toreplus-Toreminus DESC, Toreplus DESC,Quoteplus-Quoteminus DESC, Quoteplus DESC";

$resID = mysql_query($abfrage, $linkID);

if (!$resID) die("$abfrage");
$x=1;


while ($zeile = mysql_fetch_array($resID))
{


?>

<TR>

<TD ><font color="#0080FF" size="-2" face="Geneva, Arial, Helvetica, sans-serif"><b><?php echo $x ;$x++;?></b>
</font></TD>

<TD ><font size="-2" face="Geneva, Arial, Helvetica, sans-serif"><b><?php echo($zeile[Verein])?></b>
</font></TD>
</TR>

<?php

for ($y = 1; $y <= 18; $y++) {







$eintrag = "Update Deutschland SET Platz = '$y' Where Verein= '$zeile[Verein]' AND Saison = '2' "; }}
$resID = mysql_query($eintrag, $linkID) or die(mysql_error($linkID));

print_r ($eintrag);



print_r zeigt jetzt den letzten Datensatz an zwar richtig aber das wars auch.
Nu weiss ich echt nicht mehr weiter.

Al

xabbuh
31.10.2004, 12:11:10
Die Variable $eintrag wird bei jedem Durchlauf der Schleife überschrieben. Du musst also sowohl mysq_query() als auch print_r() mit in die Schleife packen, damit jedes Query ausgeführt wird und du auch jedes Query anzeigen lassen kannst.

Alhambra
31.10.2004, 12:35:35
Gut wenn ich das so änder:



for ($y = 1; $y <= 18; $y++) {

$eintrag = "Update Deutschland SET Platz = '$y' Where Verein= '$zeile[Verein]' AND Saison = '2' ";
$resID = mysql_query($eintrag, $linkID) or die(mysql_error($linkID));

print_r ($eintrag);}}




wird Platz jeweils um eins hochgezählt, aber Verein bleibt auf den 1. Verein der Tabelle stehen und durchläuft somit nicht alle 18 Vereine, denen ja nach der Sortierung ein y zugewiesen werden soll.

Al

Alhambra
31.10.2004, 12:49:13
Mach ich es so:



<?php }

for ($y = 1; $y <= 18; $y++) {

$eintrag = "Update Deutschland SET Platz = '$y' Where Verein= '$zeile[Verein]' AND Saison = '2' ";
$resID = mysql_query($eintrag, $linkID) or die(mysql_error($linkID));

print_r ($eintrag);}



zählt er y auch hoch bei Platz aber Verein bleibt leer.
Anscheinend fehlt mir da was grundlegendes.

AL

xabbuh
31.10.2004, 17:37:35
Hi,
mal ein Vorschlag von mir. Kurz und schmerzlos:

<?php
$sql = "SELECT
*
FROM
Deutschland
WHERE
Saison = '2'
ORDER BY
Punkte DESC,
Toreplus-Toreminus DESC,
Toreplus DESC,
Quoteplus-Quoteminus DESC,
Quoteplus DESC";
$result = mysql_query($sql) or die(mysql_error());
$i = 1;
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

$sql = "UPDATE
Deutschland
SET
Platz = '$i'
WHERE
Verein = '{$row['Verein']}' AND
Saison = 2";
mysql_query($sql);
$i++;
}
?>


Wobei ich nicht weiß, warum du die Platzierung in der Datenbank speicherst.
Auch halte ich es nicht unbedingt für sinnvoll, dass du für jedes Land eine eigene Tabelle anlegst. Besser wäre es eine Tabelle anzulegen, in der alle Länder gespeichert werden und dann bei jedem Verein nur die id dieses Landes abzuspeichern.

Alhambra
01.11.2004, 09:09:28
So, erst mal danke es klappt.
Nun mit den Ländern hast du natürlich recht. Werde ich wohl auch noch ändern.
Hatte jetzt nur die Spielpläne aller 40 Ligen in eine Tabelle gepackt.
Aber klar warum nicht auch die Ligen an sich zusammenpacken.
Tu mich manchmal halt etwas schwer das naheliegende zu sehen :-)
Aber ich gebe nicht auf zu lernen.

Al

xabbuh
01.11.2004, 10:21:47
Eine Frage hätte ich da noch: Wofür trägst du überhaupt die Plätze der Vereine in der Datenbank ein?

Alhambra
02.11.2004, 08:41:27
Nun, da ich weder mit Sessions oder sonstigem Log-in arbeite,
werden die Platzierungen für künftige Trainerseiten gebraucht, oder auch anderen Liga-Info Seiten.So zumindest die Planung.

Al

xabbuh
02.11.2004, 10:23:45
Würde es nicht reichen, die Sortierung erst dann vorzunehmen, wenn sie auch benötigt wird?

Alhambra
07.11.2004, 01:23:13
Nun, gebraucht wird sie ja direkt. Zum 1.1 geht die Liga wieder los, bis dahin muss alles stehen auch das zukünftige. Ausserdem diente es ja auch dazu mich näher mit arrays zu befassen.

Viel schwieriger für mich wird es werden eine Volautomatik hin zu bekommen.
Also nur noch reale Ergebnisse eingeben, Knopf drücken und fertig :-)

Al

xabbuh
07.11.2004, 12:30:27
Naja, ich habe das beim Erstellen von Tabellen so gemacht, dass ich für jeden Verein Punkte, Tore etc. in einem Array gespeichert habe und anschließend mit array_multisort() (http://www.php.net/array_multisort) die Sortierung vorgenommen habe.

Zwei Links dazu:
Tipps? Ideen? Spielplan = Tabelle (http://www.selfphp.info/forum/showthread.php?threadid=7975&highlight=Tabelle)
Fußballtabellen - Problem mit Sortierung (http://www.selfphp.info/forum/showthread.php?threadid=7836&highlight=Tabelle)

Alhambra
10.11.2004, 08:38:26
Danke xabbuh,
hatte diese Beiträge gar nicht gefunden.
Wenn das bei meinem Spiel so 'einfach' wäre :-)

Für die Tore ist bei mir die Tippquote wichtig, die sich aus realen Tippquoten von Wettbüros ergibt.
Die Addition der Quoten ergibt dann die geschossenen Tore. Die ermittlung habe ich schon aber auch da tüftel ich an die Übergabe in eine Datenbank.
Aber das passt nun nicht mehr hier in das Thread oder?

Al