it-swarm.com.de

Jform POST Probleme

Ich habe ein Formular, das in ein anderes Formular gestellt werden muss (bei dem es sich um ein externes Formular handelt). Ich habe das 1. formular mit der aktion auf die url und methode post gesetzt. Es wird jedoch JForm verwendet. Es funktioniert einwandfrei im 1. Formular und wird in der Datenbank gespeichert und zur Bearbeitung geöffnet. Es gibt jedoch eine zweite Aktion per Javascript, die mit dem neuen Formular auf eine andere Seite gepostet wird.

Nach dem Laden der Seite überprüfe ich die POST und es zeigt:

Headers   Post    HTML   Cache   Cookies

Parts multipart/form-data

jform[id]   0
jform[state]    1
jform[created_by]   23
jform[grant_type]   A
jform[cycle]    
jform[salutation]   M
jform[first_name]   vrvervtervtgbver
jform[last_name]    rtrgver
jform[title]    rvert
jform[company_name] trvrvetrb
jform[email_address]    [email protected]

Ich kann nicht für das Leben von mir, diesen Beitrag Daten greifen. Ich habe alles versucht, was ich mir vorstellen kann, mit jinput und $_POST, Aber nichts scheint zu funktionieren. Entweder wird Array(0){[id]=>"" ... oder NULL oder nur ARRAY angezeigt. Ich kann die Datenbank nicht verwenden, da diese Aktion per Post übermittelt werden muss.

Hat jemand irgendwelche Vorschläge?

Hier ist mein Code ab sofort:

<?php
/**
 * @version     1.2.0
 * @package     com_sfinnovate
 * @copyright   Copyright (C) 2014. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 * @author      Matt Dray <[email protected]> - http://www.aespire.com
 */
// no direct access
defined('_JEXEC') or die;

$doc =& JFactory::getDocument();
$doc->addStyleSheet('components/com_sfinnovate/innovatestyle.css');

JHtml::_('behavior.keepalive');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.formvalidation');
JHtml::_('formbehavior.chosen', 'select');

//Load admin language file
$lang = JFactory::getLanguage();
$lang->load('com_sfinnovate', JPATH_ADMINISTRATOR);
$doc = JFactory::getDocument();
$doc->addScript(JUri::base() . '/components/com_sfinnovate/assets/js/form.js');

if($this->item->id) {
    $canState = JFactory::getUser()->authorise('core.edit.state','com_sfinnovate.innofundapp');
} else {
    $canState = JFactory::getUser()->authorise('core.edit.state','com_sfinnovate.innofundapp.'.$this->item->id);
}

$jinput = JFactory::getApplication()->input;
$fooValues = $jinput->get('jform', NULL, NULL);

var_dump($fooValues);
?>

<script type="text/javascript">
    getScript('//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', function() {
        jQuery(document).ready(function() {
            jQuery('#form-innofundapp').submit(function(event) {

            });
        });
    });
</script>

<div class="innofundapp-edit front-end-edit">
    <?php if (!empty($this->item->id)): ?>
        <h1>Edit <?php echo $this->item->id; ?></h1>
    <?php else: ?>
        <h1>Add</h1>
    <?php endif; ?>
4
user3597234

Wenn Sie ein Formular im Standard-Admin-Stil von Joomla senden, wird eine Anforderung POST an den Server gesendet. Der Server verarbeitet dann das task des Formulars (das heißt normalerweise 'speichern' oder ähnliches), um das Formular in der Datenbank zu speichern.

Am Ende des Speichervorgangs leitet Joomla automatisch entweder zurück zur Formularansicht oder zur Listenansicht (abhängig davon, ob dies eine "Speichern und Schließen" - oder "Speichern" -Aktion war). Sobald diese Umleitung erfolgt ist, befinden Sie sich nicht mehr in einer POST) - Anforderung, sondern in einer GET-Anforderung.

Sie können überprüfen, ob dies geschehen ist, indem Sie die resultierende Seite aktualisieren. Hat Ihr Browser Sie gebeten, die Formulardaten erneut zu übermitteln? Wenn nein, gab es eine Umleitung zwischen Ihrem Beitrag und der Antwort, die Sie letztendlich vom Server erhalten haben. Sobald diese Umleitung erfolgt ist, kann auf der resultierenden Seite weder mit $_POST Noch mit einer anderen Methode auf Daten zugegriffen werden.


Wenn Sie also wirklich eine exakte Kopie des $_POST Im resultierenden Formular benötigen, ist es am besten, diese während des Speichervorgangs in die Sitzung zu verschieben. Ziehen Sie dann aus der Sitzung statt aus den Beitragsdaten (da diese nicht mehr existieren).

Führen Sie in der Speicherfunktion Folgendes aus:

$session = JFactory::getSession();
$session->set('post-data', $_POST);

Dann können Sie in Ihrem Formular Folgendes aufnehmen:

$session = JFactory::getSession();
$post = $session->get('post-data');

// clear the data so we don't process it again
$session->clear('post-data');
3
David Fritsch

Erweitere Davids Antwort. Bei der folgenden Technik wird die Methode verwendet, die speziell für das jeweilige Problem entwickelt wurde. Die Lösung besteht darin, die Methoden JApplication::setUserState() und JApplication::getUserState() zu verwenden. Der folgende Code demonstriert die Verwendung

//In the save function, do this:
JFactory::getApplication()->setUserState('post-data', $_POST, array());

//In the form , do this to retrieve the value:
JFactory::getApplication()->getUserState('post-data');

//do following to clear the value
JFactory::getApplication()->setUserState('post-data', null);

Sie können auch JApplication::getUserStateFromRequest() verwenden. Diese Funktion zieht es vor , den Wert aus der Anforderung zu laden, und speichert ihn dann auch in der Benutzersitzung . Wenn Sie diese Funktion das nächste Mal aufrufen, ohne dass Daten angefordert werden, werden die Daten aus der Sitzung geladen.

https://docs.joomla.org/How_to_use_user_state_variables

Ich hoffe es hilft jemandem.

1
Ejaz