[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Mehrere Datensätze in einem rex_form bearbeiten
Seite 1 von 1

Mehrere Datensätze in einem rex_form bearbeiten

Verfasst: 1. Mär 2010, 19:18
von wolfgang
Hallo.
Gibt es eigentlich die Möglichkeit in einem rex_form mehrere Datensätze gleichzeitig zu bearbeiten?

Dieses hier ...

Code: Alles auswählen

$form4 = new rex_a350_form($table."_attributes2values", "Technische Daten",true,"clang = $clang AND item_id = ".rex_request('oid','int'));
spukt mir diese Fehlermeldung aus:

Fatal error: rex_form: Die gegebene Where-Bedingung führt nicht zu einem eindeutigen Datensatz!

Oder gibt es die Möglichkeit Feldinhalte über rex_list direkt zu bearbeiten?

Es soll eine Reihe von technischen Daten für Geräte direkt erfasst werden können. Die Parameter sind in einer eigenen Tabelle gespeichert - wegen Mehrsprachigkeit und so.

Danke und Grüße,
Wolfgang

ps. Uuups - nicht wundern, ich habe die rex_a350_form etwas modifiziert, damit sie wieder einen where-Parameter akzeptiert und verarbeitet - das klappt soweit auch.

Verfasst: 1. Mär 2010, 20:07
von timo.huber
Hoi,

evtl. hilft dir dieser Interessante Thread weiter http://forum.redaxo.de/ftopic13989.html?
:P

MFG

Verfasst: 1. Mär 2010, 20:18
von wolfgang
Hallo Timo,
Danke für den Tipp. Allerdings blicke ich das noch nicht ganz.
Mit einem VIEW und einem INNER JOIN kann ich wohl mehrere Tabellen miteinander verknüpfen. Das klappt auch ganz gut.
Aber wie bekomme ich dann mehrere Tabellenzeilen in einen Datensatz im View?

Der View sieht beispielsweise so aus:

Code: Alles auswählen

Attribut        | Wert
----------------------
Größe           |  230
Gewicht         |   37
Geschwindigkeit |   88
Für das rex_form bräuchte ich dann

Code: Alles auswählen

n1     | v1    | n2       | v2  | n3               | v3  | usw.
---------------------------------------------------------------
Größe  | 230   | Gewicht  | 37  | Geschwindigkeit  | 88  | usw.

Verfasst: 2. Mär 2010, 00:26
von Xong
Hi wolfgang!

Jetzt hatte ich schon eine schöne Antwort geschrieben und wollte lang und breit erklären, wie das mit Views funktioniert, muss mich nun aber entschuldigen und einfach plump sagen, dass es gar nicht funktioniert.

Wahrscheinlich wirst du also nicht drum herum kommen, entweder deine eigenen INSERT- und UPDATE-Statements zu schreiben oder z. B. mit Stored Procedures zu arbeiten. Wobei ich bei letzerem genauso falsch wie bei den Views liegen könnte. Da fehlt mir einfach die praktische Erfahrung.

Verfasst: 2. Mär 2010, 09:08
von wolfgang
Danke Euch! - Auch das ist ja eine Hilfe.
Ich werde Euch über die Ergebnisse berichten.
Allen einen wunderschönen Tag,
Wolfgang
ps - schon sehr gespannt auf die 4.3 Beta ...

Verfasst: 2. Mär 2010, 18:50
von wolfgang
Hallo,
hier also das Ergebnis.
Ist noch ziemlich Patchwork, sodass ich es nicht komplett hier rein stellen kann.
Ich habe es folgendermaßen gelöst.
Eine View auf die entsprechenden Tabellen gesetzt - vielen Dank für die Hinweise hierzu.

CREATE VIEW rex_350_machinery_attributes2values AS SELECT rex_350_machinery_values.id as values_id, machine_id, attribute_id, value, pid, name, unit, clang, prio FROM rex_350_machinery_values INNER JOIN rex_350_machinery_attributes ON attribute_id = pid;

Damit hatte ich dann immerhin schon den Parameternamen (Länge / Length ...) usw., ist ja mehrsprachig - mit dem jeweiligen Wert zusammengebracht.
Anschließend habe ich die rex_a350_form Klasse so umgebogen, dass sie nicht meckert, wenn sie keine Table übergeben bekommt:

Zeile 24

Code: Alles auswählen

if ($tableName && $tableName != $REX['TABLE_PREFIX'].'350_'.$page)
Anschließend mussten noch die Felder generiert werden:

Code: Alles auswählen

  $sql = new rex_sql;
  $sql->debug = true;
  $qry = "SELECT values_id, name, unit, value FROM ".$table."_attributes2values WHERE clang = $clang AND machine_id = ".rex_request('oid','int')." ORDER BY prio";
  $sql->setQuery($qry);
  $attribute_fields = $sql->getArray();


  $form4 = new rex_a615_form2();
  $form4->addParam('clang', $clang);

  foreach ($attribute_fields as $attributes) {
      $field =& $form4->addTextField("attr_".$attributes['values_id'],$attributes['value']);
      $field->setLabel($attributes['name']." (".$attributes['unit'].")");
  }
Fürs Speichern gibt es dann wieder eine eigene save() Funktion:

Code: Alles auswählen

	function save() {
		global $REX;
		$sql = rex_sql::getInstance();
		foreach($this->getFieldsets() as $fieldsetName) {
			$fieldValues = $this->fieldsetPostValues($fieldsetName);
			foreach($fieldValues as $fieldName => $fieldValue) {
				$sql = new rex_sql;
				$qry = 'UPDATE rex_350_machinery_values SET value="'.$fieldValue.'" WHERE id = '.substr($fieldName,5);
				$sql->setQuery($qry);
			}
		}
		return true;
	}
Ist vielleicht nicht alles fürs Lehrbuch und auch nicht fertig. Wer mitwirken oder reinschauen will, bekommt gerne ftp und Redaxo Daten per pn.

Gruß Wolfgang