it-swarm.dev

Jform POST

Ho un modulo che deve essere postato su un altro modulo (che è un modulo esterno). Ho il primo modulo impostato con l'azione per l'URL e il metodo post. Tuttavia, sta usando JForm. Sta funzionando bene sul 1 ° modulo e sta salvando nel database e si apre per la modifica. Tuttavia, esiste una seconda azione tramite javascript che invia a un'altra pagina con il nuovo modulo.

Dopo il caricamento della pagina, ispeziono il POST e mostra:

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]

Non posso per la vita di me, afferrare questi dati post. Ho provato tutto quello che posso pensare usando jinput e $_POST, Ma nulla sembra funzionare. Visualizza Array(0){[id]=>"" ... o NULL o semplicemente ARRAY. Non riesco a utilizzare il database, per questa azione in quanto deve venire via posta.

Qualcuno ha qualche suggerimento?

Ecco il mio codice al momento:

<?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

Quando invii un modulo utilizzando lo stile di amministrazione standard di Joomla, questo creerà una POST richiesta al server. Il server elaborerà quindi il task del modulo (che è di solito "salva" o qualcosa di simile) per salvare il modulo nel database.

Alla fine del salvataggio, Joomla esegue automaticamente un reindirizzamento alla vista modulo o alla vista elenco (a seconda che si tratti di un'azione "salva e chiudi" o "salva"). Quando si verifica questo reindirizzamento, non si è più in una richiesta POST, ma ora si è effettivamente in una richiesta GET.

Puoi verificare che ciò sia accaduto aggiornando la pagina risultante. Il tuo browser ti ha chiesto di inviare nuovamente i dati del modulo? In caso contrario, c'è stato un reindirizzamento tra il tuo post e la risposta che alla fine hai ricevuto dal server. Una volta che si verifica il reindirizzamento, nessun dato sarà accessibile da $_POST o qualsiasi altro metodo nella pagina risultante.


Quindi, se hai davvero bisogno di una copia esatta del $_POST nella forma risultante, la soluzione migliore sarebbe quella di inserirla nella sessione durante il processo di salvataggio. Quindi estrarre dalla sessione anziché dai dati di post (poiché non esiste più).

Nella funzione di salvataggio, procedere come segue:

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

Quindi, nella tua forma, puoi afferrare questo in questo modo:

$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

Estendendo la risposta di David. La tecnica che segue utilizza il metodo appositamente progettato per il problema in questione. La soluzione consiste nell'utilizzare i metodi JApplication::setUserState() e JApplication::getUserState(). Il codice seguente dimostra l'utilizzo

//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);

Puoi anche usare JApplication::getUserStateFromRequest(). Questa funzione preferisce per caricare il valore dalla richiesta, quindi lo salva anche nella sessione utente . Quindi la prossima volta che chiami questa funzione senza avere i dati richiesti, caricherà i dati dalla sessione.

https://docs.joomla.org/How_to_use_user_state_variables

Spero che aiuti qualcuno.

1
Ejaz