Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么JRequest::getVar()在我的自定义配置文件/注册插件中没有返回任何内容?_Php_Joomla_Joomla2.5_Joomla Extensions_Joomla1.7 - Fatal编程技术网

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

Php 为什么JRequest::getVar()在我的自定义配置文件/注册插件中没有返回任何内容?,php,joomla,joomla2.5,joomla-extensions,joomla1.7,Php,Joomla,Joomla2.5,Joomla Extensions,Joomla1.7,我创建了一个额外的自定义字段,名为esrnumber。我在插件的php文件中添加了一个onUserBeforeSave()函数。这应该从我的自定义字段中获取esrnumber以及注册表中的名称,检查数据库,如果它们匹配,则返回true。从而允许用户注册 问题是我似乎无法将表单中的字段值输入到这个php脚本中。下面是我的代码 function onUserBeforeSave($user, $isnew, $new){ //sql code removed for example $fou

我创建了一个额外的自定义字段,名为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这都是默认内容)


用户注册
*必填字段
 
姓名: ;*
用户名: ;*
密码: ;*
确认密码: ;*
电子邮件地址: ;*
确认电子邮件地址: ;*
用户ESR配置文件
ESR编号 ;*
登记
或

我个人从未调用过我创建的新方法,我只是创建了这个方法,Joomla似乎会在提交表单时自动调用它

干杯。

您可以使用
$new
变量代替JRequest来检索输入:

echo $new->username;
echo $new->email;
但是,
JRequest::getVar
不起作用的原因仅仅是因为您使用了错误的名称。似乎您正在尝试使用输入字段的ID,而不是名称

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

$jform = JRequest::getVar('jform');
$username = $jform['username'];
此外,如果您使用的是Joomla版本>2.5,请参见JInput:

首先,JRequest已被弃用,不应在2.5中使用,它在新的Joomla 3.0中被完全删除。而是像这样使用:

现在,您应该能够引用yout字段,如下所示:

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

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

JArrayHelper::getValue($new, 'name', 0, 'STRING')
给你你的变量。只需更改其显示名称的位置,即可获取所需的任何用户详细信息。要获取ESR编号(我的自定义字段),我必须执行以下操作:

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

可能有一种更有效的方法可以从该数组中获取esr数,因为我认为其中只有一个esr数的实例,但目前这是可行的。

您必须将值作为参数传递给
onUserPreSave
函数。您好,我该怎么做?我跟随的导游没有提到这一点。是$user还是$new参数?当然,这将是$new参数,因为还没有关于该用户的详细信息。如果是,我应该告诉它在哪里传递值?当用户单击submit时,该函数似乎调用得很好。请显示您调用该函数的代码。我已将该函数添加到您在该插件包中看到的php文件中。当用户单击submit时,该函数会自动被调用。我希望您显示调用该函数的代码函数,而不是您定义该函数的地方我尝试了,但它似乎在
$fields=$jinput->getArray('jform')上出现了中断行。它只是一个白色的屏幕。我尝试将其更改为
$fields=$jinput->getArray($new)这并没有破坏它,但它似乎只是返回空。听起来您需要启用错误显示来查看发生了什么。
$jinput = JFactory::getApplication()->input;
$fields = $jinput->get('jform','','array');
JArrayHelper::getValue($new, 'name', 0, 'STRING')
        foreach ($new['esrprofile'] as $k => $v) {
             $esrnumber = $v;
        }