Fehlersuche: While schleife gibt nur ein statt neun Ergebnisse aus

Xiaodeguo

Mitglied
Hallo

an dieser Stelle nochmal ein dickes Dankeschön an alle die mir bisher sehr geholfen haben.
Leider ist nun wieder ein Fehler / Problem aufgetaucht an dem ich nicht weiterkomme.

Wie vieleicht schon bekannt arbeite ich an einem Fussballtipp Spiel,
bei dem folgenden Script soll das Ergebniss eigentlich eine Tabelle sein die folgende Informationen enthält:
Partien des gewählten Spieltages, Ergebnis der Partien und Tipps aller Spieler zu den Partien.

So weit geht es auch, nur zeigt er mir leider nur die erste Partie an, mit den gewünschten Zusatzinformationen.

Wäre schön wenn mir jemand den Fehler zeigen könnte, oder mir einen Tipp zur Fehlerfindung benennt.

PHP:
<table style="font-size: smaller;"><tr><td width="150">Partie</td><td width="80">Ergebnis</td>
<?php
include ('config.php');
error_reporting(E_ALL);    
$db_link = @mysql_connect($dbhost, $dbusername, $dbpasswort);  
mysql_select_db($dbname); 

$sql = "SELECT
            *
        FROM
            ".$tabpartien." AS partien,
            ".$tabtipps." AS tipps
        WHERE
            partien.spieltag = '12'
            AND
            tipps.spieltag = '12'
            AND
            partien.ID_partien = tipps.ID_partien
        GROUP by
            tipps.k_spieler
        ORDER by
            tipps.ID_tipp DESC";


            /**
             * ALLE AKTUELLEN SPIELER AUFLISTEN
             */
            $result = mysql_query($sql);
            while ($spiel = mysql_fetch_object($result)){
    
            echo "<td width='80'>".$spiel->k_spieler."'s Tipp</td>";
            
            }
                echo "</tr>";
                /**
                 * SPIEL PLUS ERGEBNIS AUSLESEN
                 */
                $result = mysql_query($sql);
                while ($spiel = mysql_fetch_object($result)){
        
                echo "<tr><td>".$spiel->HT." / <br/>".$spiel->GT."</td><td>".$spiel->t_HT.":".$spiel->t_GT."</td>";
                
                        /**
                         *  DIE TIPPS ZUM SPIEL AUSGEBEN
                         */
                        
                        $result = mysql_query($sql);
                        while ($spiel = mysql_fetch_object($result)){
        
                        echo "<td>".$spiel->tore_HT.":".$spiel->tore_GT."</td>";
                        }}

        
$result = mysql_query($sql) OR              
die("Query: <pre>".$sql."</pre>\n".                  
"Fehler: ".mysql_error());
?>
</tr></table>

Herzlichen Dank
 
Wenn man ein MySQL-Ergebnis mehrmals durchgehen will, muß es idR resetet werden.
Code:
mysql_data_seek($MySQL_Result, 0);
http://php.net/manual/de/function.mysql-data-seek.php

Bei Dir also das erste
PHP:
$result = mysql_query($sql);
lassen und in den verschachtelten Schleifen jenes durch
PHP:
mysql_data_seek($result, 0);
ersetzen.

An Deiner Stelle würd ich vielleicht überlegen, das Result erstmal in ein Array/Objekt zu überführen, und dann jenes Gerüst wie von Dir angedacht zu durchlaufen.

mfg chmee
 
Zuletzt bearbeitet:
Danke für deine schnelle Antwort,
ich habe die Änderungen vorgenommen. Leider bleibt das Ergebnis das selbe.

Du schreibst ich soll die Daten erst in ein Object / Array übertragen, tue ich das nicht in jeder schleife?
PHP:
$result = mysql_query($sql);
            while ($spiel = mysql_fetch_object($result)){

Wie gesagt die Problematik ist wie gesagt das er mir nur für die erste Partie alles richtig ausgibt, dann Schleife wohl aufhört. Wenn ich nun Abfrage wieviele Reihen und Felder im Result sind, gibt er mir 3 Reihen und 19 Felder aus. Die 19 ist richtig, bei den reihen müsste es aber 27 sein.

Kann es sein das die Problematik bei "Group by k_spieler" liegt ?
Nehme ich das weg, gibt er mir alle Tipps raus, aber nicht unter einem Spieler sortiert sondern nebeneinander weg, siehe Anhang.

Naja wie gesagt aktuell habe ich keine Idee, belese mich mal weiter, iwie werde ich/wir schon eine Lösung finden. Danke euch
 

Anhänge

  • bltpp 002.jpg
    bltpp 002.jpg
    27,1 KB · Aufrufe: 22
Hallo Leute,

ich komme leider wirklich nicht weiter. Egal was ich mit meinen kleinen Wissen versuche,
es geht nicht. Nun hoffe ich das mir vieleicht doch noch einer von euch helfen kann. Dafür möchte ich euch gerne folgende Informationen liefern:

Ich greife auf zwei Tabellen zu: $tabtipps und $tabpartien

$tabtipps: hier werden alle Tipps der Spieler zu den einzelnen Partien gespeichert.
Wichtig für diesen Fall sind folgende Spalten:
1. ID_partien = entspricht der Partie ID in der $tabpartien Tabelle
2. spieltag = Anwelchem Spieltag findet die Partiestatt, wird hier gespeichert
3. k_spieler = ist der Benutzername des Spielers der den Tipp abgegeben hat
4. tore_HT = Die Anzahl der Tore die laut Tipp des Spielers das Heimteam schießt
5. tore_GT = Die Anzahl der Tore die laut Tipp des Spielers das Gastteam schießt

$tabpartien: hier werden alle Partien der einzelnen Spieltag gespeichert.
Wichtig für diesen Fall sind folgende Spalten:
1. ID_partien = ID der partien findet man auch in $tabtipps wieder
2. spieltag = entspricht auch der Angabe in $tabtipps
3. HT = Heimteam
4. GT = Gastteam
5. t_HT = Tore Heimteam (Ergebnis)
6. t_GT = Tore Gastteam (Ergebnis)

So mit all diesen Daten wünsche ich mir nun das eine Tabelle ausgegeben wird, in der folgende Daten enthalten sind:

Spieler/PartienSpiel 1Spiel 2Spiel 3Spiel 4Spiel 5Spiel 6Spiel 7Spiel 8Spiel 9
Spieler 1Tipp 1Tipp 2Tipp 3Tipp 4Tipp 5Tipp 6Tipp 7Tipp 8Tipp 9
Spieler 2Tipp 1Tipp 2Tipp 3Tipp 4Tipp 5Tipp 6Tipp 7Tipp 8Tipp 9
Spieler 3Tipp 1Tipp 2Tipp 3Tipp 4Tipp 5Tipp 6Tipp 7Tipp 8Tipp 9

Die Auswahl des entsprechenden Spieltages erfolgt über ein Formular mit Dropdownauswahl (Man mag es nicht glauben, aber das kann ich schreiben), dann wird für alle Spieler die Tipps abgegeben haben die oben gezeigte Tabelle erstellt.

Also an dieser Stelle nochmal die ganz große Bitte um Hilfe.
Danke.
 
item: Sind $tabtipps und $tabpartien Arrays? Oder sind da Tabellen in einer MySQL-DB?

item: Geh ich richtig, dass pro Spieltag 9 Einträge in $tabparteien enthalten sind? (Spiel 1 bis Spiel 9)
 
Danke Yaslaw für deine Antwort.

$tabtipps und $tabpartien sind Tabellen in der MySQL Datenbank und
ja das ist richtig, pro Spieltag sind 9 Begegnungen in der $tabpartien eingetragen.
 
Relativ einfach. Du brauchst nur tabtipps.
Filtern -> auslesen -> in eine sinnvolle Arraystruktur bringen -> und ausgeben

PHP:
$spieltag = 1;

//Aslsesen
$sql = "SELECT * FROM tabtipps WHERE spieltag = {$spieltag}";
$result = mysql_query($sql);
while($tipp = mysql_fetch_assoc($result)){
    $tipps[$tipp['k_spieler']][$tipp['ID_partien']] = "{$tipp['tore_HT']}/{$tipp['tore_GT']}";
}

//und ausgeben
echo '<table>';
foreach($tipps as $spieler => $spielerTipps){
    echo '<tr>';
    echo "<td>{$spieler}</td>";
    foreach($spielerTipps as $partie => $tore){
        echo "<td>{$tore}</td>";
    }
    echo '</tr>';
}
echo '</table>';
 
Hallo Yaslaw,

wie kann ich dir danken? War ja nicht das erste Mal das du mir aus der Patsche geholfen hast.
Klappt wunderbar (mit einigen Anpassungen).

Frage: Kannst du mir irgendwelche guten Lektüren empfehlen, das ich dich in Zukunft nicht immer beschäftigen muss?
 
Hallo Yaslaw,

nach nun mehr zwei Jahren muss ich unseren alten Threat nochmal aktivieren.
Ich hoffe du schaust hier nochab und zu vorbei und kannst mir bei meinem Problem weiterhelfen. Selbstverständlich
und mit Kusshand nehme ich auch die Hilfe von jedem anderen an.

Zum Sachverhalt:

Mitlerweile ist die Anzahl der Mitspieler bei meinem Tippspiel rasant gestiegen so das die damalige Auflistungen keinen Sinn mehr macht. Ich muss bereist jetzt nach rechts weg scrollen und es wird dadurch doch sehr unübersichtlich. Somit habe ich versucht den Code so umzuschreiben, das die Partien (Spielpaarungen) in der 1. Reihe aufgelistet werden und die Tipp der
jeweiligen Spieler drunter weg. Leider komme ich nicht zum gewünschten Ergebnis.

Folgende Fehler:
1. Er gibt nur die Tipps des ersten Spielers aus
2. Er Sortiert die Tipps nicht immer korrekt den entsprechenden Spielen zu

Hier mein Code:
PHP:
<?php

error_reporting(E_ALL);  #Verbindung zur SQL Datenbank herstellen
$db_link = @mysql_connect($dbhost, $dbusername, $dbpasswort);  
mysql_select_db($dbname);  

//Alle user auslesen
$sql = "SELECT DISTINCT
  tip.username
  FROM
  ".$SAISON_Tipps." AS tip
  ORDER BY
  tip.username DESC";

$result = mysql_query($sql);
$users = array();
while($row = mysql_fetch_assoc($result)){
  $users[] = $row['username'];
}
//Alle Spiele mit den dazuhgehörigen Tipps für Spieltag 1 auswählen
$sql = "SELECT
  part.id_partien,
  part.heimteam,
  part.gastteam,
  tip.punkte,
  CONCAT_WS(':',part.tore_heimteam, part.tore_gastteam) AS tore,
  CONCAT_WS('&#124;',tip.datum, tip.zeit) AS final,
  tip.username,
  CONCAT_WS(':',tip.tipp_tore_heimteam, tip.tipp_tore_gastteam) AS tip
  FROM
  ".$SAISON_Partien."  AS part
  LEFT JOIN ".$SAISON_Tipps." AS tip
  ON part.id_partien = tip.id_partien
  WHERE
  part.spieltag = ".$ST."
  AND
  tip.final = '1'";

$result = mysql_query($sql);
$games = array();
//Ich verwende objekt, da es sonst ein lese-Chaos mit den Arrays gibt
while($row = mysql_fetch_object($result)){
  //Pro Spiel die Spielinfos nur einmal setzen
  if(!array_key_exists($row->id_partien, $games)){
  $games[$row->id_partien]['heimteam'] = $row->heimteam;
  $games[$row->id_partien]['gastteam'] = $row->gastteam;
  $games[$row->id_partien]['tore'] = $row->tore;
  //Ein Subarray mit allen user als key erstellen
  $games[$row->id_partien]['tipps'] =  array_fill_keys($users, null);
  }
  //User-Tipps abfüllen
  $games[$row->id_partien]['tipps'][$row->username] =  $row->tip;   
}
//Ausgabe
echo "  <div style='overflow:scroll; overflow-x:auto; overflow-y:hidden;width:1000px;'>
  <table style='border: 1px solid #000;border-collapse: collapse;background-color: #fff;width: 1000px;font-size:11px;white-space:nowrap;'>\n";


echo "<tr style='border-bottom: 2px solid #000;'>
  <td>Paarungen</td>";

foreach($games as $game){
  echo "<td style='width: 30px;'>
  <center><img src='/img/logos/{$game['heimteam']}.png'/></center>
  </td>
  <td style='text-align:center;'>
  &nbsp;{$game['tore']}&nbsp;
  </td>
  <td style='width: 30px;'>
  <center><img src='/img/logos/{$game['gastteam']}.png'/></center></td>";

  }
  echo "</tr>\n";
  //Titelzeile
   
  foreach($users as $user)
   
  echo "<tr style='border-right: 1px solid #000;'>
  <td>{$user}</td>";
   
  foreach($game['tipps'] as $user => $tipp){
   
  echo "<td colspan='3' style='text-align:center;'>{$tipp}</td>";
  }
   
  echo "</tr>\n";


?>
</table></div>

Bin für jeden Hinweis oder direkte Hilfe sehr dankbar.
 
So ich schiebe die Anfrage mal wieder nach oben!
Bin leider selber noch nicht weitergekommen. Entweder der
Fehler liegt im betücken des Arrays oder in der Ausgabe, aber selbst nach dem Prinzip
Try an Error bin ich noch zu keiner Lösung gekommen.
 
Zurück