PDA

Vollstndige Version anzeigen : Tabelle gibt lnge der Liste vor


Soeren
05-07-2004, 13:48
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 | ....

xabbuh
05-07-2004, 14:13
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">&nbsp;</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 "&nbsp;";
}
}
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.

Soeren
05-07-2004, 15:00
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?

xabbuh
05-07-2004, 15:02
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.

Soeren
05-07-2004, 20:17
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.?

Soeren
05-07-2004, 23:15
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?

xabbuh
06-07-2004, 00:06
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'");
}
?>

xabbuh
06-07-2004, 00:11
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.

Soeren
06-07-2004, 06:49
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 '&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="heimtore[' . $row['ID'] . ']" maxlength="2" size="3"> - ';
echo '<input type="text" name="gasttore[' . $row['ID'] . ']" maxlength="2" size="3">&nbsp;&nbsp;&nbsp;&nbsp;';
echo '<select name="verlaengerung['.$row['ID'].'" size="1">
<option value="" selected>nach regul&auml;rer Spielzeit</option>
<option value="nV">nach Verl&auml;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){

Soeren
06-07-2004, 08:29
Wenn ich verstehen wrde, was er bergibt... *grbel*
Dann knnte ich den Fehler beim eintragen/speichern vielleicht noch finden...

xabbuh
06-07-2004, 13:33
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>";

Soeren
06-07-2004, 13:58
Da bekomm ich leider keine Ausgabe...
das ergibt ne leere Datei

*grbel*

xabbuh
06-07-2004, 14:38
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.

Soeren
06-07-2004, 14:47
immer noch eine Fehlermeldung:

Warning: Invalid argument supplied for foreach() in /www/htdocs/fth/admin/erg_save.php on line 22

xabbuh
06-07-2004, 15:34
Bist du sicher, dass du das Formular mit der Methode POST und nicht mit GET bermittelst?

Soeren
06-07-2004, 15:40
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 '&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="heimtore[' . $row['ID'] . ']" maxlength="2" size="3"> - ';
echo '<input type="text" name="gasttore[' . $row['ID'] . ']" maxlength="2" size="3">&nbsp;&nbsp;&nbsp;&nbsp;';
echo '<select name="verlaengerung['.$row['ID'].'" size="1">
<option value="" selected>nach regul&auml;rer Spielzeit</option>
<option value="nV">nach Verl&auml;ngerung</option>
<option value="nP">nach Penalty</option>
</select><br>';
}
echo '<hr><div align="center"><input type="submit" value="OK"></div></form>';
?>

chris17
06-07-2004, 15:57
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

xabbuh
06-07-2004, 16:25
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.

Soeren
06-07-2004, 16:35
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?

Soeren
06-07-2004, 17:11
@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?

xabbuh
06-07-2004, 20:39
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.

Soeren
06-07-2004, 21:40
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 '&nbsp;&nbsp;&nbsp;&nbsp;';
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 '&nbsp;&nbsp;&nbsp;&nbsp;';
echo '<select name="$verlaengerung['.$row['ID'].']" size="1">';
echo '<option value="" selected>nach regul&auml;rer Spielzeit</option>';
echo '<option value="nV">nach Verl&auml;ngerung</option>';
echo '<option value="nP">nach Penalty</option>';
echo '</select><br>';
}
echo '<hr><input type="submit" value="OK"></div></form>';
?>

xabbuh
06-07-2004, 21:43
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 '&nbsp;&nbsp;&nbsp;&nbsp;';
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 '&nbsp;&nbsp;&nbsp;&nbsp;';
echo '<select name="$verlaengerung['.$row['ID'].']" size="1">';
echo '<option value="" selected>nach regul&auml;rer Spielzeit</option>';
echo '<option value="nV">nach Verl&auml;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?

Soeren
06-07-2004, 21:48
jepp, gibt es

xabbuh
06-07-2004, 21:56
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.

Soeren
06-07-2004, 22:07
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&nbsp;&nbsp;&nbsp;&nbsp;

<input type="text" name="heimtore[1]" maxlength="2" size="3"> -

<input type="text" name="gasttore[1]" maxlength="2" size="3">
&nbsp;&nbsp;&nbsp;&nbsp;

<select name="$verlaengerung[1]" size="1">

<option value="" selected>nach regul&auml;rer Spielzeit</option>
<option value="nV">nach Verl&auml;ngerung</option>
<option value="nP">nach Penalty</option>

</select>
<br><hr>

<input type="submit" value="OK">
</div></form>

xabbuh
06-07-2004, 22:19
Dann sollte es jetzt auch eigentlich funktionieren. Oder luft es immer noch nicht?

Soeren
06-07-2004, 22:22
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

Soeren
08-07-2004, 21:23
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

xabbuh
09-07-2004, 17:19
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.

Soeren
09-07-2004, 20:30
Super, Danke