如何创建一个带有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”脚本..(defined(‘_JEXEC’)..
JURI :: current()自动读取当前页面的URL.如果你调用echo JURI :: current();在带有url http://www.example.com/names的页面上,它将显示相同的链接.
重要的是action =“”指向您将发布此模块的确切网址.
此外,将数据发布到“SELF”被认为是不好的做法,但是您可以使用模块进行限制,因此除非您构建组件或插件,否则应将此表单与本示例一起发布到“SELF”. (JURI ::电流();)
在Joomla框架中,没有必要声明您的数据库名称,用户名或密码,因为Joomla已经“登录”..所以,而不是查询databasename.jos__tablename,在joomla中,您可以用以下代码替换查询:#__tablename .事实上,这是处理数据库查询和Joomla的最佳做法,因为用户不必使用默认的jos_前缀,joomla会自动将“#”替换为任何前缀.在我的情况下,“#”等于“jos”
在查询sql来创建表格时请注意.请确保用数据库的实际名称替换databasename.
应该这样做
如果由于某种原因您无法发布数据:
1)当您点击提交时,确保窗体不会重定向到其他页面.如果是这样,将表单操作“”更改为绝对网址到此页面发布到该页面,然后从那里开始.
2)有时$data = new方法不起作用.这取决于您如何设置模块,功能和类.
这里有一个选择:
- $db =& JFactory::getDBO();
- $query = "INSERT INTO `#__names` (`fname`,`lname`)
- VALUES ($fname,$lname);";
- $db->setQuery( $query );
- $db->query();