it-swarm-es.tech

Jform POST cuestiones

Tengo un formulario que necesita publicar en otro formulario (que es un formulario externo). Tengo el primer formulario configurado con la acción en la URL y la publicación del método. Sin embargo, está utilizando JForm. Funciona bien en el primer formulario y se guarda en la base de datos y se abre para su edición. Sin embargo, hay una segunda acción a través de JavaScript que POST a otra página con el nuevo formulario.

Después de cargar la página, inspecciono el POST y se muestra:

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]

No puedo por mi vida, agarrar los datos de esta publicación. He intentado todo lo que puedo pensar usando jinput y $_POST, Pero nada parece funcionar. Muestra Array(0){[id]=>"" ..., o NULL, o simplemente ARRAY. No puedo usar la base de datos, para esta acción, ya que necesita venir por correo.

¿Alguien tiene alguna sugerencia?

Aquí está mi código en este 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

Cuando envía un formulario utilizando el estilo de administrador estándar de Joomla, esto creará una solicitud POST al servidor. El servidor procesará el task del formulario (que es generalmente 'guardar' o algo similar) para guardar el formulario en la base de datos.

Al final del guardado, Joomla automáticamente redirige a la vista de formulario o la vista de lista (dependiendo de si esta fue una acción de "guardar y cerrar" o "guardar"). Una vez que ocurre esta redirección, ya no estás en una solicitud POST), pero ahora estás en una solicitud GET.

Puede verificar que esto haya sucedido actualizando la página resultante. ¿Su navegador le pidió que volviera a enviar los datos del formulario? Si no, hubo una redirección entre su publicación y la respuesta que finalmente obtuvo del servidor. Una vez que se produce ese redireccionamiento, $_POST O cualquier otro método en la página resultante no podrá acceder a los datos.


Por lo tanto, si realmente necesita una copia exacta de $_POST En el formulario resultante, su mejor opción sería empujarlo a la sesión durante el proceso de guardado. Luego extraiga de la sesión en lugar de los datos de la publicación (ya que eso ya no existe).

En la función guardar, haga esto:

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

Luego, en su formulario, puede tomar esto de esta manera:

$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

Ampliando la respuesta de David. La siguiente técnica utiliza el método diseñado específicamente para el problema en cuestión. La solución es utilizar los métodos JApplication::setUserState() y JApplication::getUserState(). El siguiente código demuestra el uso

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

También puede usar JApplication::getUserStateFromRequest(). Esta función prefiere cargar el valor de la solicitud, y luego también lo guarda en la sesión del usuario . Entonces, la próxima vez que llame a esta función sin tener datos solicitados, cargará los datos de la sesión.

https://docs.joomla.org/How_to_use_user_state_variables

Espero que esto ayude a alguien.

1
Ejaz