为什么JRequest :: getVar()没有在我的自定义配置文件/注册插件中返回任何内容?

时间:2012-11-01 12:56:10

标签: php joomla joomla2.5 joomla-extensions joomla1.7

我已经制作了一个名为 esrnumber 的额外自定义字段。我在插件中的php文件中添加了onUserBeforeSave()函数。这应该从我的自定义字段中获取esrnumber以及注册表单中的名称,检查数据库,如果匹配则返回true。从而允许用户注册。

问题是我似乎无法将表单中的字段值转换为此php脚本。以下是我的代码。

function onUserBeforeSave($user, $isnew, $new){
//sql code removed for example
    $foundesr = false;
    if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['esrnumber'])) {
    $test = $_GET['esrnumber'];
    } else if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['esrnumber']))         {
        $test = $_POST['esrnumber'];
    } else {
        $test = "booo";
    }
   if($foundesr == false){
        JError::raiseWarning(1000, JText::_('There is a problem with your ESR number, ' . JRequest::getVar('username') . JRequest::getVar('esrnumber') . JRequest::getVar('jform_username') . $test . 'it does not match that name in our records.'));
        return false;
    }
    return true;
}

正如您所看到的那样,大部分都是不必要的,我只是尝试了几种不同的方法来从注册表单字段中检索值,每个方法都返回空。我哪里错了?我怎样才能简单地将表单中的值转换为此方法?

以下是Joomla为表单生成的 HTML 代码(asfaik这是默认的东西)

<div class="registration">
<form id="member-registration" action="/index.php/component/users/?task=registration.register" method="post" class="form-validate">
            <fieldset>
                <legend>User Registration</legend>
                <dl>
                                <dt>
                <span class="spacer"><span class="before"></span><span class="text"><label id="jform_spacer-lbl" class=""><strong class="red">*</strong> Required field</label></span><span class="after"></span></span>                                    </dt>
            <dd>&#160;</dd>
                                            <dt>
                <label id="jform_name-lbl" for="jform_name" class="hasTip required" title="Name::Enter your full name">Name:<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[name]" id="jform_name" value="pirateballoon@gmail.com" class="required" size="30"/></dd>
                                            <dt>
                <label id="jform_username-lbl" for="jform_username" class="hasTip required" title="Username::Enter your desired user name">Username:<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[username]" id="jform_username" value="pirateballoon@gmail.com" class="validate-username required" size="30"/></dd>
                                            <dt>
                <label id="jform_password1-lbl" for="jform_password1" class="hasTip required" title="Password::Enter your desired password - Enter a minimum of 4 characters">Password:<span class="star">&#160;*</span></label>                                    </dt>
            <dd><input type="password" name="jform[password1]" id="jform_password1" value="" autocomplete="off" class="validate-password required" size="30"/></dd>
                                            <dt>
                <label id="jform_password2-lbl" for="jform_password2" class="hasTip required" title="Confirm Password::Confirm your password">Confirm Password:<span class="star">&#160;*</span></label>                                    </dt>
            <dd><input type="password" name="jform[password2]" id="jform_password2" value="" autocomplete="off" class="validate-password required" size="30"/></dd>
                                            <dt>
                <label id="jform_email1-lbl" for="jform_email1" class="hasTip required" title="Email Address::Enter your email address">Email Address:<span class="star">&#160;*</span></label>                                 </dt>
            <dd><input type="text" name="jform[email1]" class="validate-email required" id="jform_email1" value="pirateballoon@gmail.com" size="30"/></dd>
                                            <dt>
                <label id="jform_email2-lbl" for="jform_email2" class="hasTip required" title="Confirm email Address::Confirm your email address">Confirm email Address:<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[email2]" class="validate-email required" id="jform_email2" value="pirateballoon@gmail.com" size="30"/></dd>
                                                                            </dl>
    </fieldset>
                <fieldset>
                <legend>User ESR Profile</legend>
                <dl>
                                <dt>
                <label id="jform_esrprofile_esrnumber-lbl" for="jform_esrprofile_esrnumber" class=" required">ESR Number<span class="star">&#160;*</span></label>                                   </dt>
            <dd><input type="text" name="jform[esrprofile][esrnumber]" id="jform_esrprofile_esrnumber" value="" class="required"/></dd>
                            </dl>
    </fieldset>
        <div>
        <button type="submit" class="validate">Register</button>
        or          <a href="/" title="Cancel">Cancel</a>
        <input type="hidden" name="option" value="com_users" />
        <input type="hidden" name="task" value="registration.register" />
        <input type="hidden" name="b44564159b9c7ebe3b7caf93cc5ce8de" value="1" />       </div>
</form>

我个人从未调用过我所制作的新方法,我刚刚创建了该方法,Joomla似乎在提交表单后自动调用它。

干杯。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

而不是使用 JRequest 来检索输入,您可以改为使用$new变量:

echo $new->username;
echo $new->email;

但是,JRequest::getVar无效的原因仅仅是因为您使用了错误的名称。您似乎正在尝试使用输入字段的ID而不是名称。

输入名称设置为 jform [name] 等。因此,要使用 JRequest 检索它们,请获取整个数组:

$jform = JRequest::getVar('jform');
$username = $jform['username'];

此外,如果您使用的是Joomla版本&gt; 2.5见 JInput http://docs.joomla.org/Retrieving_request_data_using_JInput

答案 2 :(得分:0)

首先,不推荐使用JRequest,不应在2.5中使用它,并且在新的Joomla 3.0中完全删除它。而是像这样使用JInput

$jinput = JFactory::getApplication()->input;
$fields = $jinput->getArray('jform');

现在你应该可以像这样引用你的字段:

$fields['name'];
$fields['username'];
etc.

答案 3 :(得分:0)

解决。如果有人发现这个帖子并且需要知道,这就是我在onUserBeforeSave($user, $isnew, $new)函数中的做法。

JArrayHelper::getValue($new, 'name', 0, 'STRING')

给你你的变量。只需更改名称的位置即可获得您想要的任何用户详细信息。要获得ESR编号(我的自定义字段),我必须这样做:

        foreach ($new['esrprofile'] as $k => $v) {
             $esrnumber = $v;
        }

可能有一种更有效的方法可以从该数组中获取该数字,看看我认为那里只有一个数字实例,但现在可以使用。