web-dev-qa-db-ja.com

Jform POST issue

別のフォーム(外部フォーム)に投稿する必要があるフォームがあります。 URLとメソッドポストへのアクションを設定した最初のフォームがあります。ただし、JFormを使用しています。 1番目のフォームで正常に機能し、データベースに保存して編集用に開いています。ただし、新しいフォームで別のページにPOSTするJavaScriptを介した2番目のアクションがあります。

ページの読み込み後、POSTを検査すると、次のように表示されます。

_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]
_

私の人生では、この投稿データを取得することはできません。 jinputと_$_POST_を使用して考えられるすべてのことを試しましたが、何も機能しないようです。 Array(0){[id]=>"" ...NULL、またはARRAYのいずれかを表示します。データベースを使用することはできません。このアクションでは、ポスト経由で必要になるためです。

誰か提案はありますか?

これが今の私のコードです:

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

Joomlaの標準管理者スタイルを使用してフォームを送信すると、POSTリクエストがサーバーに作成されます。サーバーはフォームのtaskを処理します(これはフォームをデータベースに保存するには、通常「保存」または同様の方法を使用します。

保存の最後に、Joomlaは自動的にフォームビューまたはリストビューにリダイレクトします(これが「保存して閉じる」アクションか「保存」アクションかによって異なります)。このリダイレクトが発生すると、POSTリクエストではなくなりますが、実際にはGETリクエストになります。

結果のページを更新することで、これが発生したことを確認できます。ブラウザからフォームデータの再送信を求められましたか?いいえの場合、投稿と最終的にサーバーから取得した応答の間にリダイレクトがありました。リダイレクトが発生すると、結果のページで$_POSTまたはその他のメソッドからデータにアクセスできなくなります。


したがって、結果のフォームに$_POSTの正確なコピーが本当に必要な場合は、保存プロセス中にセッションにプッシュすることをお勧めします。次に、投稿データからではなく、セッションからプルします(存在しないため)。

保存機能で、次のようにします。

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

次に、フォームで、次のようにこれを取得できます。

$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

デビッドの答えを拡張します。次の手法では、当面の問題のために特別に設計された方法を使用します。解決策は、JApplication::setUserState()およびJApplication::getUserState()メソッドを使用することです。次のコードは使用法を示しています

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

JApplication::getUserStateFromRequest()を使用することもできます。この関数は、要求から値をロードすることを優先、次にユーザーセッションにも値を保存します。そのため、次にデータをリクエストせずにこの関数を呼び出すと、セッションからデータがロードされます。

https://docs.joomla.org/How_to_use_user_state_variables

誰かのお役に立てば幸いです。

1
Ejaz