从Joomla表单字段插入数据库

时间:2010-05-16 07:08:24

标签: database forms joomla insert

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

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

3 个答案:

答案 0 :(得分: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`) )

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

<?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();在包含网址http://www.example.com/names的网页上,它会显示相同的链接。

重要的是,action =“”指向您要发布此模块的确切网址。

此外,将数据发布到'SELF'被认为是不好的做法,但是您对模块有限,所以除非您构建组件或插件,否则您应该将表单发布到'SELF',就像这样做例。 (JURI ::电流())

当在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();   

答案 1 :(得分:0)

尝试类似http://www.chronoengine.com/ - Chronoforms

的内容

答案 2 :(得分:0)

您可以运行自定义查询以在简单的tmpl文件上获得结果

<?php // no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
$category =  $_REQUEST['category'];
if(isset($category))
    {
$db = JFactory::getDbo();
$db->setQuery("SELECT machine_id FROM j25_machinefinder_products WHERE category = '$category'");
// Load the row.
$result = $db->loadRowList();

//your result will return here
print_r($result);



    }

 ?>
<form action="" method="get" name="usedequipment">
<select name="category">
<?php foreach($hello as $category)
    {
    ?><option value="<?php echo $category[0]; ?>"> <?php echo $category[0]; ?></option><?php
    } ?>

</select>
<input type="submit"  />
</form>