вставьте в базу данных от полей формы Joomla

Я - новичок к Joomla! разработка и создала очень простой модуль.

Как я создаю форму с 3 текстовыми полями и затем сохраняю вводимые значения в таблицу базы данных?

15
задан thomaux 3 January 2013 в 15:49
поделиться

2 ответа

Попробуйте что-нибудь вроде http://www.chronoengine.com/ - Chronoforms

0
ответ дан 1 December 2019 в 04:34
поделиться

Попробуйте следующий пример:

Мы разместим имя и фамилию пользователя в таблице.

создать таблицу в вашей базе данных. Обратите внимание, что он должен иметь префикс «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" только один раз в документ joomla .. (defined ('_JEXEC') ..

JURI :: current () автоматически считывает URL-адрес текущей страницы. Если вы вызываете echo, JURI :: current (); на странице с URL http://www.example.com/names , тогда будет отображена та же ссылка.

Важно, чтобы action = "" указывал на точный URL, где вы опубликуете этот модуль.

Кроме того, считается плохой практикой публиковать данные в 'SELF', но вы как бы ограничены модулем, поэтому, если вы не создаете компонент или плагин, вы должны опубликовать свою форму в ' SELF ', как это сделано в этом примере. (JURI :: current ();)

В фреймворке Joomla нет необходимости объявлять имя базы данных, имя пользователя или пароль, поскольку Joomla уже "авторизована" .. Поэтому вместо запроса имя базы данных . jos__tablename в joomla вы можете заменить запрос следующим образом: #__ tablename . Фактически, это лучшая практика при работе с db запросы и Joomla, поскольку пользователям не обязательно использовать префикс jos_ по умолчанию, joomla автоматически заменяет "# " на любой префикс. В моем случае "# " равно "jos"

Обратите внимание при запросе sql для создания таблицы .. убедитесь, что вы заменили имя базы данных на фактическое имя вашей базы данных ..

Это должно сработать.

Если по какой-то причине вы не можете опубликовать данные: 1) Убедитесь, что форма не перенаправляет на другую страницу при нажатии кнопки «Отправить». Если это так, измените действие формы "" на абсолютный URL-адрес, по которому эта страница опубликована ... затем перейдите оттуда.

2) Иногда метод $ data = new не работает. Это зависит от того, как вы настраиваете свой модуль, функции и классы. Вот альтернатива:

$db =& JFactory::getDBO();
$query = "INSERT INTO `#__names` (`fname`, `lname`)
    VALUES ($fname, $lname);";
$db->setQuery( $query );
$db->query();   
14
ответ дан 1 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: