Ответ 1
Попробуйте этот пример:
Мы разместим имя пользователя и фамилию пользователя в таблице.
создать таблицу в вашей базе данных. Обратите внимание, что он должен иметь префикс "jos _"
Мы будем называть эту форму "именами". Итак, мы назовем нашу таблицу "jos_names"
В строке SQL в PHPMyAdmin (или любом другом инструменте, который вы используете..) выполните этот запрос для создания новой таблицы:
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.
ПРИМЕЧАНИЯ: Включите только "die" script один раз в документе joomla.. (определяется ('_JEXEC')..
JURI:: current() автоматически считывает текущий URL страницы. Если вы вызываете echo JURI:: current(); на странице с адресом http://www.example.com/names, тогда он отобразит ту же ссылку.
Важно, чтобы action = "" указывало на точный Url, где вы опубликуете этот модуль.
Кроме того, считается, что плохая практика заключается в отправке данных в "SELF", но вы ограничены модулем, поэтому, если вы не создаете компонент или плагин, вы должны отправить свою форму в "SELF", как это сделано с помощью этого пример. (JURI:: тока();)
Когда в структуре Joomla нет необходимости объявлять имя, имя пользователя или пароль в базе данных, поскольку Joomla уже "вошел в систему". Поэтому вместо запроса databasename
. jos__tablename
, в joomla вы можете заменить запрос с этим: #__tablename
. На самом деле это самая лучшая практика при работе с db-запросами и 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();