database - 从 Joomla 表单字段插入数据库

标签 database forms joomla insert

我是 Joomla 的初学者!开发并创建了一个非常简单的模块。

如何创建一个包含 3 个文本字段的表单,然后将输入的值保存到数据库表中?

最佳答案

试试这个例子:

我们会将用户的名字和姓氏发布到表中。

在您的数据库中创建一个表。注意它应该有前缀“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`) )

为了简化事情,我们会将结果发布到同一页面。让我们构建表单:

<?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>';
}

?>

应该可以了。如果您正在编写传统的 Joomla 模块,这应该是您的 helper.php 文件。

注意事项: 在 joomla 文档中只包含一次“die”脚本..(定义('_JEXEC')..

JURI::current() 自动读取当前页面的 URL。如果你调用 echo JURI::current();在带有 url http://www.example.com/names 的页面上, 然后它会显示相同的链接。

重要的是 action=""指向您将发布此模块的确切 Url。

此外,将数据发布到“SELF”被认为是一种不好的做法,但是你有点受模块的限制,所以除非你构建一个组件或插件,否则你应该像这样做一样将你的表单发布到“SELF”例子。 (JURI::current();)

当在 Joomla 框架中时,不需要声明您的数据库名称、用户名或密码,因为 Joomla 已经“登录”了。所以不用查询 databasenamejos__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();   

关于database - 从 Joomla 表单字段插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842860/

相关文章:

mysql - 如何用数据库表模拟 "extending a class"?

php - 如何解决这个模棱两可的问题?

jquery - Rails 远程表单不触发 ajax :success handler

javascript - 带有 jquery 验证的 Materializecss 不起作用

Joomla模块订购不起作用

php - 从 Joomla 的 jos_user 表中的自定义字段获取数据

php - 选择并计算连接表

c# - 使用 Windows 窗体元素数组

java - 执行命令/运行程序

mysql - 在mysql工作台中正向工程ER图时出现错误1064