Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.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

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 Joomla组件开发:保存、应用和取消工具栏按钮不工作_Php_Joomla_Components - Fatal编程技术网

Php Joomla组件开发:保存、应用和取消工具栏按钮不工作

Php Joomla组件开发:保存、应用和取消工具栏按钮不工作,php,joomla,components,Php,Joomla,Components,我正在学习“Learning Joomla!1.5 Extension development”一书中关于组件开发的课程。我完全按照本章中的说明创建了一个我称之为“旋转木马”的组件。我只创建了管理后端,可以查看用于创建新条目或编辑现有条目的表单,但无法保存或应用更改。单击“保存”、“应用”和“取消”按钮只会将我带到管理索引页面,但不会对数据库进行任何更改。但是,如果我使用SQL直接在DB中添加条目,我就能够在管理界面中正确地查看条目列表 我正在Windows XP上使用Joomla 1.5.20

我正在学习“Learning Joomla!1.5 Extension development”一书中关于组件开发的课程。我完全按照本章中的说明创建了一个我称之为“旋转木马”的组件。我只创建了管理后端,可以查看用于创建新条目或编辑现有条目的表单,但无法保存或应用更改。单击“保存”、“应用”和“取消”按钮只会将我带到管理索引页面,但不会对数据库进行任何更改。但是,如果我使用SQL直接在DB中添加条目,我就能够在管理界面中正确地查看条目列表

我正在Windows XP上使用Joomla 1.5.20、PHP5.2.3和MySQL 5.0.41。您可以下载“com_carousel”文件夹(我在“administrator/components”文件夹中)的zip文件。我还正确地在数据库中注册了组件,这样我就可以在后端的“组件”菜单下看到它。下面是我用来创建表“jos_carousel”的SQL语句:

请帮忙

Rgds,
Simon

不确定这是否是问题所在,但在主开关中,您使用一个参数调用saveCarousel:

case "apply"://NOT WORKING!
    case "save"://NOT WORKING!
        saveCarousel($option);
        break;
在函数定义中,它有两个参数:

function saveCarousel($option, $task)

尝试将$task变量添加到交换机内部的函数调用中,并告诉我们这是否改变了什么…

我花了一些时间调试您的扩展,并找到了您遇到的奇怪行为的原因。您不会将$option变量传递给编辑表单。因此,当表单提交时,Joomla现在不知道应该加载哪个组件来处理请求,这就是为什么它只呈现主管理页面

解决此问题的最简单方法是手动将“com_carousel”添加到编辑表单中的隐藏字段(admin.carousel.html.php中的函数editCarousel())

替换

<input type="hidden" name="option" value="<?php echo $option; ?>" />

Quick idea:你看过这本书是否有相关的勘误表吗。。。到目前为止,这本书已经提交了23处更正,您可以在该页面上查看。您应该真正考虑使用MVC方法为Joomla开发组件,这里有一个很棒的教程—Matt—查看了勘误表,但没有一个会影响我的代码。Martin,我知道MVC方法最适合开发我的组件,但我想先了解组件开发的底层基础知识,然后再考虑MVC架构。他应该从函数定义中删除$task var,这是不需要的。同样在这个函数中-function editCarousel($option)在这一行上,$id=$cid[0];您应该强制转换为int以避免可能的sql注入攻击,例如$id=(int)$cid[0];已从函数定义中删除$task。仍然没有更改:无法更新记录或在数据库中添加新记录。感谢您提供有关sql注入的提示Martin。非常感谢Silvo。您的答案将一切整理好,现在“保存”、“应用”和“取消”按钮按预期工作。我刚刚在admin.carousel.html.php中的editCarousel()参数和admin.carousel.php中的函数调用中添加了$option,根据本书的说法,实际上应该是这样的。令人惊讶的是,这样一个简单的疏忽竟然能把一切都搞糟。再次感谢,可惜我不能投票:-)
<input type="hidden" name="option" value="<?php echo $option; ?>" />
<input type="hidden" name="option" value="com_carousel" />