Kev*_*ida 14
试试这个例子:
我们会将用户的名字和姓氏发布到表格中.
在数据库中创建一个表.注意它应该有前缀"jos_"
我们将此表格称为"名称".所以我们将我们的表命名为"jos_names"
在PHPMyAdmin中的SQL行(或您使用的任何工具......)中,执行此查询以创建新表:
CREATE TABLE `databasename`.`jos_names` (`id` int(11) NOT NULL auto_increment, `firstname` VARCHAR(100), `lastname` VARCHAR(100), PRIMARY KEY (`id`) )
Run Code Online (Sandbox Code Playgroud)
为简化起见,我们会将结果发布到同一页面.让我们构建表单:
<?php
/** post form to db module **/
// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
//--POST YOUR FORM DATA HERE-->
$fname = $_POST['fname'];
$lname = $_POST['lname'];
//--END POST YOUR FORM DATA---|
//--build the form------------>
?>
<form name="names" id="names" action="<?php echo JURI::current(); ?>" method="post">
<p><input type="text" name="fname" id="fname" value="" /></p>
<p><input type="text" name="lname" id="lname" value="" /></p>
<p><input id="submit" name="submit" type="submit" value="Submit Names" /></p>
</form>
//--END BUILD THE FORM--------|
<?
if( (isset($lname)) || (isset($fname)) ) {
//first name or last name set, continue-->
$data =new stdClass();
$data->id = NULL;
$data->firstname = $fname;
$data->lastname = $lname;
$db = JFactory::getDBO();
$db->insertObject('#__names', $data, id);
} else {
echo '<h4>One Field Is Required!</h4>';
}
?>
Run Code Online (Sandbox Code Playgroud)
应该这样做.如果您正在编写传统的Joomla模块,那么这应该是您的helper.php文件.
注意:只在joomla文档中包含一次"die"脚本..(已定义('_JEXEC')..
JURI :: current()自动读取当前页面URL.如果你调用echo JURI :: current(); 在带有网址http://www.example.com/names的网页上,它会显示相同的链接.
重要的是,action =""指向您将发布此模块的确切Url.
此外,将数据发布到'SELF'被认为是不好的做法,但是您对模块有限,所以除非您构建组件或插件,否则您应该将表单发布到'SELF',就像使用此示例一样.(JURI ::电流();)
在Joomla框架中,没有必要声明您的数据库名称,用户名或密码,因为Joomla已经"登录"..所以而不是查询databasename
.jos__tablename
,在joomla中,您可以用以下内容替换查询:#__tablename
.实际上,这是处理数据库查询和Joomla时的最佳实践,因为用户不必使用默认的jos_前缀,joomla会自动将"#"替换为前缀.在我的情况下,"# "等于"jos"
在查询sql以创建表时请注意..请确保替换databasename
为数据库的实际名称.
应该这样做.
如果由于某种原因您无法发布数据:1)确保单击"提交"时表单不会重定向到其他页面.如果是,请将表单操作""更改为发布此页面的绝对URL.然后从那里开始.
2)有时$ data = new方法不起作用.这取决于您如何设置模块,函数和类.这是一个替代方案:
$db =& JFactory::getDBO();
$query = "INSERT INTO `#__names` (`fname`, `lname`)
VALUES ($fname, $lname);";
$db->setQuery( $query );
$db->query();
Run Code Online (Sandbox Code Playgroud)