[PHP / MySQL] Mehrere Drop Downs -> select
Phillip
- php
hi!
ich hab leider wieder ein kleines problemchen :(
also auf meiner liga seite kann man, nachdem man das ergebnis zu einem match eingetragen hat die zugehörigen torschützen für jedes tor angeben. das sieht dann in etwa so aus:
[img]http://emerge-media.de/eintragen.jpg[/img]
das speichern und ausgeben funktioniert auch wunderbar. nur möchte ich die schützen auch editieren können.
dazu soll man zu einer quasi gleichen ansicht wie beim eintragen gelangen. in höhre der anzahl der tore die drop downs mit jeweils allen spielern des vereins. allerdings sollen die bereits gespeicherten torschützen unter den spielern "selected" werden. ihr wisst denk ich mal, was ich meine :)
das habe ich versucht nur leider funktioniert das irgendwie nicht (min noch ausser acht lassen):
[IMG]http://emerge-media.de/edit.jpg[/IMG]
irgendwie wird also immer nur der letzte torschütze selected wie man an den beiden screenshots sehen kann.
hier ist mein zugehöriger code:
[php]<?php
$tore2 = $row["ergebnis_2"];
$j = 0;
while ($j < $tore2)
{
$j++;
echo "".$j.": ";
$sql_spieler_2 = @mysql_query("select * from ".$prefix."_spieler WHERE liga_id='".$rechts["liga_id"]."' AND vereins_id='".$rechts["vereinid"]."' order by name asc;", $sql_id);
echo "<select name="spieler_id_2[".$j."]" size="1">";
echo "<option value="0">Bitte wählen</option>";
while($spieler_2 = @mysql_fetch_array($sql_spieler_2))
{
$sql_torsch_rechts = mysql_query("select * from ".$prefix."_liga_torschuetzen where match_id='".$_GET["match_id"]."' AND rechts='ja' AND spieler_id='".$spieler_2["id"]."' order by id desc;", $sql_id) or die (mysql_error());
$entrys_torsch_rechts = mysql_num_rows($sql_torsch_rechts);
if ($entrys_torsch_rechts == 1)
{
print "<option value="".$spieler_2["id"]."" selected>".$spieler_2["name"]." ".$entrys_torsch_rechts."</option>";
}
else
{
print "<option value="".$spieler_2["id"]."">".$spieler_2["name"]." ".$entrys_torsch_rechts."</option>";
}
}
echo "</select>";
$min2 = 0;
echo "<select name="minute_2[".$j."]" size="1">";
echo "<option value="0">Min.</option>";
while($min2 < 120)
{
$min2++;
print "<option value="".$min2."">".$min2."'</option>";
}
echo "</select><br>";
}
?>[/php]
zur sicherheit auch nochmal hier: [url]http://nopaste.php-q.net/183833[/url]
hier sind meine beiden datenbankstrukturen:
CREATE TABLE dfc_liga_torschuetzen (
id int(11) NOT NULL auto_increment,
match_id int(11) NOT NULL default '0',
links text NOT NULL,
rechts text NOT NULL,
spieler_id int(11) NOT NULL default '0',
minute int(11) NOT NULL default '0',
liga text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
CREATE TABLE dfc_spieler (
id int(11) NOT NULL auto_increment,
liga_id int(11) NOT NULL default '0',
vereins_id int(11) NOT NULL default '0',
name text NOT NULL,
liga text NOT NULL,
PRIMARY KEY (id)
) TYPE=MyISAM;
hmm ich hoffe mir kann jemand von euch helfen :) ich bin nämlich schon am verzweifeln :(
vielen dank schonmal:)
phillip
Hallo Phillip,
zum einen ein paar Bedienungshinweise zum Forum, die Du auch in der Forums-Hilfe unter Postings formatieren findest. Du hast es mit "Trial and Error" probiert, halt nicht getroffen, was kein Beinbruch ist. Leerzeichen bei meinen Angaben weglassen. [1]
Bilder kannst Du hier mit [ image:url ] einbinden.
dazu soll man zu einer quasi gleichen ansicht wie beim eintragen gelangen. in höhre der anzahl der tore die drop downs mit jeweils allen spielern des vereins. allerdings sollen die bereits gespeicherten torschützen unter den spielern "selected" werden. ihr wisst denk ich mal, was ich meine :)
das habe ich versucht nur leider funktioniert das irgendwie nicht (min noch ausser acht lassen):
hier ist mein zugehöriger code:
Syntaxhighlightning geht mit [ code lang=... ]Hier Dein Code[ /code ]. Es sind viele Sprachen möglich, siehe oben verlinkte (nicht vollständige) Doku. [2]
<?php
$tore2 = $row["ergebnis_2"];
[...]
?>
> zur sicherheit auch nochmal hier: <http://nopaste.php-q.net/183833>
anklickbare Links mit [ link:url ] erzeugen
> hier sind meine beiden datenbankstrukturen:
>
sql ist eine gültige Sprache für code :-)
~~~sql
> CREATE TABLE dfc_liga_torschuetzen (
> id int(11) NOT NULL auto_increment,
> match_id int(11) NOT NULL default '0',
> links text NOT NULL,
> rechts text NOT NULL,
> spieler_id int(11) NOT NULL default '0',
> minute int(11) NOT NULL default '0',
> liga text NOT NULL,
> PRIMARY KEY (id)
> ) TYPE=MyISAM;
Hmm, ich habe Deinen Code nicht wirklich verstanden, weil er aus dem Zusammenhang gerissen ist, und die Initialisierung und der Zweck mancher Variablen mir unklar oder zweifelhaft ist. Deshalb einfach ein paar grundsätzliche Anmerkungen zur Problemlösung:
Du fragst innerhalb von Schleifen mehrfach die Daten ab, die Du bereits im vorhergehenden Durchlauf abgefragt hast. Datenbankabfragen sind im Vergleich teuer, d.h. ressourcenintensiv. Du könntest diese deutlich einschränken.
Weiterhin könntest Du die Gesamtaufgabe in einzelne überschaubare Abschnitte. Du wirst feststellen, dass einzelne Abschnitte sich immer wieder wiederholen, nur mit etwas anderen Ausgangsdaten. Dies sind ideale Kandidaten für Funktionen.
Es ist eine gute Idee, innerhalb dieser Funktionen _keine_ Ausgabe zu generieren, sondern statt dessen Zeichenketten zusammenzubauen, die Du später ausgeben kannst.
Du hast ein bestimmtes Match
// Vier Abfragen an die Datenbank liefern Dir alle Daten,
// die Du benötigst. [3] Speichere die Ergebnisse in Arrays ab.
Ermittle die Spielerliste der Heimmannschaft
Ermittle die Spielerliste der Gastmannschaft
Ermittle die Details zu den Toren der Heimmannschaft
Ermittle die Details zu den Toren der Gastmannschaft
// Verarbeite die Tore der Heimmannschaft
Du benötigst die Spielerliste der Heimmannschaft
und die Torliste der Heimmannschaft
Gebe ein numeriertes Array zurück. Jeder Array-Eintrag
ist ein assoziatives Array mit den zwei Schlüsseln
'Mannschaftsliste' und 'Zeitpunkt'
Für jedes Tor dieser Mannschaft
Beginne eine Select-Liste
Für jeden Spieler der Mannschaft
Erstelle einen <option>-Eintrag
Wenn der Spieler der Torschütze ist
Markiere den Eintrag als ausgewählt
Ende Wenn
Schreibe den Spielernamen
Schliesse den Eintrag
Ende Für
Schliesse die Liste
Speichere die Liste im Array-Eintrag
Wenn der Zeitpunkt bekannt ist
Speichere den Zeitpunkt im Array-Eintrag
Ende Wenn
Ende Für
Gebe das Array zurück
// Gehe diese Aufgaben mit den Toren der Gastmannschaft
// auf gleiche Art und Weise durch
// Gebe die Arrays in geeigneter Reihenfolge aus.
Mit diesem Ansatz kannst Du die Anzahl der Datenbankzugriffe deutlich reduzieren und Deine Ergebnisse flexibel ausgeben, z.B. als Liste von Toren mit Detailangaben oder als Tabelle von Torschützen (Heim), Zeitpunkt (Heim), Torschützen (Gast), Zeitpunkt (Gast).
Die benötigten Funktionen sollten sich aus dieser Vorgehensweise ebenfalls von selbst anbieten (mit Übergabe- und Rückgabeparametern).
Freundliche Grüße
Vinzenz
[1] Ich bin im Moment zu bequem, um nach der Methode "Gunnar" vorzugehen.
[2] Mal schauen, ob ich den Bugtracker noch bedienen kann.
[3] Man käme mit zwei Abfragen aus, aber die vier hier scheinen mir angebracht.