Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: Wert aus URL auslesen und in Datenbank speichern (Controller)  (Gelesen 2677 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

gelöschter Nutzer (03/14)

  • Gast
Hallo zusammen,


ich verzweifle gerade an einem kleinen Problem: Ich habe ein Frontend, in welchem es Besuchern möglich sein soll, Eingaben zu machen, welche ihrerseits in der Datenbank gespeichert werden sollen.


Zu jedem Datensatz ("Item") soll es also eine Nutzeranfrage ("comment") geben.

Die Items werden wunderbar angezeigt und leiten auf eine comment-view um. Diese View lädt Fieldsets aus der comment.xml-Datei und zeigt diese an.
Im Controller comment.php werden die Eingaben über die Save-Funktion abgerufen und über die Table gespeichert.

So weit so gut. Die Werte aus den Fields werden auch wunderbar in der Datenbank gespeichert. Lediglich die ID des Items wird nicht übertragen.

Die comment-View wird über die URL "informiert", um welche Item-ID es sich handelt.

Beispiel: index.php?options=com_bestia&view=comment&id=4

ID=4 sagt hier also aus: Die anzulegende Nutzereingabe bezieht sich auf das Item mit der ID 4.


Im Controller versuche ich dies folgendermaßen auszulesen:

$item_id = JRequest::getVar('id');
Wenn ich dies nun in der Datenbank speichern möchte, wird hier kein Wert eingetragen. Auch wenn ich eine direkte Ausgabe (z.B. über die Erfolgsmeldung) versuche, wird schlicht nichts angegeben:

try
{
/* Daten übergeben und speichern */
$table = $this->getTable();

if ($table->save($data)) {
// Erfolgsmeldung
$this->message = JText::_('Erfolgreich gespeichert mit der ID: '.$item_id);
} else {
// altmodischer JError-Fehler aus JTable
$this->message = JText::_( $table->getError() );
}
}
catch(Exception $e)
{
// Meldung aus dem Ausnahmefehler
$this->message = $e->getMessage();
}


Wo liegt hier der Fehler?


Diese Problematik wurde auch in anderen Foren zur Diskussion gestellt - dort ist jedoch bisher keine Antwort zurück gekommen:

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Wert aus URL auslesen und in Datenbank speichern (Controller)
« Antwort #1 am: 23. Februar 2014, 20:04:21 »
ID=4 sagt hier also aus: Die anzulegende Nutzereingabe bezieht sich auf das Item mit der ID 4.

Die ID=4 sagt aus: "Joomla! bitte editiere den Kommentar mit der ID == 4" und nichts anderes.
Joomla! ist auch nur ein Mensch...

gelöschter Nutzer (03/14)

  • Gast
Antw: Wert aus URL auslesen und in Datenbank speichern (Controller)
« Antwort #2 am: 23. Februar 2014, 20:36:25 »
Hallo und vielen Dank für Deine Antwort.

Hm, eigentlich wird hier ja nichts editiert, sondern lediglich ein neuer Kommentar hinzugefügt. Die ID, unter der der Kommentar gespeichert werden soll, ergibt sich ja aus dem Auto-Increment.

Wie würdest Du an meiner Stelle vorgehen? Sollte "id" in der URL einfach in "itemid" geändert werden? Wenn ja: Wie lese ich diese itemid aus der URL (http://domain.tld/Index.php?option=com_bestia&view=comment&itemid=4) aus, um diese in der Commets-Table zu speichern?

Es soll letztendlich in der Comments-Tabelle einfach hinterlegt werden, für welchen Eintrag (Item) der Kommentar hinterlegt wird?

Lg :)

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
Antw: Wert aus URL auslesen und in Datenbank speichern (Controller)
« Antwort #3 am: 24. Februar 2014, 14:01:26 »
&article_id=xxx

Und entsprechend dein Feld in der XML + Tabelle so benennen.
Joomla! ist auch nur ein Mensch...

gelöschter Nutzer (03/14)

  • Gast
Antw: Wert aus URL auslesen und in Datenbank speichern (Controller)
« Antwort #4 am: 24. Februar 2014, 14:19:54 »
Hallo,


das funktioniert so leider noch nicht. Ich habe "id" nun in "item_id" umbenannt.

In der XML steht folgendes:
<form>
<fieldset name="comment">
<field name="id" type="hidden"/>
        <field name="item_id" type="hidden"/>

<field name="firstname" type="text" size="40"
               class="inputbox"
               required="true"
               default=""
               autocomplete="off"
               label="COM_BESTIA_BESTIA_TYPEDETAILS_INFO"
               description="COM_BESTIA_BESTIA_TYPEDETAILS_DESC"/>
                   
       <field name="lastname" type="text" size="40"
               class="inputbox"
               required="true"
               default=""
               autocomplete="off"
               label="COM_BESTIA_BESTIA_TYPEDETAILS_INFO"
               description="COM_BESTIA_BESTIA_TYPEDETAILS_DESC"/>
     </fieldset>
</form>

Die MySQL-Tabelle hat ebenfalls ein Feld mit dem Namen "item_id".

Hier wird in der Datenbank allerdings immer "0" gespeichert.

Ich habe in die View (default.php) nun folgendes eingefügt:

$mod_item_id = $this->form->setValue('item_id', null, $item_id);

Nun wird dem Field tatsächlich die Item-ID zugewiesen und die Item-ID wird auch in die Datenbank gespeichert.


Nun habe ich allerdings noch ein weiteres Problem:


Das alles funktioniert nur, wenn in der xml nur ein Fieldset vorhanden ist.
Sobald ich mehrere Fieldsets einfüge, werden die Werte nicht mehr in der Datenbank hinterlegt und auch die $plan_id-"Übergabe" funktioniert nicht mehr.

Eine Beispiel-XML sieht wie folgt aus:


<form>
        <fieldset name="comment">
                <field name="id" type="hidden"/>
               <field name="item_id" type="hidden"/>

                <field name="firstname" type="text" size="40"
               class="inputbox"
               required="true"
               default=""
               autocomplete="off"
               label="COM_BESTIA_BESTIA_TYPEDETAILS_INFO"
               description="COM_BESTIA_BESTIA_TYPEDETAILS_DESC"/>
                   
       <field name="lastname" type="text" size="40"
               class="inputbox"
               required="true"
               default=""
               autocomplete="off"
               label="COM_BESTIA_BESTIA_TYPEDETAILS_INFO"
               description="COM_BESTIA_BESTIA_TYPEDETAILS_DESC"/>
     </fieldset>
</form>



Meine Fragen im Detail:

- Ist es möglich, das Setzen des Field-Wertes noch eleganter zu gestalten?
- Wie kann ich in der XML mehrere Fieldsets anlegen, die dann im Nachhinein auch in der Datenbank gespeichert werden?


Besten Dank für die Hilfe :)