Trüffelkrieger
Mitglied
Hi, ich schon wieder.....
Nachdem ich hier jetzt alle Probleme mit dem Auslesen der Daten in den Griff bekommen habe, jetzt ein Problem mit dem Einfügen in die Datenbaktabelle:
Ich möchte die Leichtathletikergebnisse gern über ein Formular in die Datenbank eintragen. Überprüft werden soll:
Kleines Problem hierbei, was es vermutlich noch etwas komplexer macht:
Manchmal müssen Ergebnisse für mehrere Altersklassen gewertet werden. Es kann also vorkommen, dass ein Sportler der Altersklasse Männliche Jugend U20 auch bei den Männern startet und dann bei beiden Altersklassen eingetragen werden muss.
Mein bisheriger Versuch sieht wie folgt aus:
So, wie man sieht, gebe ich gleich die Möglichkeit, mehrere Altersklassen einzugeben, falls für mehrere gestartet wurde.
Nun muss ja in der Theorie die Tabelle, in die geschrieben wird, ausgelesen werden, damit ich meine Überprüfung starten kann, das sieht wie folgt aus:
Ich versuche so bereits alle möglichen Fälle zu berücksichtigen:
Ich lese die Zeilen aus, in denen sowohl das Jahr, der Name, die Disziplin und die Altersklasse (hier dreimal fast die gleiche Abfrage mit den evtl. verschiedenen Altersklassen) mit den Daten im Formular übereinstimmen.
Dann lese ich die Zeilen aus, in denen nur die Disziplin und die Altersklasse übereinstimmen, und in der Spalte vereinsrekord etwas steht (ein e kennzeichnet hier einen Vereinsrekord)
Soweit das Auslesen...
Nun muss ich ja eine Überprüfung nach den einzelnen Fällen starten, was denke ich direkt mit PHP per if/else am einfachsten ist.
Also dachte ich mir, dass ich vielleicht bei dem Auslesen jedem Fall mit einem AS eine eindeutige Bezeichnung zuweisen muss, um dann überprüfen zu können ob bei dem jeweiligen Fall die Ausgabe eine oder keine Zeile beträgt. Dann könnte damit ja weiter verfahren werden, was die Prüfung des evtl. besseren Ergebnisses angeht.
Das Zuweisen der Aliase müsste doch so funktionieren:
Aber wie kann ich die Fälle dann per PHP ansprechen? Klappt das genauso wie mit einzelnen Zeilen? Also:
und dann einfach über:
Oder bin ich da auf dem Holzweg?
Nachdem ich hier jetzt alle Probleme mit dem Auslesen der Daten in den Griff bekommen habe, jetzt ein Problem mit dem Einfügen in die Datenbaktabelle:
Ich möchte die Leichtathletikergebnisse gern über ein Formular in die Datenbank eintragen. Überprüft werden soll:
- ob der Athlet bereits ein Ergebnis in diesem Jahr und in der Disziplin hat
- wenn eins gefunden wird muss geprüft werden, ob das besser oder schlechter ist.
- wenn es besser ist, wird das neue Ergebnis nicht eingetragen
- ist es schlechter, wird das alte per UPDATE überschrieben.
- sollte keins gefunden werden, wird das neue mit INSERT eingetragen
- wenn eins gefunden wird muss geprüft werden, ob das besser oder schlechter ist.
- ob unter den Vereinsrekorden ein Ergebnis der jeweiligen Altersklasse(n) ist, das schlechter ist und somit auch überschrieben werden muss
Kleines Problem hierbei, was es vermutlich noch etwas komplexer macht:
Manchmal müssen Ergebnisse für mehrere Altersklassen gewertet werden. Es kann also vorkommen, dass ein Sportler der Altersklasse Männliche Jugend U20 auch bei den Männern startet und dann bei beiden Altersklassen eingetragen werden muss.
Mein bisheriger Versuch sieht wie folgt aus:
HTML:
<form action="<?php htmlspecialchars($_SERVER['PHP_SELF'])?>" method="post">
<label for="name">Name (Kuerzel)</label><input name="name" id="name" type="text" size="30">
<label for="ergebnis">Ergebnis</label><input name="ergebnis" id="ergebnis" type="text" size="30">
<label for="disziplin">Disziplin (Kuerzel)</label><input name="disziplin" id="disziplin" type="text" size="30" >
<label for="altersklasse">Altersklasse (Kuerzel)</label><input name="altersklasse" id="altersklasse" type="text" size="30">
<label for="altersklasse1">Falls für mehrere Altersklassen gestartet wurde hier die zweite (Kuerzel)</label><input name="altersklasse1" id="altersklasse1" type="text" size="30">
<label for="altersklasse2">Hier die evtl. dritte Altersklasse (Kuerzel)</label><input name="altersklasse2" id="altersklassen2" type="text" size="30">
<label for="ort">Ort</label><input name="ort" id="ort" type="text" size="30">
<label for="tag">Tag (01, 31 usw.)</label><input name="tag" id="tag" type="text" size="2">
<label for="monat">Monat</label><input name="monat" id="monat" type="text" size="2">
<label for="jahr">Jahr</label><input name="jahr" id="jahr" type="text" size="2">
<input type="submit" name="Neues Ergebnis anlegen">
So, wie man sieht, gebe ich gleich die Möglichkeit, mehrere Altersklassen einzugeben, falls für mehrere gestartet wurde.
Nun muss ja in der Theorie die Tabelle, in die geschrieben wird, ausgelesen werden, damit ich meine Überprüfung starten kann, das sieht wie folgt aus:
PHP:
$name = $_POST["name"];
$ergebnis = $_POST["ergebnis"];
$disziplin = $_POST["disziplin"];
$altersklasse = $_POST["altersklasse"];
$altersklasse1 = $_POST["altersklasse1"];
$altersklasse2 = $_POST["altersklasse2"];
$ort = $_POST["ort"];
$tag = $_POST["tag"];
$monat = $_POST["monat"];
$jahr = $_POST["jahr"];
$sql3 = mysql_query("
SELECT FROM ergebnisse
WHERE jahr = $jahr
AND skuerzel = '$name'
AND dkuerzel = '$disziplin'
AND (akuerzel = '$altersklasse' OR akuerzel = '$altersklasse1' OR akuerzel = '$altersklasse2')
OR dkuerzel = '$disziplin'
AND (akuerzel = '$altersklasse' OR akuerzel = '$altersklasse1' OR akuerzel = '$altersklasse2')
AND vereinsrekord NOT LIKE '' ");
Ich versuche so bereits alle möglichen Fälle zu berücksichtigen:
Ich lese die Zeilen aus, in denen sowohl das Jahr, der Name, die Disziplin und die Altersklasse (hier dreimal fast die gleiche Abfrage mit den evtl. verschiedenen Altersklassen) mit den Daten im Formular übereinstimmen.
Dann lese ich die Zeilen aus, in denen nur die Disziplin und die Altersklasse übereinstimmen, und in der Spalte vereinsrekord etwas steht (ein e kennzeichnet hier einen Vereinsrekord)
Soweit das Auslesen...
Nun muss ich ja eine Überprüfung nach den einzelnen Fällen starten, was denke ich direkt mit PHP per if/else am einfachsten ist.
Also dachte ich mir, dass ich vielleicht bei dem Auslesen jedem Fall mit einem AS eine eindeutige Bezeichnung zuweisen muss, um dann überprüfen zu können ob bei dem jeweiligen Fall die Ausgabe eine oder keine Zeile beträgt. Dann könnte damit ja weiter verfahren werden, was die Prüfung des evtl. besseren Ergebnisses angeht.
Das Zuweisen der Aliase müsste doch so funktionieren:
PHP:
SELECT FROM ergebnisse
WHERE jahr = $jahr
AND skuerzel = '$name'
AND dkuerzel = '$disziplin'
AND (akuerzel = '$altersklasse' OR akuerzel = '$altersklasse1' OR akuerzel = '$altersklasse2') AS fall1
OR dkuerzel = '$disziplin'
AND (akuerzel = '$altersklasse' OR akuerzel = '$altersklasse1' OR akuerzel = '$altersklasse2')
AND vereinsrekord NOT LIKE '' AS fall 2
");
Aber wie kann ich die Fälle dann per PHP ansprechen? Klappt das genauso wie mit einzelnen Zeilen? Also:
PHP:
$db_erg = mysql_query( $sql3 );
if ( ! $db_erg )
{
die('Ungültige Abfrage: ' . mysql_error());
}
$zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC);
PHP:
$zeile['fall1']
Zuletzt bearbeitet: