вставить в базу данных из полей формы Joomla - PullRequest
15 голосов
/ 16 мая 2010

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

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

Ответы [ 3 ]

14 голосов
/ 25 июня 2010

Попробуйте этот пример:

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

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

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

Важно, чтобы действие = "" указывало на точный 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();   
0 голосов
/ 02 октября 2013

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

Попробуйте что-то вроде http://www.chronoengine.com/ - Хроноформы

...