Zur Navigation

Ändern einer mysql-tabelle durch html-tabelle

1 dobberph

Hi ihr,

ich hab das Problem, dass ich eine mysql-tabelle in einer html-tabelle ausgeben will -> kein Problem ;D

jetzt will ich, dass der User die einzelnen Zellen auswählen kann und dort den Inhalt ändern können soll.

Wenn man nach der Eingabe ENTER drückt oder den Fokus wechselt, soll der einzelne Wert in der Datenbank geändert werden.

Ich kann html und PHP, nicht aber javascript (oder nur maginal).

Kann mir jemand weiterhelfen?

Mfg,
DerTobi

08.02.2006 16:33

2 Jörg Kruse

Hallo Tobi,

du könntest in der HTML-Tabelle in allen Zellen einen Link hinterlegen, der als Variablen die jeweiligen Werte für die Zeile und Spalte an ein Änderungs-Formular übergibt, also z.B.:

aendern.php?zeile=3&spalte=4

Das Änderungsformular gibt nach dem Abschicken neben der Eingabe diese Werte über hidden inputs weiter.

Die Änderung in der Datenbank schließlich erfolgt in MySQL über UPDATE, z.B.:

UPDATE '$zeile' SET wert = '$eingabe' WHERE spalte = '$spalte';

Soweit das Vorgehen im Groben - wenn dir im Detail etwas unklar ist, nochmal nachfragen :)

08.02.2006 16:56

3 dobberph

Hi,

erstmal danke für die schnelle Antwort...
Mit mysql hab ich wie gesagt keine Probleme, mit dem Übergeben durch ein Form schon mehr:

Also ich soll nen Form erstellen um die Tabelle herum:
<form>
<table>
<tr>
<td></td>
</tr>
</table>
</form>
So irgendwie? Und wie sähe das dann innen aus?

Oder meinst du ein Form pro Zelle, also

<table>
<tr>
<td>
<form>
wert der zelle
</form>
</td>
</tr>
</table>

Muss dann jede Zelle auch in ein textfeld z.B. gepresst werden?
Und wie mache ich das mit dem form ausführen, wenn die zelle defokussiert wird oder enter, ich hab dann ja auch keinen "submitbutton". Sry wegen der Fragen, forms hab ich noch nie richtig verstanden.

Es sollte übrigens so gedacht sein, dass wenn denn dann die textfelder nicht als solche zu erkennen sind (soll wie ne einfaches table aussehn).
Außerdem soll der User nicht mitkriegen, dass was in die DB eingetragen wurde, deshalb zeigt der form dann auf diesselbe datei, die dann was macht..

Danke,
DerTobi

08.02.2006 17:07

4 Jörg Kruse

Du kannst die Tabelle innerhalb der form platzieren. In die Tabellenzellen kommt dann jeweils ein input Element. Mit dem Attribut name wird die Variable bezeichnet, mit dem Attribut value kann man einen vorbelegten Wert (z.B. aus der SELECT-Anfrage) angeben

<form method="post" action="datei.php">
<table>
 <tr>
  <td><input name="wert1" type="text" size="20" maxlength="20" value="<?php echo $wert1 ?>"></td>
 <td><input name="wert2" type="text" size="20" maxlength="20" value="<?php echo $wert2 ?>"></td>
 </tr>
</table>
</form>

Das Abschicken sollte auch ohne Button funktionieren, wenn der User enter betätigt

08.02.2006 18:40

5 dobberph

Hm,
ok aber woher weiss ich, wenn die datei.php aufgerufen wird, welcher Datensatz geändert wurde und welcher wert?
Ich brauch ja zumindest den Spaltennamen und die id der Zeile.

Mfg,
DerTobi

08.02.2006 23:01

6 Jörg Kruse

Spaltenname und ID der Zeile kannst du über hidden inputs übergeben, dazu braucht es dann aber wohl pro Tanellenzelle ein Formular z.B.:

<table>
<tr>
<td><form method="post" action="datei.php">
<input type="hidden" name="zeile" value="1">
<input type="hidden" name="spalte" value="spalte1">
<input name="wert" type="text" size="20" maxlength="20" value="wert1"></form></td>
<td><form method="post" action="datei.php">
<input type="hidden" name="zeile" value="1">
<input type="hidden" name="spalte" value="spalte2">
<input name="wert" type="text" size="20" maxlength="20" value="wert2"></form></td>
</tr>
<tr>
<td><form method="post" action="datei.php">
<input type="hidden" name="zeile" value="2">
<input type="hidden" name="spalte" value="spalte1">
<input name="wert" type="text" size="20" maxlength="20" value="wert3"></form></td>
<td><form method="post" action="datei.php">
<input type="hidden" name="zeile" value="2">
<input type="hidden" name="spalte" value="spalte2">
<input name="wert" type="text" size="20" maxlength="20" value="wert4"></form></td>
</tr>
</table>

Nach dem Absenden werden die Variablen dann folgendermaßen in der datei.php wieder aufgenommen:

$zeile = $_POST['zeile'];
$spalte = $_POST['spalte'];
$wert = $_POST['wert'];

08.02.2006 23:16 | geändert: 08.02.2006 23:19

7 dobberph

Ok, ich probiers nach meinen beiden klausuren do/fr mal aus,
Danke erstmal soweit...

DerTobi

08.02.2006 23:40

8 dobberph

Hab noch nicht alles getestet, aber scheint zu funktionieren.

Eine Frage hab ich aber noch:
wie kann ich ganz oben auf der gleichen Seite die ganze Tabelle als href oder form als .csv datei zum Download bereitstellen (die Daten existieren nur in der Tabelle).

Mfg,
DerTobi

11.02.2006 12:50

10 dobberph

Das mit dem Form klappt noch nicht so ganz.
Ich mache das Form um die ganze Zeile und speichere die id in einer hiddenvar.
Jetzt reicht aber ein Enter in einer der inputs nicht mehr aus, um den Form zu submitten, wie mache ich das?

mfg,
DerTobi

13.02.2006 21:44