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

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

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

Ответы

Ответ 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();   

Ответ 3

Вы можете запустить пользовательский запрос, чтобы получить результат в файле 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>