• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Frage : Abspeicherung (3. Fälle können eintreten)

Sonjiru

New member
Guten Abend,

ich hoffe ihr könnt mir wieder einmal aus der patsche helfen und zwar folgendes Problem, bei mir kann ein Spieler bis zu 3 Positionen bekleiden. Sprich mann kann auch in der Aufstellung auf diesen 3. Positionen einsetzen. Das ganze wird dann in eine Datenbankabgespeichert (jedoch nur die Spieler_ID NICHT auf welcher Position der Spieler gerade eingesetzt wird)..

So wird also beim Berechnen immer auf dessen Hauptposition zurückgegriffen. Nun meine Frage wie ist es lösbar, das ich auch Abspeicher auf welcher Position der Spieler eingesetzt wird.. dennoch soll auch auf dessen ID zurückgegriffen werden.

Kurzform :

Abgespeichert wird in folgendes DB Feld

Spieler1, Spieler2, Spieler3, Spieler4, Spieler5, Spieler6, Spieler7, Spieler8, Spieler9, Spieler10, Spieler11 in diese Datenbankfelder wird die ID eingetragen... Kann man es noch irgendwie regeln das auch die Position abgespeichert wird wo der Spieler spielt?


Vielen Dank :)


Die ganze Datenbank umzustrukturieren würde viel Aufwand bedeuten... evtl könnte man das ganze ja auch in die Datenbanktabelle ws_spieler abspeichern (dort ist ja auch die Spieler_ID die bei der Berechnung nochmal gebraucht wird (in der spieler-tabelle sind ja alle relevanten daten zum spieler)..


MFG Sonjiru
 
Die ganze Datenbank umzustrukturieren würde viel Aufwand bedeuten...
Also wenn das Hinzufügen eines Feldes oder einer entsprechenden Tabelle zu viel Aufwand darstellt, dann solltest Du vielleicht überlegen, ob Dein Datenmodell oder Deine Programmierung nicht grundlegend falsch oder gar Müll sind.

Daraus ergeben sich die drei Fälle (die Du ja im Threadtitel erwähnt hast):
a) darauf verzichten, die zusätzliche Information zu speichern
b) eine Krücke bauen und ein bestehendes Feld missbrauchen
c) es ordentlich machen

Meine Tipp wäre c) und ein Buch zu Datenbankdesign.
 
Nein das ist Nicht zuviel Aufwand


Ich würde vorerst zu b) tendieren da ich das ganze relativ zeitnah brauche

Wie würde so eine Krücke denn aussehen ? Hab allerdings in neues Feld angelegt

In der Spieler sowie aufstellungstabelle

Das Geld heißt aufgestellte position
 
Das ist dann schon eher Lösung c. Nimm einfach ein integer Wert für die Position und sortiere die Ergebnisse nach dieser Spalte.
 
Also in der Aufstellungstabelle ein Feld mit Positionen oder wie?

Bin grad total durch den Wind (Private Probleme) und check gerade leider nicht so ganz durch.. Ich weiß zwar was du mit dem Integer Wert meinst.. Aber nicht wie das ganze nochmal so ganz aussehen soll.

Danke für die Hilfe
 
Ja weil die Position wird ja auch nicht in der aufstellung gespeichert (also da wo er aufgestellt ist)

soll ich mal die ganze Struktur der Datenbanktabelle posten?
 
@Junkee[] : Du meinst doch mit Integer Wert zum Beispiel 1 oder 0 (true / false). Nur gibt es ja in der aufstellungstabelle gar kein positionsfeld. Ergo kann ich die Position auch nicht auf True oder False setzen ;).. oder hab ich dich komplett falsch verstanden?
 
Du meinst doch mit Integer Wert zum Beispiel 1 oder 0 (true / false).
Integer kann auch 2, 3, 4, 5, 6 oder 99999999 sein. Was Du meinst ist Boolean.

Nur gibt es ja in der aufstellungstabelle gar kein positionsfeld. Ergo kann ich die Position auch nicht auf True oder False setzen ;).. oder hab ich dich komplett falsch verstanden?
Du hast falsch verstanden, dass wir Dir mit spärlichen Informationen exakte Hinweise geben können.
Aber wenn Deine "Aufstellungstabelle" 11 Spieler enthält und Du willst die Positionen der 11 Spieler speichern, dann brauchst Du 11 weitere Felder oder ein Stringfeld, in dem jedes Zeichen einem Spieler zugeordnet ist.
Was Du dann mit den Daten anfängst, wie Du sie abfragst oder verarbeitest, ist dann die nächste Frage.
 
Stimmt sorry,

also bräuchte ich z. B. folgende felder..

Position1-position11

in position1 wird die position von spieler1 abgespeichert in position2 die position von spieler2 usw usf..

so ähnlich hab ich mir das auch schon gedacht jedoch scheitert es da an der Umsetzung da es mir derzeit nicht einfällt wie ich es hinbekomme das ich die beiden Felder sozusagen verknüpfe..
 
so ähnlich hab ich mir das auch schon gedacht jedoch scheitert es da an der Umsetzung da es mir derzeit nicht einfällt wie ich es hinbekomme das ich die beiden Felder sozusagen verknüpfe..
Keine Ahnung, was Du mit Verknüpfung meinst, aber diese existiert nur logisch - nämlich weil der Programmierer weiß, dass die Felder Spieler1 und PositionSpieler1 zusammen betrachtet werden müssen. Was Du also damit anfängst bleibt Dir überlassen.
 
Ja das mein ich ja mit Verknüpfen das die zusammen betrachtet werden müssen.. und also auch zusammenausgelesen werden müssen.. aber zu allererst müssen diese ja mal zusammenhängend in die jeweilgien Datenfelder geschrieben werden.

Sprich :

Spieler1 = ID
Position1 = AufgestelltePosition von Spieler 1

wie krieg ich das denn hin?
 
wie krieg ich das denn hin?
Offensichtlich hast Du es ja schon hinbekommen 11 Felder zusammenhängend zu speichern, denn die Spieler-IDs eines Spieles sind ja auch in einer Zeile zusammen abgespeichert. Jetzt nimmst Du einfach noch 11 Felder dazu, das funktioniert genauso, als wenn Du statt 11 Spieler-IDs 12 speichern wolltest.
 
Nein sind eben nicht zusammen in einer Zeile abgespeichert (oder ich denk grad einfach zu komplex)

DB Feld : Spieler1, Spieler2, Spieler3, Spieler4, Spieler5, Spieler6, Spieler7, Spieler8, Spieler9,Spieler10
DB Inhalt: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
 
Dann denk dir doch ein Trennzeichen aus (z.B. ;;) und setze für Spieler 1 die ID und die Position zusammen:
Spieler1 = ID1 + ";;" + Position 1

Somit hast du dann für dein DB Feld Spieler1 den DB Inhalt "1;;Positinsangebe"
Nach auslesen des Spieler eins trennst du dann den String wieder mithilfe des Trennzeichens (;;) und hast dann wieder deine ID und deine Position.
 
Nein sind eben nicht zusammen in einer Zeile abgespeichert (oder ich denk grad einfach zu komplex)

DB Feld : Spieler1, Spieler2, Spieler3, Spieler4, Spieler5, Spieler6, Spieler7, Spieler8, Spieler9,Spieler10
DB Inhalt: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
Ich denke Du weißt nicht, was ein Feld, eine Spalte oder eine Zeile ist.

Vielleicht fragst Du mal den, der die Datenbank entworfen hat, Du scheinst damit völlig überfordert zu sein.
 
Dann denk dir doch ein Trennzeichen aus (z.B. ;;) und setze für Spieler 1 die ID und die Position zusammen:
Spieler1 = ID1 + ";;" + Position 1

Somit hast du dann für dein DB Feld Spieler1 den DB Inhalt "1;;Positinsangebe"
Nach auslesen des Spieler eins trennst du dann den String wieder mithilfe des Trennzeichens (;;) und hast dann wieder deine ID und deine Position.

Hab das so probiert :

PHP:
    //Spieler
    for ($i=1; $i<=11; $i++) {
      $query .= $prefix."_spieler".$i."='".$_POST['spieler_'. $i]."+"";;""+"$position",";
    }

(ja das ganze ist so zuständig für das abspeichern ;)) basiert wie schonmal erwähnt auf einer Software von H&H.. nun gut jedoch bekomme ich da folgenden Fehler :

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in DATEI on line 192 (die oben gepostete Zeile).. :(




Tante Edit sagt:
PHP:
    //Spieler
    for ($i=1; $i<=11; $i++) {
      $query .= $prefix."_spieler".$i."='".$_POST['spieler_'. $i]."' + ";;" ".$position."  ,";
    }

So funktioniert's schonmal zumindest kommt kein Parse Error : Jedoch speichert er nicht das $position mit ab.. bzw nichtmal das ;;
 
Zuletzt bearbeitet:
(ja das ganze ist so zuständig für das abspeichern ;)) basiert wie schonmal erwähnt auf einer Software von H&H..
So wie ich das sehe wäre es leicht diese "Stelle" so umzubauen, dass die zusätzlichen Spalten befüllt werden. Allerdings ist der Code anfällig für SQL-Injection, was dazu führen kann, dass jeder beliebige User Dir Deine Datenbank komplett löschen kann.
Wenn das also von Deiner gekauften Software so kaputt ausgeliefert wurde, dann solltest Du Dich mal an den Hersteller wegen eines Updates wenden. Denn SQL-Injections sind heutzutage nichts neues mehr, und entsprechende Gegenmaßnahmen sind weitreichend bekannt.
 
Tante Edit sagt:
PHP:
    //Spieler
    for ($i=1; $i<=11; $i++) {
      $query .= $prefix."_spieler".$i."='".$_POST['spieler_'. $i]."' + ";;" ".$position."  ,";
    }

So funktioniert's schonmal zumindest kommt kein Parse Error : Jedoch speichert er nicht das $position mit ab.. bzw nichtmal das ;;

Du solltest schoneinmal überprüfen was du sa so zusammenbastelst. Nehmen wir mal für die vorhandenen Variablen folgende Werte an und setzten diese dann Schritt für Schritt in deine Codezeile ein:
PHP:
$i = 1;
$prefix = "Game";
$_POST['spieler_1'] = Mario;
$position = "F1";

$query .= $prefix."_spieler".$i."='".$_POST['spieler_'. $i]."' + ";;" ".$position."  ,";


Ersetzen vono $i:
PHP:
$query .= $prefix."_spieler1='".$_POST['spieler_1']."' + ";;" ".$position."  ,";


Ersetzen von $prefix:
PHP:
$query .= "Game_spieler1='".$_POST['spieler_1']."' + ";;" ".$position."  ,";


Ersetzen von $_POST['spieler_1']:
PHP:
$query .= "Game_spieler1='Mario' + ";;" ".$position."  ,";


Ersetzen von $position:
PHP:
$query .= "Game_spieler1='Mario' + ";;" F1  ,";


Nach meinem Verständnis ist die Befehlszeile hier bereits zu Ende:
PHP:
$query .= "Game_spieler1='Mario' + ";


Wie kommst du also auf die Idee das die Position und das Trennzeichen gespeichert werden sollen?
 
Zurück
Oben