2010-05-16 56 views
15

我是Joomla的初学者!开发并创建了一个非常简单的模块。从Joomla表单域插入数据库

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

回答

0

尝试像http://www.chronoengine.com/ - Chronoforms

+0

废话!这是一个编程问题,链接只是一个商业组件! – 2015-05-13 09:33:07

+1

尽管我同意这是一个编程问题,但是他希望实现的最终目标可以使用该组件(或其他许多组件)来完成。 – Jeepstone 2015-05-14 10:36:56

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文档中的 “死” 脚本一次。(定义( '_JEXEC')..

JURI ::电流()自动读取当前页面的URL。如果你打电话。回显JURI :: current();在一个页面上的地址为http://www.example.com/names,那么它将显示相同的链接

重要的是,action =“”指向你要发布这个模块的确切的Url

此外,将数据发布到'SELF'被认为是不好的做法,但您对模块有限制,所以unl如果您构建了一个组件或一个插件,您应该像这个例子一样将表单发布到'SELF'。 (JURI :: current();)

当在Joomla框架中,没有必要声明您的数据库名称,用户名或密码,因为Joomla已经“登录”..所以,而不是查询databasenamejos__tablename,在joomla你可以用这个替换查询:#__tablename。实际上,这是处理db查询和Joomla时的最佳做法,因为用户不必使用默认的jos_前缀,joomla会自动用任何前缀替换“#”。在我的情况“#”等于“乔斯”查询SQL创建表..请确保您与您的数据库的实际名称替换databasename

拿笔记..

应该这样做。

如果由于某种原因您无法发布数据: 1)确保表单在您点击提交时不会重定向到其他页面。如果确实如此,请将表单操作“”更改为绝对网址,以将网页发布到此处。然后从那里开始。

2)有时$ data = new方法不起作用。这取决于你如何设置你的模块,函数和类。 这里是一个另类:

$db =& JFactory::getDBO(); 
$query = "INSERT INTO `#__names` (`fname`, `lname`) 
    VALUES ($fname, $lname);"; 
$db->setQuery($query); 
$db->query(); 
+0

太棒了!这是我正在寻找的。 – 2014-10-04 20:59:58

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> 
相关问题