Hallo mal wieder. Brauche mal hilfe. Also, ich habe eine Tabelle mit ID, Name und Punkte. Jeder Name hat auch Punkte. Nun möchte ich ein Formular erstellen, das eine Liste mit den Namen zeigt, und daneben ein Eingabefeld für Punkte. Und unten drunter noch 8 leere namensfelder mit Punktfelder. Wenn man jetzt auf absenden klickt sollen die Punkte aus dem Formular zu den Punkten in der Tabelle des jeweiligen hinzuaddiert werden. Und bei neuen Namen sollen neue Tabelleneinträge geschrieben werden. Das Formular zu erstellen ist leicht, was nicht leicht ist ist, wie ich die verarbeitung mache. Ich suche hier jetzt keine Lösung oder Scripte, sondern denkanstöße. Ich sitze da jetzt seit stunden dran, aber mir fällt nichts ein. ich könnte natürlich jede einzelne eingabe kontrollieren, aber ich dachte man kriegt es auch mit einer while oder if anweisung hin. Achja, es sei noch gesagt das nicht jeder Name aus dem Formular immer Punkte bekommt. Sondern immer nur einige, oder sogar keine, sondern nur Neue Namen. Ich hoffe ich konnte alles gut erklären. Danke schonmal.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Datenbanktabelle updaten
Einklappen
Neue Werbung 2019
Einklappen
X
-
Stichworte: -
-
-
Mir fällt nichts ein. Also, so weit bin ich:
Formular, indem die Daten aus einer DB automatisch eingetragen werden (Namen) und ein Eingabefeld in das man die neuen Punkte eintragen soll.
$x=0;
while ($zeile = mysql_fetch_object($ergebnis)) {
$x++;
echo "<tr>";
echo "<td width=\"180\" align=\"center\">$zeile->name</td>";
echo "<input name=\"id\" value=\"$zeile->id\" type=\"hidden\">";
echo "<td width=\"50\" align=\"center\"><input name=\"neue_punkte$x\" type=\"text\" style=\"width:35px;\" maxlength=\"3\"></td>";
echo "</tr>\n";
};
ich habe noch mit einem hidden-feld die ID dazu geschrieben und mit übergeben. Aber das bringt mich auch nicht weiter.
Wie könnte jetzt die Verarbeitung ablaufen wenn man auf senden klickt?
Da das ja eine schleife ist, werden so um die 40 ID's übergeben, mit maximal 8 $neupunkte werte.
wie kriege ich es hin, das nun überprüft wird welche ID einen Wert mitbekommen hat?
40 einzelne Abfragen zu machen finde ich irgendwie falsch. Muss doch einfacher gehen.
Danke schon mal
Kommentar
-
Ich hoffe, das nächste mal rückst du deinen Code anständig ein und setzest ihn in PHP-Tags. Bsp.:PHP-Code:if (!empty($_POST['sent']){
foreach($_POST['neue_punkte'] as $key => $wert){
if (empty($wert)){
continue; // Nicht ganz sauber, aber vertretbar
}
$sql = "
INSERT INTO
tabelle(
id,
punkte
)
VALUES(" .
intval($key) . ", " .
intval($wert) . "
)
ON DUPLICATE KEY
UPDATE punkte = " . intval($wert);;
mysql_query($sql) or exit("Fehler: " . mysql_error() . "<br />Abfrage: $sql<br />");
}
}
else{
// ...
echo "<form method='post' action=''>
<table>\n";
while ($zeile = mysql_fetch_object($ergebnis)) {
x++;
echo "<tr>
<td width='180' align='center'>$zeile->name</td>
<td width='50' align='center'>
<input name='neue_punkte[$zeile->id]' style='width:35px;' maxlength='3' />
</td>
</tr>\n";
}
echo "<tr>
<td>
<input type='hidden' name='sent' value='1' />
<input type='submit' name='go' value='Abschicken' />
</td>
</tr>
</table>
</form>";
}
Kommentar
-
Da ich nicht weiß wie das mit dem PHP-Code geht, bleibt mir wohl nur die unschöne Variante
Ich bin noch nicht zu hause, sondern unterwegs, aber ich denke ich versuche es so:
im Formular:
<input name="neuepunkte[$zeile->id]">
und dann in der Verarbeitung:
php-code:
for($i=0;$i<-count($neuepunkte);$i++){
if(isset($neuepunkte[$i]!="")){
UPDATE //der Punkte bei ID $i wenn was drin gespeichert
}
}
Der Code ist nur dahingeschrieben, also nicht auf PARSE ERRORS achten
Ich melde ob es geklappt hat.
Kommentar
-
Man man man, die Freundlichkeit in Person.
Es sollte nicht so rüberkommen das ich nicht dankbar für deine Hilfe wäre.
Aber ich denke, wenn hier jemand ein Prob postet, das er trotzdem drüber nachdenkt. So wie ich es tat. Und wenn man dann selber auf eine Lösung kommt (wenn sie denn funktioniert) ist es doch umso schöner
Also, danke erstmal.
Kommentar
-
Wenn du vor dem PHP-Code dies hier schreibst: [ php ] und hinter den Code dies hier : [ /php ] (ohne Leerzeichen innerhalb der eckgen Klammern), dann kann man den Code besser lesen.
ich denke, dass man das ganze so lösen kann:
Das wird allerdings dann zu undefinierten Ergebnissen führen, wenn mehrere Leute parallel mit dem Script arbeiten. In diesem Fall ist es besser, den alten Punktestand nicht vorher aus der Tabelle zu holen und ihn ins Formular einzubauen, sondern nur die Felder vorzuhalten in dnen neue Punkte hinzuaddiert werden sollen. Das UPDATE ändert sich dann wie folgt:PHP-Code:$summe = 0;
for($i=0;$i<-count($neuepunkte);$i++){
if(isset($neuepunkte[$i])){
$summe = $summe + $neuepunkte[$i];
}
}
$sql = "UPDATE tbl SET punkte = $summe WHERE ... ";
PHP-Code:$sql = "UPDATE tbl SET punkte = punkte + $summe WHERE ...";
Kommentar
-
Danke für die Erklärung zu dem php-code.
Es kommt nicht vor das mehrere Leute mit dem Script arbeiten.
Nur einer alleine. Trotzdem ist der zweite Teil deines Codes besser, da ja zu den alten Punkten die neuen hinzuadiert werden sollen. Bei dem ersten Teil überschreibst du ja nur die alten Punkte mit der neuen Summe.
Werd ich mal testen.
Kommentar
-
Also, für alle die es interessiert:
Im Formular muss der Name des input Feldes ein array werden bsp.
name="neuepunkte[$zeile->id]"
in meinem Fall gleich mit der dazugehörigen ID
dann:
Nun wird per for Schleife die Anzahl an Einträgen im Array gezählt, jeder einzelne wird per isset überprüft ob da was drin ist, und dann per update in der DB zu den alten Punkten hinzuaddiert.PHP-Code:for($i=0;$i<=count($neuepunkte);$i++){
if(isset($neuepunkte[$i])){
$neuepunkte[$i];
mysql_query("UPDATE pp_rangliste SET punkte = punkte+$neuepunkte[$i] WHERE id=$i");
}
}
Gruß
Supeede
P.S. Hatte zwar gesagt das nicht so auf PARSE ERROR geachtet werden soll, aber ich selber habe das auch vergessen und eben eine halbe Stunde gebraucht bis ich bei
den Fehler des - gefunden habe. Da muss natürlich ein = hin.PHP-Code:$i<-count($blabla
Kommentar

Kommentar