Vollstndige Version anzeigen : Tabelle gibt lnge der Liste vor
Hi,
Ich hab folgendes Problem, bei dem ihr mir hoffentlich mal wieder helfen knnt.
Ich bin gerade dabei das hier (http://www.selfphp.info/forum/showthread.php?s=&threadid=7975) umzusetzten.
Nun hab ich folgende Fragestellungen:
erste Frage
Ich hab folgende Tabelle:
ID|Spieltag|HID|AID|ToreH|ToreA|Verlaengerung
In dieser Tabelle werden alle Spiele erfasst, so dass ich den kompletten Spielplan in der Tabelle hab.
Nun mchte ich ein SELECT FORM machen, wo man den Spieltag auswhlen kann.
Wenn ich nun einfach eine Abfrage mach:
SELECT * FROM spiel ORDER BY Spieltag ASC
und dann im FORM-TAG in der WHILE Schleife mit $row[Spieltag] arbeite bekomm ich die Spieltage mehrfach, da ja zu jedem Spieltag ca. 7 Spiele erfasst werden.
Wie bekomm ich das hin, dass ich die Spieltag nicht mehrfach in der Auswahl hab.
zweite Frage
Ich mchte pro Spieltag die Ergebnisse erfassen.
wie bekomm ich das am besten hin, dass er die Werte richtig speichert.
Spiel 1: ToreH:ToreA
Spiel 2: ToreH:ToreA
Spiel 3: ToreH:ToreA
Spiel 4: ToreH:ToreA
.
.
.
Und wenn ich das bergeb soll er das richtig in der oben schon erwhnten Tabelle speichern.
Danke schon mal fr eure Hilfe...
Bin noch nicht so der Knner.
Gru
Soeren
EDIT MEINT
Ich hab noch ein Punkt vergessen
Ich mchte aus der Tabelle, also aus dem Spielplan eine Kreuztabelle entwerfen... habt ihr ne Idee, wie man das am besten lsen kann?
Team 1 | Team 2 | Team 3 | ....
Team 1 xxxxxxx| 1:2 | 13.6. | ....
Team 2 1:2 |xxxxxxxx| 2:3 | ....
Zur 1. Frage:
Ist es nicht so, dass die Anzahl der Spieltage davon abhngig ist, wieviele Mannschaften in der Liga spielen? Du knntest also die Anzahl der Mannschaften ermitteln und dann daraus berechnen, wieviele Spieltage es geben muss und diese Zahl in der Variablen $anzahlSpiele speichern.
Dann ist die Ausgabe auch nicht mehr schwer:
echo '<form method="POST" action="seite.php">n'
echo '<select name="spieltag" size="1">n';
for($i=1; $i<=$anzahlSpiele; $i++){
'<option value="' . $i . '">' . $i . '. Spieltag</option>n'
}
echo '</select>n';
echo '</form>n';
Zur 2. Frage:
Die habe ich nicht ganz verstanden. Vielleicht knntest du die noch einmal nher erlutern.
Zur 3. Frage:
Schau dir das mal an:
<?php
//TEAMNAMEN MIT ZUGEHRIGER ID IN ARRAY SPEICHERN
$result=mysql_query("SELECT ID, name, aktuell FROM verein WHERE LID='$LID' ORDER BY name, ID");
while($row=mysql_fetch_array($result, MYSQL_ASSOC)){
$team[$row['ID']]=$row['name'];
$heimverein[]=$row['ID'];
$ausverein[]=$row['ID'];
}
$result=mysql_query("SELECT HID, AID, toreH, toreA FROM spieltag WHERE LID='$LID' ORDER BY ID");
while($row=mysql_fetch_array($result)){
$spiele[$row['HID']][$row['AID']]=$row['toreH'] . ":" . $row['toreA'];
}
?>
<table border="0" cellspacing="1" cellpadding="4">
<tr>
<td colspan="2"> </td>
<?php
for($i=1; $i<=count($team); $i++){
echo "<td>" . $i . "</td>n";
}
?>
</tr>
<?php
for($zeile=1; $zeile<=count($team); $zeile++){
$HID=$heimverein[$zeile-1];
echo "<tr>n";
echo "<td>" . $zeile . "</td>n";
echo "<td>" . $team[$HID] . "</td>n";
for($spalte=1; $spalte<=count($team); $spalte++){
$AID=$ausverein[$spalte-1];
echo "<td>";
if($HID==$AID) echo "-";
else{
if(!empty($spiele[$HID][$AID])){
echo $spiele[$HID][$AID];
}
else{
echo " ";
}
}
echo "</td>n";
}
echo "</tr>n";
}
?>
</table>
Habe das aus einem mal von mir geschriebenen Script herauskopiert. Hoffe, dass ich da nichts vergessen habe. Aber das Prinzip sollte klar werden.
Super... eins und drei werd ich nachher mal testen.
Zu zweitens:
Ich will nicht jedes Spiel einzeln erfassen, sondern pro Spieltag erfassen.
Ich rufe eine Spieltag auf und da stehen dann die Paarungen...
nun kann ich hinten die Ergebnisse erfassen und auswhlen ob zB nach Verlngerung gewonnen wurde.
verstndlicher?
Noch was zu Frage 2:
Wenn ich das richtig verstanden habe, mchtest du alle Ergebnisse eines Spieltages in einem Formular eingeben. Versuch das mal so:
<?php
echo '<form method="POST" action="eintragen.php">';
//ERSTMAL ALLE SPIELE FR DIESEN SPIELTAG AUSWHLEN UND ANZEIGEN
$result=mysql_query("SELECT ID, HID, AID, ToreH, ToreA FROM spielplan WHERE Spieltag='$Spieltag'");
while($row=mysql_fetch_array($result)){
echo '<input type="hidden" name="array" value="' . $row['ID'] . '">n';
echo $row['HID'] . " - " . $row['AID'];
echo '<input type="text" name="heimtore[' . $row['ID'] . ']">';
echo '<input type="text" name="gasttore[' . $row['ID'] . ']">';
}
echo '</form>n';
?>
Jetzt die Verarbeitung der Ergebnisse:
<?php
foreach($POST as $var => $value){
$$var=strip_tags($value);
}
foreach($array as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA' WHERE ID='$ID'");
}
?>
Ich bin mir allerdings nicht sicher, ob man auch assoziative Arrays als Name eines Eingabefeldes nehmen kann. Musst du mal ausprobieren.
EDIT: Dann habe ich es ja wohl richtig verstanden ;-) Habe jetzt vergessen die optionale Auswahl der Verlngerung einzubauen. Das sollte aber fr dich kein Problem darstellen.
Original geschrieben von xabbuh
Zur 1. Frage:
Ist es nicht so, dass die Anzahl der Spieltage davon abhngig ist, wieviele Mannschaften in der Liga spielen? Du knntest also die Anzahl der Mannschaften ermitteln und dann daraus berechnen, wieviele Spieltage es geben muss und diese Zahl in der Variablen $anzahlSpiele speichern.
Dann ist die Ausgabe auch nicht mehr schwer:
echo '<form method="POST" action="seite.php">n'
echo '<select name="spieltag" size="1">n';
for($i=1; $i<=$anzahlSpiele; $i++){
'<option value="' . $i . '">' . $i . '. Spieltag</option>n'
}
echo '</select>n';
echo '</form>n';
Da zu hab ich eine Frage...
Ich hab nun anzahlSpiele=34
in meiner Auflistung geht es aber nur bis 32...
warum fehlt der 33. und der 34.?
Original geschrieben von xabbuh
Noch was zu Frage 2:
Jetzt die Verarbeitung der Ergebnisse:
<?php
foreach($POST as $var => $value){
$$var=strip_tags($value);
}
foreach($array as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA' WHERE ID='$ID'");
}
?>
Das hab ich auch so mal gemacht... leider bekomm ich nen Fehler:
Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 22
Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 25
desweiteren hab ich ein weiteres Argument (wg, der Verlngerung, etc)
wie bekomm ich das beim "eintrag.php" rein?
Original geschrieben von Soeren
Das hab ich auch so mal gemacht... leider bekomm ich nen Fehler:
Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 22
Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 25
desweiteren hab ich ein weiteres Argument (wg, der Verlngerung, etc)
wie bekomm ich das beim "eintrag.php" rein?
Sorry, kleiner Schreibfehler meinerseits. Richtig ist es so:
<?php
foreach($_POST as $var => $value){
$$var=strip_tags($value);
}
foreach($array as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA' WHERE ID='$ID'");
}
?>
Wg. der Verlngerung: Im Formular so etwas in der Art einbauen:
<select name="verlaengerung[<?php echo $row['ID']; ?>]" size="1">
<option value="X">keine Verlngerung</option>
<option value="V">Verlngerung</option>
<option value="P">Penalty Schieen</option>
</select>
Dann die Verarbeitung:
<?php
foreach($array as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA', verlaengerung='" . $verlaengerung[$ID] . "' WHERE ID='$ID'");
}
?>
Original geschrieben von Soeren
Da zu hab ich eine Frage...
Ich hab nun anzahlSpiele=34
in meiner Auflistung geht es aber nur bis 32...
warum fehlt der 33. und der 34.?
Bist du dir sicher, dass $anzahlSpiele=34 ist? Der Code sieht eigentlich richtig aus.
Das mit den Spieltagen war mein Fehler...
Hab das vorher berechnen lassen durch eine Forumal und das war der Fehlerteufel am Werke.
Jetzt gibt es nur noch ein Problem und dann kommt die Kreutabelle ;)
Hab das jetzt wie folgt:
<?php
echo '<form method="POST" action="erg_save.php">';
//ERSTMAL ALLE SPIELE FR DIESEN SPIELTAG AUSWHLEN UND ANZEIGEN
$result=mysql_query("SELECT * FROM spiele WHERE spieltag='$st'");
while($row=mysql_fetch_array($result)){
echo '<input type="hidden" name="array" value="' . $row['ID'] . '">';
$resultH=mysql_query("SELECT * FROM teams Where ID='$row[HID]'");
while($rowH=mysql_fetch_array($resultH)) {
echo $rowH['name'];};
echo " - ";
$resultA=mysql_query("SELECT * FROM teams Where ID='$row[AID]'");
while($rowA=mysql_fetch_array($resultA)) {
echo $rowA['name'];};
echo ' <input type="text" name="heimtore[' . $row['ID'] . ']" maxlength="2" size="3"> - ';
echo '<input type="text" name="gasttore[' . $row['ID'] . ']" maxlength="2" size="3"> ';
echo '<select name="verlaengerung['.$row['ID'].'" size="1">
<option value="" selected>nach regulärer Spielzeit</option>
<option value="nV">nach Verlängerung</option>
<option value="nP">nach Penalty</option>
</select><br>';
}
echo '<hr><div align="center"><input type="submit" value="OK"></div></form>';
?>
Speichern:
<?php
foreach($array as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA', verlaengerung='" . $verlaengerung[$ID] . "' WHERE ID='$ID'");
}
?>
Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 22
line 22= foreach($array as $ID){
Wenn ich verstehen wrde, was er bergibt... *grbel*
Dann knnte ich den Fehler beim eintragen/speichern vielleicht noch finden...
Original geschrieben von Soeren
Wenn ich verstehen wrde, was er bergibt... *grbel*
Dann knnte ich den Fehler beim eintragen/speichern vielleicht noch finden...
Lass dir mal $array mit print_r ausgeben. Also so:
echo "<pre>";
print_r($array);
echo "</pre>";
Da bekomm ich leider keine Ausgabe...
das ergibt ne leere Datei
*grbel*
So ist es richtig:
<?php
foreach($_POST['array'] as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA', verlaengerung='" . $verlaengerung[$ID] . "' WHERE ID='$ID'");
}
?>
Also $array durch $_POST['array'] ersetzen.
immer noch eine Fehlermeldung:
Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 22
Bist du sicher, dass du das Formular mit der Methode POST und nicht mit GET bermittelst?
ja, ganz sicher
<?php
echo '<form method="POST" action="erg_save.php">';
//ERSTMAL ALLE SPIELE FR DIESEN SPIELTAG AUSWHLEN UND ANZEIGEN
$result=mysql_query("SELECT * FROM spiele WHERE spieltag='$st'");
while($row=mysql_fetch_array($result)){
echo '<input type="hidden" name="array" value="' . $row['ID'] . '">';
$resultH=mysql_query("SELECT * FROM teams Where ID='$row[HID]'");
while($rowH=mysql_fetch_array($resultH)) {
echo $rowH['name'];};
echo " - ";
$resultA=mysql_query("SELECT * FROM teams Where ID='$row[AID]'");
while($rowA=mysql_fetch_array($resultA)) {
echo $rowA['name'];};
echo ' <input type="text" name="heimtore[' . $row['ID'] . ']" maxlength="2" size="3"> - ';
echo '<input type="text" name="gasttore[' . $row['ID'] . ']" maxlength="2" size="3"> ';
echo '<select name="verlaengerung['.$row['ID'].'" size="1">
<option value="" selected>nach regulärer Spielzeit</option>
<option value="nV">nach Verlängerung</option>
<option value="nP">nach Penalty</option>
</select><br>';
}
echo '<hr><div align="center"><input type="submit" value="OK"></div></form>';
?>
Hallo zusammen,
ich hab' mir jetzt nicht alles im Detail angeschaut, nur eine Zeile ist mir aufgefallen.
Aus "array" soll ja ein Array werden -> eckige Klammern
echo '<input type="hidden" name="array[]" value="' . $row['ID'] . '">';
Vielleicht hilft's ja
Grsse
Original geschrieben von chris17
Hallo zusammen,
ich hab' mir jetzt nicht alles im Detail angeschaut, nur eine Zeile ist mir aufgefallen.
Aus "array" soll ja ein Array werden -> eckige Klammern
echo '<input type="hidden" name="array[]" value="' . $row['ID'] . '">';
Vielleicht hilft's ja
Grsse
Manchmal sieht man den Wald vor lauter Bumen nicht. Das sollte der Fehler sein.
Ich hab das mal gendert...
und meine speicher datei sieht wie folgt aus:
<?php
foreach($_POST['array'] as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA', verlaengerung='" . $verlaengerung[$ID] . "' WHERE ID='$ID'");
}
echo "<pre>";
print_r($array);
echo "</pre>";
?>
Ergebniss:
Array
(
[0] =>
[1] =>
)
Das kann doch nicht stimmen oder?
@xabbuh:
in dem von dir geposteten Script fr die Kreuztabelle erhalte ich nur ein Verein...(eine zeile mit einer Spalte) die anderen fehlen irgendwie noch.
Hast du ne Idee woran es liegen knnte?
Original geschrieben von Soeren
Ich hab das mal gendert...
und meine speicher datei sieht wie folgt aus:
<?php
foreach($_POST['array'] as $ID){
$ToreH=(int)$heimtore[$ID];
$ToreA=(int)$gasttore[$ID];
mysql_query("UPDATE spielplan SET ToreH='$TOREH'. ToreA='$ToreA', verlaengerung='" . $verlaengerung[$ID] . "' WHERE ID='$ID'");
}
echo "<pre>";
print_r($array);
echo "</pre>";
?>
Ergebniss:
Array
(
[0] =>
[1] =>
)
Das kann doch nicht stimmen oder?
Anscheinend werden die Werte der IDs nicht korrekt bertragen. Zeig doch mal den Code des Formulars, von dem aus die Werte kommen. Irgendwo muss da ein Fehler liegen.
Hier nochmal der Code des Formulars:
<?php
echo '<form method="POST" action="erg_save.php">';
$result=mysql_query("SELECT * FROM spiele WHERE spieltag='$st'");
while($row=mysql_fetch_array($result)){
echo '<input type="hidden" name="array[]" value="'.$row['ID'].'">';
echo $row['HID'] . " - " . $row['AID'];
echo ' ';
echo '<input type="text" name="heimtore['.$row['ID'].']" maxlength="2" size="3"> - ';
echo '<input type="text" name="gasttore['.$row['ID'].']" maxlength="2" size="3">';
echo ' ';
echo '<select name="$verlaengerung['.$row['ID'].']" size="1">';
echo '<option value="" selected>nach regulärer Spielzeit</option>';
echo '<option value="nV">nach Verlängerung</option>';
echo '<option value="nP">nach Penalty</option>';
echo '</select><br>';
}
echo '<hr><input type="submit" value="OK"></div></form>';
?>
Original geschrieben von Soeren
Hier nochmal der Code des Formulars:
<?php
echo '<form method="POST" action="erg_save.php">';
$result=mysql_query("SELECT * FROM spiele WHERE spieltag='$st'");
while($row=mysql_fetch_array($result)){
echo '<input type="hidden" name="array[]" value="'.$row['ID'].'">';
echo $row['HID'] . " - " . $row['AID'];
echo ' ';
echo '<input type="text" name="heimtore['.$row['ID'].']" maxlength="2" size="3"> - ';
echo '<input type="text" name="gasttore['.$row['ID'].']" maxlength="2" size="3">';
echo ' ';
echo '<select name="$verlaengerung['.$row['ID'].']" size="1">';
echo '<option value="" selected>nach regulärer Spielzeit</option>';
echo '<option value="nV">nach Verlängerung</option>';
echo '<option value="nP">nach Penalty</option>';
echo '</select><br>';
}
echo '<hr><input type="submit" value="OK"></div></form>';
?>
In der Tabelle spiele existiert aber schon eine Spalte ID?
Und das wird auch ID geschrieben und nicht zum Beispiel id, Id oder iD?
Sonst geh einfach mal beispielhaft fr einen Spieltag in dieses Formular rein und schau im Quelltext (Ansicht -> Quelltext) nach, wie der value der versteckten Eingabefelder ist.
okay... es heit " id "
hab es nun nochmal gendert.
Hab nur ein Spiel drin... ergibt nun folgendes:
Array
(
[0] => 1
)
Quelltext des Formulars:
<form method="POST" action="erg_save.php">
<input type="hidden" name="array[]" value="1">
2 - 9
<input type="text" name="heimtore[1]" maxlength="2" size="3"> -
<input type="text" name="gasttore[1]" maxlength="2" size="3">
<select name="$verlaengerung[1]" size="1">
<option value="" selected>nach regulärer Spielzeit</option>
<option value="nV">nach Verlängerung</option>
<option value="nP">nach Penalty</option>
</select>
<br><hr>
<input type="submit" value="OK">
</div></form>
Dann sollte es jetzt auch eigentlich funktionieren. Oder luft es immer noch nicht?
Neee, geht noch nicht.
Schau ich mir aber spter noch mal in Ruhe an. Oftmals muss man was erst nen moment zur Seite legen um ein Fehler zu bemerken
Der Fehler lag im Detail:
vorher:
mysql_query("UPDATE spiele SET ToreH='$ToreH'. ToreA='$ToreA', verlaengerung='".$verlaengerung[$id]."' WHERE id='$id'");
Jetzt:
mysql_query("UPDATE spiele SET ToreH='$ToreH', ToreA='$ToreA', verlaengerung='".$verlaengerung[$id]."' WHERE id='$id'");
Na, schon gesehen?
Fehler ist der Punkt, der ein Komma sein msste.
Also das klappt.
nun muss ich nur noch die Kreuztabelle ganz fertig kriegen
Original geschrieben von Soeren
Der Fehler lag im Detail:
vorher:
mysql_query("UPDATE spiele SET ToreH='$ToreH'. ToreA='$ToreA', verlaengerung='".$verlaengerung[$id]."' WHERE id='$id'");
Jetzt:
mysql_query("UPDATE spiele SET ToreH='$ToreH', ToreA='$ToreA', verlaengerung='".$verlaengerung[$id]."' WHERE id='$id'");
Na, schon gesehen?
Fehler ist der Punkt, der ein Komma sein msste.
Also das klappt.
nun muss ich nur noch die Kreuztabelle ganz fertig kriegen
Sehr gut, ist mir auch erst durch deinen Zusatz aufgefallen. ;-) Wegen der Kreuztabelle schreibe ich nachher noch.
vBulletin v3.0.7, Copyright ©2000-2005, Jelsoft Enterprises Ltd.